Constants类中的静态属性应该实现支持字段吗?

时间:2010-07-28 00:54:26

标签: c# static-variables

我有一个类Constants,其中我存储了许多静态只读变量。

我应该这样做:

private static readonly int _maxThings = 100;
...
public static int MaxThings { get { return _maxThings; } }

这对我来说似乎有点多余。我有什么理由不这样做吗?

public static int MaxThings { get { return 100; } }

修改

好的,所以这是一个问题的大脑放屁。我认为重点是,如果我要在初始化时设置此值,那么使用静态支持字段并公开一个不需要为静态的公共get-only属性是有意义的。

但是,如果我很乐意将公共静态属性设置为硬值,那么它之间没有功能差异,只是将它烘焙到程序集中。除非我在这里缺少一些其他概念,在这种情况下我只使用const。

感谢您的回答。

3 个答案:

答案 0 :(得分:3)

你应该做

public const int MaxThings = 100;

在这种情况下我没有理由看到使用属性。

更新 - >

回应评论..如果你正在开发一个库并导出常量,那么了解常量如何被消耗为int .net是很重要的。针对您的库进行编译时,常量值将被内联并包含在使用应用程序中,这样,如果您的库已更新且消耗应用程序不是,那么旧的常量值仍将存在。当然,这应该是在使用静态属性的时候。

如果您没有开发库,那么使用const就可以了。

答案 1 :(得分:1)

因为常量很好......常量,所以值永远不会改变。

属性的首选项是字段和属性的签名是不同的。因此,从字段更改为属性需要重新编译所有调用方。因此,如果您需要在以后添加getter / setter逻辑,那么在第一个实例中创建属性将避免该问题。

因为你有一个永远不会改变的常数,所以没有理由把它作为一个属性来实现。虽然您定义了一个readonly static,因为这只能在类中进行更改,但在外部,它与常量之间没有区别。

答案 2 :(得分:0)

从代码可读性的角度来看,我发现第二个是改进。不确定编译器是否足够智能以在这种情况下进行优化,但命中率可以忽略不计,我只是考虑可读性。

相关问题