Как переопределить default (T) в C#? [дубликат]

Возможные Дубликаты:
как изменить, что по умолчанию(T) возвращает в C#

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

аналогично, если у меня есть пользовательский объект, его значение по умолчанию будет null.

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

могу ли я иметь пользовательское значение для default(Foo) и не null?

например, что-то вроде этого:

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

это не будет компилироваться. Спасибо..

3 ответов


вы не можете переопределить ключевое слово по умолчанию(T). Он всегда равен нулю для ссылочных типов и нулю для типов значений.

Дополнительная Информация


не похоже. От документация:

default ... возвращает 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);
    }

}