如果我default(RefType)
,我会null
。如果我default(ValType)
,我会获得ValType
个default
- ed属性。没关系。
但是我想要一个带有val-type default
语义的ref-type;特别是对于亚型。这可能吗?
说,我公开了一个界面,IExtension
。
有人将其实现为FooExtension
类
我怎样才能最轻松地获得" default
" FooExtension
的实例为"空" class(同样重要的是,派生FooExtension
的类型),而不必改变实现?
这对我很重要;我需要创建非null
,"空"派生类型的实例,以便它们可以由动态UI填充。
我猜测答案将通过反射迭代属性的效果,但也许有更好的(阅读:清洁)方式。
我只会使用结构,但是不可继承的约束,与我描述错误的类型的语义配对,让我警惕(读:nope)
tl; dr:我如何获得默认类,如默认结构,隐式支持继承。
答案 0 :(得分:2)
一个选项是FormatterServices.GetUninitializedObject
,它在不调用任何构造函数的情况下分配实例。通常,除非您最终调用其中一个类型构造函数或完全初始化对象,否则这会让您感到非常困惑。顾名思义,它用于从序列化数据创建对象,但可能没有0-arity构造函数。