我有一个基础的抽象类,有几个类继承并重写它,但它们都有相同的构造函数。目前,我通过switch语句调用每个构造函数:
case 1: return new A(arg1); // arg is int
等等,大约涉及10个类。有没有一种使用泛型或委托的方法,可以传入一个类名并使用参数实例化该类型?
这会有所帮助,因为如果我更改构造函数,我还必须更改每个实例。
委托是最直接的方法,但研究表明将构造函数分配给委托是不行的。
增加: 我现在使用的是笔记本电脑的wifi而不仅仅是手机,所以接下来是一些代码示例。
这是目前发生的情况的示例:
switch (new Random().Next(4))
{
case 3:
// classA : baseClass, args{int, bool, otherClass}
return new classA(arg1, arg2, arg3);
case 2:
// classB : baseClass, args{int, bool, otherClass}
return new classB(arg1, arg2, arg3);
case 1:
// classC : baseClass, args{int, bool, otherClass}
return new classC(arg1, arg2, arg3);
case 0:
// classD : baseClass, args{int, bool, otherClass}
return new classD(arg1, arg2, arg3);
default:
continue;
}
我希望在块的结尾处使用一个参数实例化器,并传入三个参数。
我想到的解决方案是创建一个类似于以下工作方式的实例化器类:
ClassInstantiator inst = new ClassInstantiator(arg1, arg2, arg3);
switch(new Random().Next(4))
{
case 4:
return inst.instantiate<classA>();
...
}
这是否已经内置于语言中?或者有没有更加优美的解决方案?