2

假设我有一个静态属性,如下所示:

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

上面的属性是一样的吗?

private static object my_filed = new object();

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

即:是每次调用静态属性时创建的新对象还是仅第一次创建的新对象?

4

5 回答 5

3

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

于 2012-12-16T19:13:12.320 回答
2

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

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

于 2012-12-16T19:13:58.740 回答
2

不,这不对。

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

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

private static object my_filed = new object();

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

每次将返回类对象的相同实例,使其成为单例。

于 2012-12-16T19:14:17.937 回答
1

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

于 2012-12-16T19:15:33.357 回答
1

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

var myVar = MyClass.MyProperty无非如此var myVar = MyClass.get_MyProperty()。所以当你打电话时:

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

您正在调用一个每次创建一个新对象的方法。所以答案是否定的,代码不一样。static 修饰符还有其他作用

于 2012-12-16T19:17:48.480 回答