我正在使用C#创建一个WinForms应用程序。我想声明一个变量来访问整个程序,但我不知道在哪里初始化它?
该程序是基于BStree的,这是我想要初始化的内容:
BSTree<string> record = new BSTree<string>();
答案 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>();
...
}
然后您可以在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
成员。
但更强大的方法是创建代表消费者对成员进行操作的特定方法,而不是直接将成员公开给消费者。这样你就可以限制它们允许的操作类型,并且可以以特定的方式公开结果等,即你为底层成员增加价值,而不仅仅是“持有”它们。
答案 1 :(得分:1)
public static class MyStaticBStreeInstance
{
public static BSTree Instance {get;private set;}
static MyStaticBStreeInstance()
{
Instance = new BSTree<string>();
}
}
从任何地方,您都可以使用以下代码
来访问它 var bstree = MyStaticBStreeInstance.Instance