编程语言
首页 > 编程语言> > C#4.0中的双调度-动态关键字?

C#4.0中的双调度-动态关键字?

作者:互联网

我知道以前曾有人问过这个问题,但是我没有找到关于最佳解决方案的明确协议.

使用动态(如下所示)是最好的方法吗?
我认为最好避免动态变化,以帮助在编译时发现问题.

(classA1和classA2实现接口A,B同样实现)

 public static void Foo(InterfaceA a, InterfaceB b) 
 { 
    Foo((dynamic)a, (dynamic)b); 
 }

static void Foo(classA1 a, classB1 b) {  //some code }
static void Foo(classA2 a, classB2 b) {  //some code }
static void Foo(classA1 a, classB2 b) {  //some code }
static void Foo(classA2 a, classB1 b) {  //some code }

或者类似的…

public static void Foo(InterfaceA a, InterfaceB b) 
 { 
    ((dynamic) a).Foo(b); 
 }

public classA1
{
     void Foo(classB1 b) {  //some code }
}
//repeated for other cases    

解决方法:

Is using dynamic (like below) the best way to do this?

嗯,这是一种实现方法-只要执行时类型始终以某种使过载解析满意的方式结束即可.

您可能想提出一种支持的方法

static void Foo(object x, object y)

如果这些方法都不适用(例如a是非ClassA1 / ClassA2实现).如果两个值都为null,这对您没有帮助,请注意…

我通常会尝试重新设计,以便不需要这样做,但是如果没有更多上下文,很难知道最好的解决方案.

标签:overloading,dynamic,c
来源: https://codeday.me/bug/20191201/2081814.html