可能重复:
为什么String.Empty不是常量?
我想string.Empty在我的一些属性的属性中使用,但后来看到它实际上不是Const而是静态成员.
微软有没有理由这样做?
我会说const在引用的程序集中使用它总是一个非常糟糕的主意.
原因是C#编译器将常量视为值而不是引用,正如我在这个答案中所说的那样.
有了这个,我的意思是C#编译器将替换代码中的常量的所有实例,并用值替换"变量".
这意味着即使您更新程序集GlobalConstants.dll并将其复制到您拥有的某个应用程序,您也需要重新编译该应用程序.不这样做,将导致应用程序使用旧的常量值.
为了克服这个问题,你可以简单地使用public static readonly而不是public const,因为readonly修饰符与const的不同之处在于它被C#编译器视为代码而不是值的引用.