Ричард Эв дал пример использования доступа во вложенных классах. Другой вариант использования для вложенных классов - это частная реализация открытого интерфейса:
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>
.