Как переопределить 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);
    }
}
