有没有办法强制(子)类在C#或Java中使用具有特定签名或特定静态方法的构造函数?
你不能明显地使用接口,我知道它的用途有限.我发现它有用的一个实例是当你想强制执行一些设计指南时,例如:
例外
他们应该都有四个规范构造函数,但没有办法强制执行它.你必须依靠像FxCop(C#case)之类的工具来捕获它们.
运算符
没有合约指定可以求和两个类(在C#中使用operator +)
是否有任何设计模式可以解决这个限制?在未来版本的C#或Java中,可以在语言中添加哪些构造来克服此限制?
使用泛型,您可以强制类型参数具有无参数构造函数 - 但这是关于它的限制.
除了泛型之外,实际使用这些限制即使它们存在也很棘手,但它有时对类型参数/参数有用.允许接口(或可能是静态接口)中的静态成员同样可以帮助解决"通用数字运算符"问题.
我写了一篇关于这个面临着类似的问题,当一小会儿前.
在编译时没有强制执行,但我花了很多时间研究类似的问题; 一个支持泛型的数学库,以及一个有效的(非默认的)ctor API都可以在MiscUtil中使用.但是,这些仅在运行时首次使用时进行检查.实际上这不是一个大问题 - 您的单元测试应该很快找到任何缺少的操作符/ ctor.但它很有效,但很快......
您可以使用Factory模式.
interface Fruit{} interface FruitFactory{ F newFruit(String color,double weight); Cocktail mixFruits(F f1,F f2); }
然后,您可以为任何类型的Fruit创建类
class Apple implements Fruit{} class AppleFactory implements FruitFactory{ public Apple newFruit(String color, double weight){ // create an instance } public Cocktail mixFruits(Apple f1,Apple f2){ // implementation } }
这并不强制您不能以使用Factory的方式创建实例,但至少可以指定要从Factory请求的方法.