Dav*_*und 62
要与其余部分一起使用,它将是null,但我还应该补充一点,你可以使用获得任何类型的默认值default
default(MyClass) // null
default(int) // 0
Run Code Online (Sandbox Code Playgroud)
在使用泛型时,它尤其有用; 你可能想要返回default(T),如果你的返回类型是T,你不想假设它可以为空.
Pet*_*ter 11
注意:DefaultValueAttribute不会导致使用属性的值自动初始化成员.您必须在代码中设置初始值.
您可以使用DefaultValueAttribute修饰属性.
private bool myVal=false;
[DefaultValue(false)]
public bool MyProperty {
get {
return myVal;
}
set {
myVal=value;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这不能回答你的问题,只是想把它作为相关信息添加.
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx
如果您想知道为什么没有一种语言功能允许您以某种方式为类定义非空默认值,请记住类是“引用类型”。引用类型是对已分配内存的引用,或者换句话说,除 null 之外的任何内容都是需要分配内存的该对象的构造实例。因此,现在考虑如何将“default”关键字集成到 .NET 中,以便它适用于类,想象一下可以考虑的两种实现:
您可以定义标记为默认的静态实例。也许“默认”变得像访问修饰符(例如公共默认只读等)。也许这可行。但这真的是一个有价值的语言功能吗?至少这样每个“默认”都会指向相同的静态内存实例。
如果每次在类上使用 default 关键字时都会调用默认构造函数会怎样?这将很糟糕,因为如果您不重写 Equals 来不比较引用,两个默认值可能彼此不相等,而且由于内存管理和内存分配性能下降以及构造函数的副作用,这也很糟糕。
总而言之,我认为这是我们真正不想要的语言功能。并且 default(MyClass) 将始终 == null。
我会让这个“默认”类实例成为一个字段而不是属性,就像System.String.Empty看起来一样:
public class Person
{
public string Name { get; set; }
public string Address { get; set; }
public static readonly Person Default = new Person()
{
Name = "Some Name",
Address = "Some Address"
};
}
...
public static void Main(string[] args)
{
string address = String.Empty;
Person person = Person.Default;
//the rest of your code
}
Run Code Online (Sandbox Code Playgroud)