- 締切済み
C#のインターフェースを使うとき
C#で「この場合は絶対インターフェースしかない!」 という場面とはどのような場面でしょうか? ポリモーフィズムとカプセル化については分かったのですが、 どうも「これ場合はインターフェースだ!」という例が知りたいと思い 質問させていただきました。 皆様はどのような場面で使用していますか? また、インターフェースを実装するとき全然違う処理を実装してしまった時等はありますでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
Framework Design Guidelines という書籍(洋書)では、.NET Framework の設計や開発に携わったような人たちが .NET 開発者向けにソフトウェア設計のガイドラインをいろいろと紹介しています。 そこで書かれているガイドラインを要約すると、インターフェースを使うケースとしては ・値型に継承される必要がある型(IComparable 等) ・多重継承的な継承のされ方をする可能性がある型 だけで、それ以外は通常のクラス(もちろん抽象クラスも含めての話ですが)にするべきである、とあります。 .NET Framework では各所でインターフェースが使われていますが、.NET Framework の開発者たち自身も不必要にインターフェースを使ってしまった箇所については正直いって後悔しているようです。 例外的に AppDomain をまたぐことがあるオブジェクトの型は、MarshalByRef などを継承する必要があるため、基底となるインターフェースを用意する方がいいのですが、とりあえずは気にしなくて良いでしょう。
- galma_zabi
- ベストアンサー率33% (41/124)
> C#で「この場合は絶対インターフェースしかない!」 > という場面とはどのような場面でしょうか? ○複数のクラスに同じ機能を持たせたいが、継承では実現できない場合 (継承する際には、スーパークラスとなれるクラスは1個に限られますよね) ○複数の機能をクラスに持たせたい場合 (多重継承はできませんので) また、インターフェースを見ればそのクラスで何ができるのかが分かりやすいというのもあります。 System.ICloneableインターフェースがついていれば、そのクラスで何が行われているのか分からなくても、 クローンの処理は保証してくれているのがわかります。 > また、インターフェースを実装するとき全然違う処理を実装してしまった時等はありますでしょうか? 0slowlykick0さんが何を連想されているのかが分かりませんが、 インターフェースの定義と実装がまったく異なってしまうことありません。 そういうことが起こるとしたら、設計がまずいか、インターフェースの中身を理解していないということでしょう。