在哪里设置静态成员的属性
本文关键字:属性 静态成员 设置 在哪里 | 更新日期: 2023-09-27 18:01:28
如果我的类中有一个静态成员变量,我应该在哪里初始化它,并设置它的所有属性?
class Foo
{
static public Timer t;
private int foo;
public Foo(int f)
{
this.foo = f;
}
}
可以看到,我的类有成员变量private int foo
,它被设置为匹配构造函数的参数。我还得到了static public Timer t
,它应该在这个类的每个实例中勾选。现在我的问题是,我应该在哪里添加这段代码:
t = new Timer();
t.Interval = 1;
因为如果我将它添加到类的构造函数中,每次创建新实例时都会调用它,这不是我想要的。我可以将t = new Timer();
移动到实际的变量声明中,如:static public Timer t = new Timer();
,但我仍然需要在某处插入t.Interval = 1;
。
那么问题是,如何初始化一个静态成员——以及如何编辑它的属性——只有一次,而不是每次创建一个新实例的时候?
我要给你的建议与大多数其他回复略有不同。
我是说你应该尽可能避免使用静态构造函数。
原因是效率。细节太复杂了,无法在这里进行讨论,但请参阅这些页面:
http://ericlippert.com/2013/02/06/static-constructors-part-one/http://blogs.msdn.com/b/brada/archive/2004/04/17/115300.aspx?Redirected=true老实说,这可能没什么好担心的,但是因为避免静态构造函数很简单,所以您应该这样做。
你要做的是写一个静态方法,它将返回一个值,你可以用这个值初始化你的静态字段。
对于您的Timer示例,它看起来像这样:
private static Timer _timer = InitTimer();
private static Timer InitTimer()
{
Timer result = new Timer {Interval = 100};
return result;
}
虽然对于这样一个简单的初始化,甚至不需要编写单独的方法,因为您可以这样做:
private static Timer _timer = new Timer {Interval = 100};
但是在更复杂的情况下,您可以编写一个静态方法
您可以在静态构造函数中添加这些代码,如下所示:
static Foo()
{
t = new Timer();
t.Interval = 1;
}
从MSDN: 静态构造函数用于初始化任何静态数据,或执行只需要执行一次的特定操作。它是在创建第一个实例之前自动调用静态成员被引用
静态构造函数用于此。
有静态构造函数。像这样调用它们
class Foo {
static Foo(){
// initialize your timer here
}
。
有两种方法:
初始化
static public Timer t = new Timer
{
Interval = 1
};
静态构造函数static public Timer t;
static Foo
{
t = new Timer();
t.Interval = 1;
}