C#にRubyにおけるmoduleに相当する機能はありますか?
C#にRubyにおけるmoduleに相当する機能はありますか?
共通の処理をもたせるにはクラスの継承を利用するか、依存性の注入をするかのどちらかしかないでしょうか?
++追記
C#を昨日勉強し始めたばかりで、基本機能を把握する過程で疑問に思っただけで、特に具体的な問題に直面しているわけではありません。
Rubyのmoduleに相当する機能に期待することは、「関連の低いクラス間でメソッドの共有”のみ”を行うこと」です。
継承は基本的に関連するクラスで行うものですし、他の方法ですとわざわざインスタンス化する必要があったりするので
moduleがあればシンプルでいいな、と思った次第です。
今の所,クラスのインスタンス変数に共有するメソッドをまとめたstaticなクラスのクラスインスタンス?を入れておくのが、思いついてる中で一番目的に適った方法です。
=>
Rubyの感覚で変数にクラスオブジェクトを代入出来ると思ってましたが、c#では出来ないようですね。thisをstaticメソッド内で使用することも出来ず、returnしたりすることも出来ませんし。
++回答から
c#8.0でデフォルトインターフェースメソッドが実装されるのが一番ですが、現状では拡張メソッドを使った方法が一番目的に即してるようですね。staticメソッドとしての制約は受けますが、拡張メソッドの引数の型にインターフェースを指定すれば、特定のインターフェースを継承したクラスのみにメソッドの使用を許可出来るので、不用意な使用の回避も出来ますし。