强制执行默认构造函数

时间:2012-06-20 18:49:45

标签: c# constructor constraints

  

可能重复:
  Interface defining a constructor signature?

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

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

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

类似的东西:

[ForceDefaultConstructor]
interface IVeryQuickSerializable
{   
    Serialize();
    Deserialize();
}

会很棒!

但是非常感谢。

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

2 个答案:

答案 0 :(得分:6)

您无法在界面或属性中执行此操作。

两个想法:

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

    void Serialize<T>(T obj, ...) where T : IVeryQuickSerializable, new()
    

答案 1 :(得分:0)

最有可能是更好的解决方案,但您可以编写一个应用程序,它使用反射来检查构建后事件期间的程序集。