0

インターフェイスの概念は知っていますが、理解できなかったことが .NET に IComparable、IClonable、IFormattable、IDisposable など、多数の定義済みインターフェイスがあるのはなぜですか? これらのインターフェイスでメソッドのみが宣言されている場合でも、独自のメソッドと perom タスクを定義できます。では、ここでのインターフェースの使用は何ですか?

ここで、この質問をする私の概念は、インターフェイスが関数シグネチャのみを宣言できますが、機能を定義できないということです...では、なぜ事前定義されたインターフェイスですか? インターフェースが定義するメソッドを実装する必要があるという点でも、なぜそれが私たち自身のメソッドではないのでしょうか?

4

1 に答える 1

7

たとえばList<T>Sortメソッドがあります。を呼び出すmyList.Sort()と、リストは自動的にソートされます。しかし、ソート方法を制御したい場合はどうすればよいでしょうか? 最初に行くのは何ですか?何が二番目に行くのですか?sort メソッドを支援し、ソートに使用する何かを提供する必要があります。そこで、別のバージョンの sort の出番です。Sort(IComparer<T>)

何を与えるべきですか?リスト内の 2 つの項目を取り、ソート方法にそれらがどの順序で入るかを伝えることができるもの、つまり次のようなもの

int Compare(T a, T b);

これはまさに で定義されているメソッドです。IComparer<T>

どのクラスでもそのメソッドを完全に記述できますが、問題は C# が厳密に型指定された言語であることです。古いオブジェクトを指定することはできません。Sortそのメソッドが含まれていたとしても、それSortは使い慣れたものでなければなりません。インターフェイスはそのギャップを埋めます。私たちのクラスは を実装できIComparer<T>、それを に渡すことができます。私たちSortは を知っているIComparer<T>のでSort、誰もが満足し、同じページにいます。インターフェイスはSort、着信オブジェクトがCompareそこにあることを認識し、安全に呼び出すことができるように指示します。

于 2012-07-06T02:48:14.627 に答える