c#の継承とインターフェース,メソッドの共有

C#の場合

インターフェース:多重継承が可能、publicに固定

抽象クラス:多重継承が不可能、アクセス修飾子は選択

どちらも継承先での実装がないとエラーが起きる

とのこと。

arumogina-tech.hatenadiary.jp

の経験からして、

どちらも依存性の注入に使用され

抽象クラスは同一カテゴリに属する複数の具象クラスをまとめて抽象化、

インターフェースは抽象化出来ない複数の異なるカテゴリのクラスで共通の名前をもつメソッドをもたせるときに使用するもの、

と解釈した。

 

C#の動的型付けdynamicは動的型付け言語などと連携するためのもの、という説明があったが、InterfaceだとInteface名に変更が合った場合に引数の受け取り箇所の変更が必要になるので、このようなところではdynamicを使っていきたい。

C#の主要インターフェース解説:インターフェースとは - がりらぼ

 

依存性の注入時にInterfaceを使えば

・Interfaceに実装されたメソッドのみの使用に限定できるので不用意にメソッドを使用することによる密結合になることを防ぎやすくする。

という利点はあるか。

 

 Interfaceそのものは使用するが、依存性の注入時にはdynamicを使う方針でいく。テンプレートメソッドパターンを使わずとも実装を忘れていたとき自動的にエラーを出してくれるのは便利

 

++関連の低いクラス間でメソッドを共有するにはそれらのメソッドをstaticなクラスに定義しておき、そのクラスをメソッドを使用するクラスのインスタンス変数に入れておくのがよさそう。インスタンス変数に入れておくのはstaticなクラスのクラス名の変更に対応しやすくするため。