5

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

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

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

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

就像是:

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

会很好!

但任何类似的事情都非常感谢。

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

4

2 回答 2

7

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

两个想法:

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

    void Serialize<T>(T obj, ...) where T : IVeryQuickSerializable, new()
    
于 2012-06-20T18:52:29.787 回答
0

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

于 2012-06-20T18:54:16.293 回答