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

标签 c# dynamic overloading

我意识到之前有人问过这个问题,但我没有找到关于最佳解决方案的明确协议(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/

相关文章:

c++ - 为自定义类重载 std::find

C# 检查 JSON 响应是否包含 key

c# - WCF 服务返回另一个服务(服务工厂?)

c# - 如何使用 Linq 对每 N 行进行分组

php - jquery pjax 与 php。重新加载时没有内容

c# - 在 C# 中使用 `dynamic` 关键字不编译

javascript - HTML5/JavaScript : Store Dynamic Variable Name and Value in localStorage

c++ - 为什么这两个函数不能重载呢?

c# - 在 C# 中以编程方式生成决策表?

c++ - 为什么我可以用不相交的模板参数选项重载一个函数,而不是一个类?