C# 中的非空 class 默认值

Non-null class default in C#

如果我 default(RefType) 我得到 null。如果我 default(ValType) 我得到一个 ValTypedefault-ed 属性。没关系。

但我想要一个具有 val 类型 default 语义的引用类型;特别是对于子类型。这可能吗?

说,我公开了一个接口,IExtension。 有人将其实现为 class as FooExtension 我怎样才能最轻松地获得 FooExtension 的“default”实例作为 "empty" class(同样重要的是,派生自 FooExtension 的类型)而不必更改实施?

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

填充

我猜答案是通过反射迭代属性的效果,但也许有更好的(阅读:更干净的)方法。

我只想使用结构,但是不可继承的约束,再加上我描述的错误类型的语义,让我很警惕(阅读:不)

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

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