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

时间:2013-06-18 21:24:54

标签: c#

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

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

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

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

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

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

尝试更详细地解决问题:

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

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

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

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

您可以随后随意更改。只需声明为静态,然后"实例化"它在任何地方。

示例

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

随时随地:

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

答案 2 :(得分:1)

也许您正在寻找静态成员

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

可以使用以下方式访问此示例:

SomeClass.SomeAccessibleDictionary

答案 3 :(得分:1)

使用Partial classes

文件myclass1.cs:

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

文件myclass2.cs:

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

}

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

答案 4 :(得分:0)

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

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