以下两个声明之间的主要区别是什么?
public string Name
{
get { return "Settings"; }
}
Run Code Online (Sandbox Code Playgroud)
和
public const string Name = "Settings";
Run Code Online (Sandbox Code Playgroud)
两者都不能被改变吗?
第一个是仅提供get访问器的属性.这是每个实例指定的.
第二个是编译时常量.在编译时,它将被替换"Settings",因此它根本不是该类型的成员.
该const声明确实有消除方法调用的优势(因为它只是一个编译时间常数的值),但是,属性调用可能会得到通过在运行时的JIT消除.
属性声明的优点是允许您在以后更改其工作方式,而不会破坏兼容性 - 甚至是二进制兼容性.为了查看const值的变化,需要对使用它的所有内容进行完全重新编译,即使它在单独的程序集中也是如此.
基本上,a public const可能是一个好主意,但前提是这是一个永远不会改变的值 - 不是在程序运行期间永远不会改变的值,但在任何时候都不会改变. Int32.MaxValue这是一个很好的例子 - 这具有基于Int32类型本身的特定含义 - 这种方式无法改变.因此,它作为一个有意义public const.在您的情况下,"Settings"可能是您最终想要更改的内容- 如果是这种情况,则将其封装在属性中是有意义的.
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |