2

可以说我有以下

public class A 
{
   private string _someField;
   public string SomeField { get { return _someField; } }
}

出于某种原因,我正在检查这个类的默认值,我想为一个类设置默认值,就像 int 类型的默认值是 0,我希望在上面的类中,我的 Somefield 的默认值是“hello” ;

int i = default(int); // i is 0
A myClass = default(A);
string s = myClass.SomeField; // s is hello

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

4

6 回答 6

5

不。类(引用类型)的默认值是null并且不能重载。

于 2009-06-18T17:43:07.753 回答
5

您无法更改 T 的 default(T) 值。对于引用类型,它始终为 null,而对于值类型,它始终为空值(即,对于结构,所有成员都是默认的未初始化值)。

于 2009-06-18T17:44:26.877 回答
3

没有办法重载 default(T)。

对我来说,听起来您确实在要求 .NET 中尚不存在的不可为空的引用类型。看看这里的实现: http: //msmvps.com/blogs/jon_skeet/archive/2008/10/06/non-nullable-reference-types.aspx

于 2009-06-18T17:49:12.640 回答
0

在类(引用类型)的情况下,默认关键字对类的成员没有任何作用,它只是将整个引用设置为 null

于 2009-06-18T17:46:31.867 回答
0

虽然 default() 将始终返回 null,但您可以使用 where 指定该类必须包含无参数构造函数,因此您可以对其调用 new。

void SomeMethod<T>(T something) where T : new()
    {
        T newObject = new T();
    }
于 2009-06-18T19:39:16.693 回答
-1

这应该做的工作:

public class A 
{
   private string _someField = "hello";
   public string SomeField { get { return _someField; } }
}

现在,当您创建该类的实例时, someField 的初始值将是 hello。

[编辑:这并不完全符合您的要求。就像其他人在评论中指出的那样, default(T) 其中 T 是一个类将始终导致 null 。

相反,您将正常创建类,而不是使用“默认”关键字。

A myClass = new A();
string defaultValue = myClass.SomeField // This will be set to "hello" by default.

]

于 2009-06-18T17:43:29.483 回答