【问题标题】:Where to declare variable to access from anywhere in program?在哪里声明变量以从程序中的任何位置访问?
【发布时间】:2013-03-20 00:13:42
【问题描述】:

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

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

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

【问题讨论】:

标签: c#


【解决方案1】:

如果程序是微不足道的——例如只有一种形式而没有额外的类文件等(例如简单的学校作业),那么您可能只需在 Form 类内但在任何方法之外声明一个静态全局,例如

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

   public MyForm()
   {
      ...
   }

   ...
}

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

还请注意,您可以在方法之外声明变量(例如static private BSTree&lt;string&gt; record;),然后从例如内部初始化它(例如new BSTree&lt;string&gt;())你的构造函数。这两种方法之间有一个非常细微的区别(即影响初始化各个成员的顺序),但这很少有影响。

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

但除此之外,您可能有一个静态的“配置”或“全局”类,其中包含这些值(可能还有从配置文件等读取的其他值):

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

   ...
}

然后您可以从 MyForm 类中访问它,例如 MyConfig.record

虽然 - 理想情况下您应该公开 properties 而不是 fields,例如:

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 成员的直接访问。

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

【讨论】:

  • @user2154803 我的快乐伙伴,感谢您的接受。请注意,我更新/更正了关于从 MyForm 类中访问静态成员的答案。我错误地声明你会使用this.record - 但由于成员是静态的,this 实例上没有record,而是record 存在于类本身上,例如MyForm.record
  • 是的,无论如何我都理解了这个想法,再次感谢 - 如果您不介意,我还有一个很难解释的问题。
  • @user2154803 抱歉,现在要睡觉了……澳大利亚凌晨 3 点 ;-) 将其作为新问题发布,您将获得所需的帮助!我明天也会检查你的问题。
【解决方案2】:
public static class MyStaticBStreeInstance
{
   public static BSTree Instance {get;private set;}
   static MyStaticBStreeInstance()
       {
          Instance = new BSTree<string>();
       }
}

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

 var bstree = MyStaticBStreeInstance.Instance 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    相关资源
    最近更新 更多