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