尝试在C#中进行动态绑定时无法从“ typeA”转换为“ typeB”

时间:2019-05-06 10:41:13

标签: c# overloading dynamic-binding

我正在尝试设计一个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;
        ....
    }

}

但是我想知道如果不打开类型就可以得到相同的结果。

1 个答案:

答案 0 :(得分:2)

尽管不建议这样做,但是您可以使用dynamic关键字执行类似的操作。 Dynamic在后台使用反射,因此存在性能问题。这样可以避免很多if语句。运行时将决定采用哪种方法。

 void Build(ChildClassA obj)
 {
     obj.MethodA();
 }

 void Build(ChildClassB obj)
 {
     obj.MethodB();
 }

然后致电:

Build((dynamic) baseClassObj);
相关问题