Richard Ev は、ネストされたクラス内でのアクセスの使用例を示しました。ネストされたクラスのもう 1 つの使用例は、パブリック インターフェイスのプライベート実装です。
public class MySpecialCollection<T> : IEnumerable<T>
{
public IEnumerator<T> GetEnumerator()
{
return new MySpecialEnumerator(...);
}
private class MySpecialEnumerator : IEnumerator<T>
{
public bool MoveNext() { ... }
public T Current
{
get { return ...; }
}
// etc...
}
}
これにより、パブリック インターフェイスまたは基本クラスのプライベート (または保護または内部) 実装を提供できます。コンシューマーは、具体的な実装について知る必要も気にする必要もありません。これは、ネストされMySpecialEnumerator
ていないプライベート クラスを持つことができないため、クラスを内部にすることで、ネストされたクラスなしで実行することもできます。
BCL は非公開の実装を広範囲に使用します。たとえば、LINQ 演算子によって返されるオブジェクトは、 を実装する非パブリック クラスですIEnumerable<T>
。