我意识到之前有人问过这个问题,但我没有找到关于最佳解决方案的明确协议(protocol)。
使用动态(如下所示)是执行此操作的最佳方法吗? 我想最好尽可能避免动态,以帮助在编译时发现问题。
(classA1 和 classA2 实现接口(interface) 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?
好吧,这是一种的方式 - 只要执行时类型总是以重载解析会满意的方式结束。
你可能想要放置一个 backstop 方法
static void Foo(object x, object y)
如果所有方法都不适用(例如 a
是非 ClassA1/ClassA2 实现)。请注意,如果两个值都为空,它不会帮助您......
我通常会尝试重新设计,这样这不是必需的,但如果没有更多上下文,很难知道最佳解决方案。
关于c# - C# 4.0 中的双重调度 - 动态关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9827971/