以下是否有任何区别?
class C
{
// One:
public static readonly int ValueAsAMember = 42;
// Two:
public static int ValueAsAProperty { get { return 42; } }
}
Run Code Online (Sandbox Code Playgroud)
我习惯于以第一种方式编写常量(除非它们是私有/内部的,在这种情况下我使用const关键字),但我最近看到了第二种形式.
在可读性,约定,性能或其他方面,是否有任何优势?
pes*_*ino 32
你有三个选择:
public static readonly int Value = 42;public static int Value { get { return 42; } }public const int Value = 42;选择static readonly值是否在运行时不会更改,但在将来的代码版本中可能会更改.
如果值可能在运行时更改,请选择属性.当然,如果您使用给定的代码,它将不会改变.
选择const值是否真的是一个在将来版本中甚至不会改变的常量(类似于Math.PI或者int.MinValue).当然,使用const受到价值类型的限制.
const和之间的区别static readonly是该const值将在呼叫站点上被替换.如果const在将来的版本中更改a的值,则需要使用新值重新编译依赖于类的所有程序集.
该属性需要方法调用(调用getter是方法调用).因此,如果值在运行时是常量,则不需要这样.
O. *_*per 13
是的,有一个优点:
如果值在将来的任何时候都可以更改(例如,在代码的未来版本中),例如,与时间相关,您可以在只读属性中支持该值而不更改公共你班级的界面.
如果必须readonly用属性替换字段,则必须重新编译使用该类的任何其他程序集.
有两个主要区别:
第一个是字段不能在接口上,而属性可以.因此,如果要在界面中使用它,则必须使用该属性.
第二个更有趣的是,readonly可以修改字段,同时构建对象.请使用以下代码:
public class MyTestClass
{
public readonly int MyInt = 1;
public MyTestClass()
{
MyInt = 2;
}
}
Run Code Online (Sandbox Code Playgroud)
如果打电话的话
new MyTestClass().MyInt
Run Code Online (Sandbox Code Playgroud)
它们将得到2.对于静态readonly字段的静态构造函数也是如此.
| 归档时间: |
|
| 查看次数: |
7589 次 |
| 最近记录: |