假设我有如下的静态属性:
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:每次调用静态属性时是创建新对象还是仅在第一次创建新对象?
答案 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