这两种财产申报之间的根本区别是什么?

jco*_*and 2 c# properties

以下两个声明之间的主要区别是什么?

public string Name
{
  get { return "Settings"; }
}
Run Code Online (Sandbox Code Playgroud)

public const string Name = "Settings";
Run Code Online (Sandbox Code Playgroud)

两者都不能被改变吗?

Ree*_*sey 9

第一个是仅提供get访问器的属性.这是每个实例指定的.

第二个是编译时常量.在编译时,它将被替换"Settings",因此它根本不是该类型的成员.

const声明确实有消除方法调用的优势(因为它只是一个编译时间常数的值),但是,属性调用可能会得到通过在运行时的JIT消除.

属性声明的优点是允许您在以后更改其工作方式,而不会破坏兼容性 - 甚至是二进制兼容性.为了查看const值的变化,需要对使用它的所有内容进行完全重新编译,即使它在单独的程序集中也是如此.

基本上,a public const可能是一个好主意,但前提是这是一个永远不会改变的值 - 不是在程序运行期间永远不会改变的值,但在任何时候都不会改变. Int32.MaxValue这是一个很好的例子 - 这具有基于Int32类型本身的特定含义 - 这种方式无法改变.因此,它作为一个有意义public const.在您的情况下,"Settings"可能是您最终想要更改的内容- 如果是这种情况,则将其封装在属性中是有意义的.