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