0

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

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

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

2 回答 2

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>();

   ...
}

然后你可以从你的MyForm班级中访问它,比如MyConfig.record.

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

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

然后你可以从你的MyForm班级中访问它,比如MyConfig.Record. record这将提供对基础成员的直接访问。

但更稳健的方法是创建代表消费者对成员进行操作的特定方法,而不仅仅是将成员直接暴露给消费者。这样,您可以限制允许对它们进行的操作类型,并可以以特定方式公开结果等。也就是说,您正在为基础成员增加价值,而不仅仅是“持有”它们。

于 2013-03-19T15:21:35.530 回答
1
public static class MyStaticBStreeInstance
{
   public static BSTree Instance {get;private set;}
   static MyStaticBStreeInstance()
       {
          Instance = new BSTree<string>();
       }
}

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

 var bstree = MyStaticBStreeInstance.Instance 
于 2013-03-19T15:22:07.527 回答