(Clojure的)多方法和(C#)扩展方法之间的区别?

9 c# clojure

我刚刚观看了Clojure中有关协议的视频,并解释了"多方法"的工作原理.在我看来,它们看起来非常类似于C#中的扩展方法.它们基本上是一回事(除了您不需要在Clojure中创建静态类)或者是否存在根本区别?使用任何一种都有优势或劣势吗?

jas*_*son 9

Clojure中的mutlimethod功能适用于多个调度方案.它有效地启用了运行时多态,其中调用的方法取决于方法的参数类型(传统的单调度多态性取决于接收方法调用的对象的运行时类型).基本上,您可以将单调度多态性视为一种方法M

M(arg1, arg2, arg3, ..., argn)
Run Code Online (Sandbox Code Playgroud)

并且调用的实际方法取决于运行时类型arg1(因此我们重写了通常的语法

arg1.M(arg2, arg3, ..., argn)
Run Code Online (Sandbox Code Playgroud)

如

M(arg1, arg2, arg3, ..., argn)
Run Code Online (Sandbox Code Playgroud)

使类比清楚.在多个分派中,由...调用的方法

M(arg1, arg2, arg3, ..., argn)
Run Code Online (Sandbox Code Playgroud)

依赖于运行时类型的arg1,arg2......,argn以及.

您可以在C#中实现类似的功能dynamic.

坦率地说,它根本与扩展方法无关.

  • 这是写的,但我必须添加一个注释,即clojure中的multimethodes不限于在类型上发送.但是类型用于发送.在clojure中,您可以编写一个依赖于第一个和第二个参数的类型的方法,然后如果第三个参数更大,则调用一个方法或另一个方法.它完全随意.阅读本文以获取更多信息以及Clojure中多方法所具有的更多功能.http://clojure.org/multimethods (3认同)