静态修饰符如何工作?

时间:2012-12-16 19:11:41

标签: c# static

假设我有如下的静态属性:

public static object MyProperty
{
   get { return new object(); }
}

以上属性是否相同?

private static object my_filed = new object();

public static object MyProperty
{
   get { return my_filed; }
}

I.e:每次调用静态属性时是创建新对象还是仅在第一次创建新对象?

5 个答案:

答案 0 :(得分:3)

每次读取属性时都会执行属性getter,因此每次都会创建一个新的对象实例。

答案 1 :(得分:2)

两种机制不同。在第一个中,它每次都会创建新对象。

虽然Static methods/variables与类定义相关联,但只要调用该方法,静态方法内部编写的代码就会被执行。在您的示例中,您已创建了用于创建新对象实例的语句,因此只要调用该方法,它就会创建一个新的对象实例。

答案 2 :(得分:2)

不,不是。

public static object MyProperty
{
   get { return new object(); }
}

每次都会返回一个新的对象实例,这可能不是你想要的,

private static object my_filed = new object();

public static object MyProperty
{
   get { return my_filed; }
}

每次都会返回类对象的同一个实例,使其成为单例。

答案 3 :(得分:1)

静态属性类似于静态方法。它使用要访问的复合名称。静态属性使用与实例属性相同的get和set标记。在您的程序中,第一种情况每次都会创建新对象。第二不是。

答案 4 :(得分:1)

要知道正确答案,您需要知道属性是什么。属性只不过是一种对你隐藏的方法。

所以var myVar = MyClass.MyProperty只不过是var myVar = MyClass.get_MyProperty()。所以当你打电话时:

public static Object MyProperty
{
    get { return new Object(); }
}

您正在调用每次创建新Object的方法。所以答案是否定的,代码不一样。 The static modifier does something else