私はより良い感覚を得ようとしていますRuby
。したがって、RubyはMixins
ファーストクラスのコンセプトを作ります。でその行為をC#
作成することができます。したがって、どちらの手法も、として広く知られているメカニズムを提供します。Extension Methods
Interfaces
Mixin
特定の例で両方のアプローチを比較するとよいでしょう。
Rubyで列挙可能
コレクションで機能するすべての美しいメソッドを取り上げましょう。Rubyでは、これらは、、all?
およびその他多数です: http: //ruby-doc.org/core-1.9.3/Enumerable.htmlany?
count
ドキュメントから: 列挙可能なミックスインは、いくつかのトラバーサルメソッドと検索メソッド、およびソート機能を備えたコレクションクラスを提供します。クラスは、コレクションの連続するメンバーを生成するメソッドをそれぞれ提供する必要があります。
C#で列挙可能
には、これらのメソッド、、などを提供するという機能C#
があります。LINQ
All
Any
Count
クラスを""にしたい場合は、概念的にルビーのアプローチに非常に近いメソッドも提供するように強制するインターフェースをLINQ enabled
実装する必要があります。IEnumerable<T>
GetEnumerator
したがって、鳥の観点から、あなたのクラスは今、上記のすべての方法を習得しました。それはどのように起こったのですか?
.NET
これらすべてのLINQ
メソッドをインターフェースExtension Methods
上で明確に定義しました。IEnumerable<T>
そして、このインターフェースを実装したので、これらすべてのメソッドを「ミックスイン」します。
両方のアプローチがどれほど違うのだろうか、そしてそれがRuby Mixins
できることがあるのならC#'s
Interface
+Extension Method
戦略はできないのだろうか?Ruby Mixins
まあ、実行時に混合できるという事実のほかに。