强制执行默认构造函数

Mar*_*tus 5 c# constructor constraints

可能重复:
定义构造函数签名的接口?

我有类和接口的混合层次结构.

为了使用序列化,我需要在每个类中存在一个默认构造函数.如果编译器可以告诉我在层次结构中某处缺少默认构造函数,我真的很感激.(在编译时看到问题,而不是在后面的测试中)

我想要的可能是一些标记或属性,但我找不到任何东西.

就像是:

[ForceDefaultConstructor]
interface IVeryQuickSerializable
{   
    Serialize();
    Deserialize();
}
Run Code Online (Sandbox Code Playgroud)

会很好!

但是非常感谢.

有一个限制:我无法更改序列化.使它成为通用可以解决问题,但我没有源.编写包装器可能会完成这项工作,但是它会为从顶层序列化接口派生的对象(可能不会更改)带来漏洞.

Mar*_*ell 6

您不能在界面或属性中执行此操作.

两个想法:

  • 集成测试:使用反射查找所有相关类,并在测试中检查它们
  • 在使用该T : new()子句的通用API中公开您的序列化代码,即

    void Serialize<T>(T obj, ...) where T : IVeryQuickSerializable, new()
    
    Run Code Online (Sandbox Code Playgroud)