C# 设置并获取属性和常量差异
以下声明之间是否有任何差异(除了C# 设置并获取属性和常量差异,c#,syntax,properties,constants,readonly,C#,Syntax,Properties,Constants,Readonly,以下声明之间是否有任何差异(除了常量和静态只读之间的差异) foo1在幕后会发生什么?它与foo2或foo3相同吗 我问的是foo1,因为我不能用这种语法使它成为const或readonly,所以我还问它是否是一个常量?它与foo2相同。与foo3的区别在于,属性访问甚至不会咨询foo3-foo3被编译成与 public static int Foo3 { { get { return 9; } } } 现在不可否认,从调用代码的角度来看,这其实并不重要——在所有情况下,您都公开了一个
常量
和静态只读
之间的差异)
foo1
在幕后会发生什么?它与foo2
或foo3
相同吗
我问的是
foo1
,因为我不能用这种语法使它成为const
或readonly
,所以我还问它是否是一个常量?它与foo2
相同。与foo3
的区别在于,属性访问甚至不会咨询foo3
-foo3
被编译成与
public static int Foo3
{
{ get { return 9; } }
}
现在不可否认,从调用代码的角度来看,这其实并不重要——在所有情况下,您都公开了一个始终返回相同值的属性
如果您想要等效的Foo3
而不使用const
,您可以使用:
public static int Foo4 => 10;
好了,现在我冷静下来了,我看到C#中的
const
类似于一个程序集标签,因此如果在实例化对象时要给它赋值,就不能使用它。有点奇怪的是,使用foo1
时,语法不是所见即所得(与其他语言相比,C#真的很像)。@kuhaku:恐怕我真的一点也不明白你的评论。。。但是foo1
只是一个只读的自动实现属性,初始值为9。但是,可以在构造函数中更改该值。
public static int Foo4 => 10;