在哪里设置静态成员的属性

本文关键字:属性 静态成员 设置 在哪里 | 更新日期: 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;
}