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であり、値型の場合は0です。

詳しくは

于 2012-10-09T05:39:33.920 に答える
13

それのようには見えません。ドキュメントから:

default...参照型の場合はnullを返し、数値型の場合は0を返します。構造体の場合、値型か参照型かに応じて、ゼロまたはnullに初期化された構造体の各メンバーを返します。

于 2012-10-09T05:38:55.630 に答える
7

率直に言って、それは本当の答えではなく、簡単な言及です。構造体だった場合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);
    }

}
于 2012-10-09T06:03:23.167 に答える