我发现我的设计是错误的,并问你如何解决我的问题。工厂方法构造函数的类型约束
所以我的情况:
我写的工厂方法,上课,巫婆从我的特殊基类派生。所以我写了
public T MyFactory<T>() where T:MyBaseClass
但我的工厂方法的主要工作是获取一些特殊的参数并将其传递给新对象的构造函数。 MyBaseClass
有这样的构造:
public MyBaseClass(MySpecParam param){...}
但不保证该类型T
,从MyBaseClass
衍生,有这样一个构造函数。
我看到的唯一的解决办法,是new()
约束和虚拟Init
方法添加到MyBaseClass
,使工厂可以安全地创建T
类型的新的对象,然后用MySpecParam
对象初始化它。
但是,MyBaseClass
有这样的设计,所以它是完全无法使用,如果它不是MySpecParam
。用户可以使用无参数构造函数创建MyBaseClass
,并获得完全无效的,未初始化的对象。我认为这不好。
没有办法添加new(MySpecParam)
约束。
我该如何设计我的对象,构造函数和工厂方法?
接口不能containts构造 – Yavanosta 2012-02-21 20:07:38