C# 静态修改器是如何工作的?

C# 静态修改器是如何工作的?,c#,static,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; } } 即:新对象是每次调用静态属性时创建的还是第一次创建的?每次读取属性时都会执行属

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

public static object MyProperty
{
   get { return new object(); }
}
上述财产与我们的相同吗

private static object my_filed = new object();

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

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

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

两种机制不同。在第一种情况下,每次都会创建新对象

虽然
静态方法/变量
与类定义相关联,但是只要调用该方法,就可以执行在静态方法中编写的代码。在您的示例中,您已经编写了创建新对象实例的语句,因此无论何时调用该方法,它都将创建一个新的对象实例。

不,不是

public static object MyProperty
{
   get { return new object(); }
}
每次都将返回对象的一个新实例,这可能不是您想要的,并且

private static object my_filed = new object();

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

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

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

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

所以
var myVar=MyClass.MyProperty
就是
var myVar=MyClass.get\u MyProperty()
。所以当你打电话时:

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

您正在调用一个方法,该方法每次都创建一个新对象。所以答案是不,代码不一样

虽然这是一个很好的问题,但你可以很容易地自己进行实验并找出答案。