是否可以指定我自己的默认对象而不是null?我想在某些对象上定义自己的默认属性。
例如,如果我有一个带有属性bar和baz的对象foo,而不是默认的returing null,我希望它是foo的一个实例,bar设置为“abc”,baz设置为“def” - - 这可能吗?
答案 0 :(得分:5)
您必须使用构造函数来获取该功能。所以,你不能使用默认值。
但是如果你的目标是确保泛型类中传递类型的某种状态,那么可能仍然存在希望。如果要确保传递的类型是可实例化的,请使用通用约束。 new()约束。这确保了T类型的公共参数构造函数。
public class GenericClass<T> where T : new() {
//class definition
private void SomeMethod() {
T myT = new T();
//work with myT
}
}
不幸的是,你不能使用它来获取具有参数的构造函数,只能使用无参数构造函数。
答案 1 :(得分:2)
不,你不能。遗憾。
答案 2 :(得分:2)
你不能使用“默认”,但也许这不是正确的工具。
详细说明,“default”会将所有引用类型初始化为null。
public class foo
{
public string bar = "abc";
}
public class Container<T>
{
T MaybeFoo = default;
}
a = new Container<foo>();
// a.MaybeFoo is null;
换句话说,“默认”不会创建实例。
但是,如果你愿意保证类型T有一个公共构造函数,你也许可以实现你想要的。
public class foo
{
public string bar = "abc";
}
public class Container<T> where T : new()
{
T MaybeFoo = new T();
}
a = new Container<foo>();
Console.WriteLine( ((Foo)a.MaybeFoo).bar ) // prints "abc"