0

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

我应该这样做:

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

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

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

编辑

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

但是,如果我愿意将公共静态属性设置为硬值,那么这与将其烘焙到程序集中没有功能上的区别。除非我在这里遗漏了其他一些概念,否则在这种情况下我只会使用 const。

感谢您的回答。

4

3 回答 3

3

你应该做

public const int MaxThings = 100;

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

更新->

回应评论.. 如果您正在开发库并导出常量,那么了解常量在 .net 中的使用方式很重要。当针对您的库编译时,常量值将被内联并包含在使用应用程序中,这样如果您的库被更新并且使用应用程序没有,那么旧的常量值仍然存在。当然,这是应该使用静态属性的时候。

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

于 2010-07-28T00:58:56.840 回答
1

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

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

因为你有一个永远不会改变的常数,所以根本没有理由将它作为属性来实现。尽管您定义了 a readonly static,因为它只能在类内部进行更改,但在外部,它与常量没有区别。

于 2010-07-28T02:01:46.853 回答
0

从代码可读性的角度来看,我发现第二个是一个改进。不确定编译器是否足够聪明以在这种情况下进行优化,但命中是如此微不足道,我只会考虑可读性。

于 2010-07-28T00:57:04.847 回答