c#多个派遣选项?

Roy*_*mir 6 c# dynamic multiple-dispatch .net-4.0

我有这些课程:

class Asset
{    }

class House:Asset
{    }
Run Code Online (Sandbox Code Playgroud)

考虑这些局外人的静态功能:

static void Foo (Asset a) { }
static void Foo (House h) { }
Run Code Online (Sandbox Code Playgroud)

如果我写:

House h = new House (...); 
Foo(h);
Run Code Online (Sandbox Code Playgroud)

它会调用Foo(House)(编译时绑定)

如果我写:

Asset a = new House (...);
Foo(a); 
Run Code Online (Sandbox Code Playgroud)

它会调用Foo(Asset) (编译时绑定)

目标:访问运行时类型方法:

我有2个选择:

1)使用动态如下:

 Asset a = new House (...);
 Foo ((dynamic)a); // NOW it will call  Foo(House)
Run Code Online (Sandbox Code Playgroud)

2)将功能从使用移动staticoverride使用polymorphism mechanism.

问题:

有没有其他方法(没有将功能移动到polymorphism mechanism|| dynamic)?

jbt*_*ule 9

目标:访问运行时类型方法

这就是dynamic关键字的用途.它实际上是一种非常干净,快速的多重发送方式.

您的多重调度的最终选择是

  1. dynamic
  2. Double Dispatch虚拟方法
  3. 一些散列匿名函数规则集合
  4. if (x is House) ... else if(x is Asset)...
  5. 反思 - 真的很慢,也很难看

问题:有没有其他方法可以做到这一点(没有将函数移动到多态机制||动态)?

所以,是的,当你可以使用dynamic哪种方法快速,不易出错,并且语法真正干净时,有很多方法需要你做很多工作.