我正在使用 C# 制作一个 WinForms 应用程序。我想声明一个变量以在整个程序中访问,但我不知道在哪里初始化它?
该程序是基于 BStree 的,这就是我要初始化的:
BSTree<string> record = new BSTree<string>();
我正在使用 C# 制作一个 WinForms 应用程序。我想声明一个变量以在整个程序中访问,但我不知道在哪里初始化它?
该程序是基于 BStree 的,这就是我要初始化的:
BSTree<string> record = new BSTree<string>();
如果程序很简单——例如只有一种形式而没有额外的类文件等(例如简单的学校作业),那么你可能只是在你的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
这将提供对基础成员的直接访问。
但更稳健的方法是创建代表消费者对成员进行操作的特定方法,而不仅仅是将成员直接暴露给消费者。这样,您可以限制允许对它们进行的操作类型,并可以以特定方式公开结果等。也就是说,您正在为基础成员增加价值,而不仅仅是“持有”它们。
public static class MyStaticBStreeInstance
{
public static BSTree Instance {get;private set;}
static MyStaticBStreeInstance()
{
Instance = new BSTree<string>();
}
}
从任何地方,您都可以使用以下代码访问它
var bstree = MyStaticBStreeInstance.Instance