你可以创建自己的默认T,其中T是你自己的类

时间:2009-06-18 17:41:16

标签: .net default keyword

让我说我有以下

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

这更多是为了我自己的理论满足而不是实际应用。只是想知道。

6 个答案:

答案 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.