如何在C#中覆盖默认值(T)?

时间:2012-10-09 05:35:44

标签: c# .net override default

  

可能重复:
  Howto change what Default(T) returns in C#

print(default(int) == 0) //true

同样,如果我有自定义对象,则其默认值为null。

print(default(Foo) == null) //true

我可以为default(Foo)设置自定义值而不是null吗?

例如,像这样:

public static override Foo default()
{
    return new Foo();
}

这不会编译。感谢..

3 个答案:

答案 0 :(得分:19)

您无法覆盖默认(T)关键字。对于引用类型,它始终为null,对于值类型,它始终为零。

更多信息

答案 1 :(得分:11)

看起来不像。来自the documentation

  

default ...将为引用类型返回null,为数值类型返回零。对于结构体,它将返回初始化为struct或null的结构的每个成员,具体取决于它们是值还是引用类型。

答案 2 :(得分:5)

坦率地说,这不是一个真正的答案,而是一个简单的提及。如果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);
    }

}