我正在尝试设计一个应该为我需要支持的20 混凝土类中的每一个都具有某种方法的API(我无法更改这些规格(。
我的第一个想法是使用过载以具有不同参数的相同方法,并且能够根据具体类自动调用正确的参数,但是我在标题中遇到了错误,我想知道是否有更好的方法来执行此操作(无需使用/switch On On opoct类型(。
这是一个快速伪代码示例:
class BaseClass {}
class ChildClassA : BaseClass {}
class ChildClassB : BaseClass {}
class Factory {
public static void Build(ChildClassA obj){}
public static void Build(ChildClassB obj){}
}
class Main {
public static void Main(string[] args){
BaseClass obj = getFromSomewhereRemote();
Factory.Build(obj); // This is the line where I get the error
}
}
我知道我可以构建这样一种方法:
void Build(BaseClass obj){
switch (obj){
case BaseClassA objA:
Build(objA);
break;
....
}
}
,但我想知道我是否可以在不打开类型的情况下获得相同的结果。
尽管不建议使用,但是您可以使用dynamic
关键字进行类似的操作。动态使用引擎盖下的反射,因此存在性能问题。这将避免大量if语句。运行时将决定将采用哪种方法。
void Build(ChildClassA obj)
{
obj.MethodA();
}
void Build(ChildClassB obj)
{
obj.MethodB();
}
并致电:
Build((dynamic) baseClassObj);