我有一个类Constants,其中我存储了许多静态只读变量。
我应该这样做:
private static readonly int _maxThings = 100;
...
public static int MaxThings { get { return _maxThings; } }
这对我来说似乎有点多余。我有什么理由不这样做吗?
public static int MaxThings { get { return 100; } }
好的,所以这是一个问题的大脑放屁。我认为重点是,如果我要在初始化时设置此值,那么使用静态支持字段并公开一个不需要为静态的公共get-only属性是有意义的。
但是,如果我很乐意将公共静态属性设置为硬值,那么它之间没有功能差异,只是将它烘焙到程序集中。除非我在这里缺少一些其他概念,在这种情况下我只使用const。
感谢您的回答。
答案 0 :(得分:3)
你应该做
public const int MaxThings = 100;
在这种情况下我没有理由看到使用属性。
更新 - >
回应评论..如果你正在开发一个库并导出常量,那么了解常量如何被消耗为int .net是很重要的。针对您的库进行编译时,常量值将被内联并包含在使用应用程序中,这样,如果您的库已更新且消耗应用程序不是,那么旧的常量值仍将存在。当然,这应该是在使用静态属性的时候。
如果您没有开发库,那么使用const就可以了。
答案 1 :(得分:1)
因为常量很好......常量,所以值永远不会改变。
属性的首选项是字段和属性的签名是不同的。因此,从字段更改为属性需要重新编译所有调用方。因此,如果您需要在以后添加getter / setter逻辑,那么在第一个实例中创建属性将避免该问题。
因为你有一个永远不会改变的常数,所以没有理由把它作为一个属性来实现。虽然您定义了一个readonly static
,因为这只能在类中进行更改,但在外部,它与常量之间没有区别。
答案 2 :(得分:0)
从代码可读性的角度来看,我发现第二个是改进。不确定编译器是否足够智能以在这种情况下进行优化,但命中率可以忽略不计,我只是考虑可读性。