从程序中的任何位置声明变量以进行访问的位置?

时间:2013-03-19 15:16:15

标签: c#

我正在使用C#创建一个WinForms应用程序。我想声明一个变量来访问整个程序,但我不知道在哪里初始化它?

该程序是基于BStree的,这是我想要初始化的内容:

BSTree<string> record = new BSTree<string>();

2 个答案:

答案 0 :(得分:3)

如果程序是微不足道的 - 例如只有一个表单而没有其他类文件等(例如简单的学校作业),那么你可能只是在Form类中声明一个静态全局,但在任何方法之外,例如

public class MyForm : Form
{
   static private BSTree<string> record = new BSTree<string>();

   public MyForm()
   {
      ...
   }

   ...
}

然后从MyForm个实例中访问它,例如MyForm.record

另请注意,您可以在方法之外声明变量(例如static private BSTree<string> record;),然后初始化(例如new BSTree<string>() )来自例如你的构造函数。这两种方法之间存在着非常微妙的差异(即影响各种成员初始化的顺序),但这种情况很少发生。

请注意static成员“属于,因此该成员只有一个”版本“。即,对于您班级的每个实例,该成员没有单独的“版本”。

但是否则,你可能有一个静态的“配置”或“全局”类,它包含这些值(以及从配置文件中读取的其他值):

public static class MyConfig
{
   static public BSTree<string> record = new BSTree<string>();

   ...
}

然后您可以在MyFormMyConfig.record内访问此内容。

虽然 - 理想情况下你应该公开属性而不是字段,例如:

public static class MyConfig
{
   static private BSTree<string> record = new BSTree<string>();
   static public BSTree<string> Record
   {
       get {return record;}
       set {record = value;}
   }
   ...
}

然后您可以在MyFormMyConfig.Record中访问此内容。这样可以直接访问基础record成员。

但更强大的方法是创建代表消费者对成员进行操作的特定方法,而不是直接将成员公开给消费者。这样你就可以限制它们允许的操作类型,并且可以以特定的方式公开结果等,即你为底层成员增加价值,而不仅仅是“持有”它们。

答案 1 :(得分:1)

public static class MyStaticBStreeInstance
{
   public static BSTree Instance {get;private set;}
   static MyStaticBStreeInstance()
       {
          Instance = new BSTree<string>();
       }
}

从任何地方,您都可以使用以下代码

来访问它
 var bstree = MyStaticBStreeInstance.Instance