让我说我有以下
public class A
{
private string _someField;
public string SomeField { get { return _someField; } }
}
由于某种原因,我正在检查这个类的默认值,我想设置一个类的默认值,就像int类型的默认值是0,我想在上面的类中默认的Somefield是“你好”;
int i = default(int); // i is 0
A myClass = default(A);
string s = myClass.SomeField; // s is hello
这更多是为了我自己的理论满足而不是实际应用。只是想知道。
答案 0 :(得分:5)
没有。类(引用类型)的默认值为null
,不能重载。
答案 1 :(得分:5)
您无法更改T的默认值(T)。对于引用类型,它始终为null;对于结构类型,则为“空”值(即,对于结构,所有成员都处于默认值,未初始化的值)
答案 2 :(得分:3)
无法超载默认值(T)。
对我来说,这听起来好像是在要求.NET中尚不存在的非可空引用类型。请查看此处的实施:http://msmvps.com/blogs/jon_skeet/archive/2008/10/06/non-nullable-reference-types.aspx
答案 3 :(得分:0)
对于类(引用类型),default关键字对类的成员没有任何作用,它只是将整个引用设置为null
答案 4 :(得分:0)
虽然default()将始终返回null,但您可以使用where指定该类必须包含无参数构造函数,因此您可以在其上调用new。
void SomeMethod<T>(T something) where T : new()
{
T newObject = new T();
}
答案 5 :(得分:-1)
这应该做的工作:
public class A
{
private string _someField = "hello";
public string SomeField { get { return _someField; } }
}
现在,当您创建该类的实例时,someField的初始值将为hello。
[编辑: 这并不是你想要的。像其他人在评论中注意到的那样,默认(T),其中T是一个类,总是会导致null。
相反,您应该正常创建该类,而不是使用“default”关键字。
A myClass = new A();
string defaultValue = myClass.SomeField // This will be set to "hello" by default.