我正在尝试设计一个API,该API应该针对我需要支持的20多个具体类中的每一个都具有某种方法(我无法更改那些规范)。
我的第一个想法是使用重载来使用具有不同参数的相同方法,并能够根据具体类自动调用正确的方法,但是我遇到了标题错误,并且我想知道是否存在更好的方法(不必使用if / switch的对象类型)。
这是一个快速的伪代码示例:
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;
....
}
}
但是我想知道如果不打开类型就可以得到相同的结果。
答案 0 :(得分:2)
尽管不建议这样做,但是您可以使用dynamic
关键字执行类似的操作。 Dynamic在后台使用反射,因此存在性能问题。这样可以避免很多if语句。运行时将决定采用哪种方法。
void Build(ChildClassA obj)
{
obj.MethodA();
}
void Build(ChildClassB obj)
{
obj.MethodB();
}
然后致电:
Build((dynamic) baseClassObj);