今天,我创建在构造函数中默认的参数值。
public SomeClass (String something = String.Empty)
{
// ...
}
编译器抱怨。
对于“东西”默认参数值必须是一个编译时间常数。
我的印象是,空String类是一个编译时间常数的情况下。
.field public static initonly string Empty
我是不是missunderstanding编译时的含义不变,或只是更wackyness,我需要接受?
接受的答案, 这个 SO问题为什么没有的String.Empty恒定的? 是:
静态只读代替常量的原因是由于与非托管代码中使用,如微软共享源代码公共语言基础2.0版本在这里显示。 该文件看,就是sscli20 \ CLR \ SRC \ BCL \ SYSTEM \ string.cs。
空不变持有空字符串值。 我们需要调用String构造,这样编译器并不标志着这是一个文字。
标记此为文字将意味着它不会显示为,我们可以从本地访问的字段。
我发现从这个方便的信息文章在CodeProject。
一个static readonly
域是不是编译时间常数。 这只是一个静态字段,它不应该在它完成初始化类后更改。
在当前的.NET实现你甚至可以与反思,从而导致真正怪异的行为改变。
您可以使用""
来代替,这是一个字符串文字是一个编译时间常数。
一个readonly
字段是一个运行时间不变。 它不会被绑定到一个值,直到对象(或类,如果字段是static
)被初始化。
编译时间常数文字(如""
-这基本上是同样的事情String.Empty
,反正)和任何标记const
。