在.Net中为什么String.Empty只读而不是常量?我只是想知道是否有人知道该决定背后的原因是什么.
使用的原因static readonly
是使用const
非托管代码,如Microsoft在共享源公共语言基础结构2.0版本中所示.要查看的文件是sscli20\clr\src\bcl\system\string.cs
.
Empty常量保存空字符串值.我们需要调用String构造函数,以便编译器不会将其标记为文字.
将其标记为文字将意味着它不会显示为我们可以从本机访问的字段.
我从CodeProject上这篇方便的文章中找到了这些信息.
我认为这里存在很多混乱和不良反应.
首先,const
字段是static
成员(不是实例成员).
检查10.4节C#语言规范的常量.
尽管常量被认为是静态成员,但常量声明既不需要也不允许使用静态修饰符.
如果public const
成员是静态的,则不能认为常量将创建新的Object.
鉴于此,以下代码行在创建新Object方面完全相同.
public static readonly string Empty = ""; public const string Empty = "";
以下是Microsoft的一条说明,解释了2之间的区别:
readonly关键字与const关键字不同.const字段只能在字段声明时初始化.可以在声明或构造函数中初始化只读字段.因此,readonly字段可以具有不同的值,具体取决于所使用的构造函数.此外,虽然const字段是编译时常量,但readonly字段可用于运行时常量,...
所以我发现这里唯一合理的答案是杰夫耶茨的.