16

可能重复:
如何更改 C# 中的 Default(T) 返回的内容

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

同样,如果我有一个自定义对象,它的默认值为 null。

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

我可以有一个自定义值default(Foo)而不是 null 吗?

例如,像这样:

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

这不会编译。谢谢..

4

3 回答 3

29

您不能覆盖 default(T) 关键字。对于引用类型,它始终为 null,对于值类型,它始终为零。

更多信息

于 2012-10-09T05:39:33.920 回答
13

看起来不像。从文档中

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

于 2012-10-09T05:38:55.630 回答
7

坦率地说,这不是一个真正的答案,而是一个简单的提及。IfFoo是一个结构,所以你可以有这样的东西:

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);
    }

}
于 2012-10-09T06:03:23.167 回答