(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认同)