1

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

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

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

我主要是 C++ 编码员,这些问题由包含文件或外部声明处理。

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

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

要尝试更详细地了解问题:

这是 MainWindow.xaml.cs 中的声明:

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

但是当我尝试在另一个文件 PlantDisplay.xaml.cs(共享相同的命名空间)中访问它时,它会引发错误:错误 CS0103:当前上下文中不存在名称“TerrainMap”

4

5 回答 5

3

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

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

于 2013-06-18T21:32:44.947 回答
1

使用部分类

文件 myclass1.cs:

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

文件 myclass2.cs:

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

}

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

于 2013-06-18T21:30:32.043 回答
1

使用您需要的变量作为静态(和公共)创建一个类。

您以后可以随心所欲地更改它。只需将其声明为静态,并在任何地方“实例化”它。

例子

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

在任何地方:

MyClass.dictionary = new Dictionary<int, string>();
//...
于 2013-06-18T21:28:19.663 回答
1

也许您正在寻找静态成员

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

可以通过以下方式访问此示例:

SomeClass.SomeAccessibleDictionary
于 2013-06-18T21:28:25.710 回答
0

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

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

于 2013-06-18T21:28:54.787 回答