我试图更好地了解Ruby. 所以 Ruby 提出Mixins了一个一流的概念。在C#一个可以创建Extension Methods的行为上Interfaces。因此,这两种技术都提供了一种广为人知的机制Mixin。
在特定示例上比较这两种方法可能会很好。
Ruby 中的可枚举
让我们采用所有那些适用于集合的漂亮方法。在 Ruby 中,这些是,all?等等:http ://ruby-doc.org/core-1.9.3/Enumerable.htmlany?count
来自文档: Enumerable mixin 为集合类提供了几种遍历和搜索方法,并具有排序功能。每个类必须提供一个方法,该方法产生集合的连续成员。
C#中的可枚举
里面有C#一个叫做的特性LINQ,它也提供了这些方法All,Any等等Count。
如果你想让你的类“ LINQ enabled”,你需要实现IEnumerable<T>接口,这迫使你还提供一个GetEnumerator在概念上非常接近 ruby 方法的方法。
因此,从鸟的角度来看,您的班级现在获得了上述所有方法。它是怎么发生的?
.NET将所有这些方法定义为接口上的所有LINQ方法。并且由于您实现了这个接口,您现在“混合”了所有这些方法。Extension MethodsIEnumerable<T>
我想知道这两种方法有多大不同,如果有什么事情Ruby Mixins可以做到C#'s Interface+Extension Method战略不能做?Ruby Mixins好吧,除了可以在运行时混合的事实。