如何在C#中覆盖默认值(T)?
可能重复:
如何更改默认(T)在C#中返回的内容
print(default(int) == 0) //true
同样,如果我有自定义对象,其默认值将为null。
print(default(Foo) == null) //true
我可以为default(Foo)
自定义值而不是null吗?
例如,像这样:
public static override Foo default() { return new Foo(); }
这不会编译。 谢谢..
您无法覆盖默认(T)关键字。 对于引用类型,它始终为null,对于值类型,它始终为零。
更多信息
- MSDN – 通用代码中的默认关键字(C#编程指南)
看起来不像。 从文档 :
default
…将为引用类型返回null,为数值类型返回零。 对于结构体,它将返回初始化为struct或null的结构的每个成员,具体取决于它们是值还是引用类型。
坦率地说,这不是一个真正的答案,而是一个简单的提及。 如果Foo
是一个结构,那么你可以有这样的东西:
public struct Foo { public static readonly Foo Default = new Foo("Default text..."); public Foo(string text) { mText = text; mInitialized = true; } public string Text { get { if (mInitialized) { return mText; } return Default.mText; } set { mText = value; } } private string mText; private bool mInitialized; }
[TestClass] public class FooTest { [TestMethod] public void TestDefault() { var o = default(Foo); Assert.AreEqual("Default text...", o.Text); } }