如何强制构造函数签名和静态方法?

有没有办法强制(子)类在C#或Java中具有具有特定签名或特定静态方法的构造函数?

您显然不能为此使用接口,我知道它的用途有限。我发现它有用的一个例子是当你想要强制执行一些设计指南时,例如:

例外
它们都应该有四个规范构造函数,但没有办法强制执行它。您必须依靠像FxCop(C#大小写)这样的工具来捕获这些。

运算符
没有约定指定可以对两个类求和(在 C# 中使用 operator+)

是否有任何设计模式可以解决此限制?可以在语言中添加什么结构来克服未来版本的C#或Java中的这种限制?


答案 1

使用泛型,您可以强制类型参数具有无参数构造函数 - 但这是关于它的限制。

除了在泛型中之外,即使这些限制存在,实际使用这些限制也会很棘手,但它有时可能对类型参数/参数有用。允许在接口(或可能的静态接口)中使用静态成员同样有助于解决“通用数字运算符”问题。

不久前,当我遇到类似的问题时,我写了关于这个问题的文章


答案 2

在编译时没有强制执行,但我花了很多时间研究类似的问题;支持通用的数学库和高效(非默认)ctor API都可以在MiscUtil中使用。但是,这些仅在运行时首次使用时进行检查。实际上,这不是一个大问题 - 你的单元测试应该很快找到任何缺少的运算符/ ctor。但它有效,而且非常快...