パブリック API で何かを直接形式で公開したくない場合があります。うまくいかないかもしれません。パブリック API は、同じ機能のより適切な署名を公開できる可能性があります。例えば:
public int Add(Foo foo) {...} // takes a known type and returns the new index
void ICollection.Add(object obj) {...} // takes object and returns void
より一般的な例は、たとえば、それぞれがメソッドを持ち、同じ入力ではなく、異なる戻り値を返すことが不可能な場合です。C# では戻り値によるオーバーロードが許可されていないため、少なくとも 2 つのメソッドが必要です。IEnumerable
IEnumerable<T>
GetEnumerator()
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
public IEnumerator<T> GetEnumerator() { ...}
ただし、両方とも明示的に指定することもできます。または実際に、でIEnumerator<T>
:
public T Current { get { ... } }
object IEnumerator.Current { get { return Current; } }
さらに、物の名前を変更したい場合もあります。たとえば、何らかの理由で aFrobber
には、当然のことながら であるメソッドがありFrob()
ます。しかし、メソッドIDoSomething
を持つインターフェースも実装しています。DoIt()
意図を表現するのに最も適切な用語を API に反映させることができるようになりました。
class Frobber : IDoSomething {
public void Frob() {..}
void IDoSomething.DoIt() { Frob(); }
}