跨多个c#文件访问实例变量

本文关键字:访问 实例 变量 文件 | 更新日期: 2023-09-27 18:18:53

访问需要在多个c#文件中实例化的变量的首选方法是什么?

例如,字典不能在一个文件中声明而在另一个文件中使用,除非它在方法之间传递。

对于字节数组,我也有同样的问题。

我主要是一个c++程序员,这些问题是通过include文件或外部声明来处理的。

c#中的"小"变量可以是全局的。但是,据我所知,这个选项对于需要实例化的变量(如字典或字节数组)是不可能的。

对于这个新手问题,我很抱歉,但我在我的书或互联网上找不到任何解决方案。我今天已经浪费了很大一部分时间,试图弄清楚如何在同一个项目的两个c#文件中使用字典,但没有任何答案。

试着更详细地描述问题:

这是mainwindow . example .cs中的声明:

 public partial class MainWindow : Window
{
    public static byte[,] TerrainMap;

但是当我试图访问它在另一个文件PlantDisplay.xaml.cs(共享相同的命名空间)它抛出错误:错误CS0103:名称'TerrainMap'不存在于当前上下文中

跨多个c#文件访问实例变量

您可以将字典设置为静态,但这看起来像是一个糟糕的设计选项。从面向对象的角度来看,更好的选择是将字典中需要的函数放到具有有意义名称的单独接口中,例如具有GetValue/SetValue方法的ISettingsProvider,并将其传递给需要它的其他类的构造函数。

你也可以使用依赖注入将这些类连接在一起。

也许您正在寻找静态成员:

public class SomeClass
{
    public static IDictionary<string, string> SomeAccessibleDictionary = new Dictionary<string, string> 
    {
        { "dictionary", "data" },
        { "key", "value" },        
    }
}

这个示例可以使用:

访问
SomeClass.SomeAccessibleDictionary

使用局部类:

文件myclass1.cs:

public partial class MyClass
{
    public SomeObject SomeProperty {get;set;}
}

文件myclass2.cs:

public partial class MyClass
{
    private void SomeMethod()
    {
        var myprop = this.SomeProperty;
    }
}

编译时,这两段独立的代码将在一个类中编译。

用你需要的变量创建一个静态(和公共)的类。

以后你可以在任何地方修改它。只要声明为静态,并在任何地方"实例化"它。

class MyClass
{
    public static Dictionary<int, string> dictionary;
}

和任何地方:

MyClass.dictionary = new Dictionary<int, string>();
//...

类上的公共静态可以从任何地方访问。c#将允许您访问任何声明的类型,甚至跨文件访问。它与c++的不同之处在于,只要一个类型存在于你的项目中,c#将能够解析类型名称,你不必#include任何头文件或任何东西。

话虽如此,访问公共静态字段通常是糟糕设计的标志。有时他们是需要的/让生活更轻松,但通常有更好的方法来做事情。