前提と状況
C♯のインターフェイスについて質問があります。
僕はインターフェイスとは実装を強制する抽象メソッドの塊で、しかしクラスと違っていくつでも継承可能である故により柔軟に機能の提供を行える……というものだと考えていました。
しかしC♯を学び進めているとこの概念に疑念を抱くことが多くなり、今では全く理解できなくなってしまいました。
よって、以下に挙げるいくつかの疑問の解決をみなさまにご助力いただけないかと思い立ちました。
どうかよろしくお願いいたします。
質問
私にとってのインターフェイスの概念は前項で述べたようなものであります。
しかしIEnumerableをはじめとするコレクションに使わているインターフェイスを見る内に悩むようになりました。
まず、何故ただのインターフェイス、いわば空っぽのメソッドの集まり、設計の下敷きのようなものがLINQなどにおいてコレクションのように扱われているのか分かりません。
また、「IEnumerable〈T〉 変数名」や「IEnumerable〈T〉(返り値の型) TestMethod();」のようにして型のように振る舞っているのも不可解です。
ビジュアルスタジオを起動してソースコードを確認したのですが、そこにはGetEnumeratorという抽象メソッドがポツンとあるだけでした。
検索したのですが、他に特に同名のクラスが見つかるということもありませんでした。
コレクションになったり、かと思えば以前の認識のように使われていたり。
私はインターフェイスが理解できません。
現在Effective C♯という本を勉強しているのですが、インターフェイスが出てくると混乱して全く進みません。
その本ではジェネリッククラスの項目で、IEquatable<T>インターフェイスを継承したクラスに制約すると制約したジェネリッククラス内ではIEquatable<T>の.Equals()メソッドが使えると書いてありました。
これもきっとIEquatable<T>を継承したクラスの中でEqualsメソッドをきちんとオーバーライドしているのでしょうか?
オーバーライドしなければならないという原則すらあやふやに感じています。
このように僕は今ひどく混乱しています。
よろしければご鞭撻のほどお願いいたします。
乱文失礼いたしました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/16 12:36
2020/08/16 13:10
2020/08/16 13:33