在 C# 中尝试动态绑定时无法从 'typeA' 转换为 'typeB'



我正在尝试设计一个应该为我需要支持的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);

最新更新