C#

时间:2017-06-25 23:30:59

标签: c# class struct default-value

如果我default(RefType),我会null。如果我default(ValType),我会获得ValTypedefault - ed属性。没关系。

但是我想要一个带有val-type default语义的ref-type;特别是对于亚型。这可能吗?

说,我公开了一个界面,IExtension。 有人将其实现为FooExtension类 我怎样才能最轻松地获得" default" FooExtension的实例为"空" class(同样重要的是,派生FooExtension的类型),而不必改变实现?

这对我很重要;我需要创建非null,"空"派生类型的实例,以便它们可以由动态UI填充。

我猜测答案将通过反射迭代属性的效果,但也许有更好的(阅读:清洁)方式。

我只会使用结构,但是不可继承的约束,与我描述错误的类型的语义配对,让我警惕(读:nope)

tl; dr:我如何获得默认类,如默认结构,隐式支持继承。

1 个答案:

答案 0 :(得分:2)

一个选项是FormatterServices.GetUninitializedObject,它在不调用任何构造函数的情况下分配实例。通常,除非您最终调用其中一个类型构造函数或完全初始化对象,否则这会让您感到非常困惑。顾名思义,它用于从序列化数据创建对象,但可能没有0-arity构造函数。