关于c#:强制实现默认构造函数

Force implementation of default constructor

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Interface defining a constructor signature?

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

为了使用序列化,我需要在每堂课。如果编译器能分辨出在层次结构中的某个位置缺少默认构造函数。(在编译时看到问题,而不是在以后的测试中看到问题)

我想要的可能是一些标记或属性,但我什么也找不到。

类似:

1
2
3
4
5
6
[ForceDefaultConstructor]
interface IVeryQuickSerializable
{  
    Serialize();
    Deserialize();
}

太棒了!

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

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


在接口或属性中不能这样做。

两个想法:

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

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


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