我正在阅读Bill Wagner撰写的Effective C#。在第14项-最小化重复初始化逻辑中,他显示了以下在构造函数中使用新的可选参数功能的示例:
public MyClass(int initialCount = 0, string name = "")
请注意,他使用""
代替string.Empty
。
他评论:
您会注意到[在上面的示例中]第二个构造函数在name参数上为默认值指定了“” ,而不是更习惯的
string.Empty
。那是因为string.Empty
不是编译时常量。它是在字符串类中定义的静态属性。因为它不是编译常量,所以不能将其用作参数的默认值。
如果我们不能string.Empty
在所有情况下都使用静态,那这是否会破坏其目的?我认为我们将使用它来确保我们有一种独立于系统的方式来引用空字符串。我的理解错了吗?谢谢。
更新
只是后续评论。根据MSDN:
每个可选参数都有一个默认值作为其定义的一部分。如果没有为该参数发送参数,则使用默认值。默认值必须是常量。
这样一来,我们将无法使用System.Environment.NewLine
或使用新实例化的对象作为默认值。我还没有使用过VS2010,这真令人失望!