【发布时间】:2012-03-22 18:04:06
【问题描述】:
我知道以前有人问过这个问题,但我没有就最佳解决方案达成明确的一致意见。
使用动态(如下所示)是最好的方法吗? 我想最好尽可能避免动态,以帮助在编译时发现问题。
(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
【问题讨论】:
-
您可以通过在其中一个类上使用标准动态调度来删除
(dynamic)强制转换之一(即调用为a.Foo(Interface B))。之后,您可以使用dynamic(在这里可以使用)或实现访问者模式。 -
你想用这个模式做什么?我认为有更好的模式可以解决你的问题然后使用动态。您是否测试过代码是否以这种方式工作?
标签: c# dynamic overloading