То навіщо створювати вкладений клас?
Я можу придумати кілька важливих причин:
1. Увімкніть інкапсуляцію
Багато разів вкладені класи - це деталі реалізації класу. Користувачі основного класу не повинні дбати про своє існування. Ви повинні мати можливість їх змінити за бажанням, не вимагаючи від користувачів основного класу змінювати свій код.
2. Уникайте забруднення імен
Не слід додавати типи, змінні, функції тощо у область застосування, якщо вони не підходять для цієї області. Це трохи відрізняється від інкапсуляції. Це може бути корисно розкрити інтерфейс вкладеного типу, але належне місце для вкладеного типу все ще є основним класом. На землі C ++ типи ітераторів є одним із таких прикладів. Мені не вистачає досвіду роботи в C #, щоб надати вам конкретні приклади.
Складемо спрощений приклад, щоб проілюструвати, чому переміщення вкладеного класу до тієї ж області, що і основний клас, - це забруднення імен. Скажімо, ви реалізуєте зв'язаний клас списку. Як правило, ви б використовували
publid class LinkedList
{
class Node { ... }
// Use Node to implement the LinkedList class.
}
Якщо ви вирішите перейти Nodeдо тих же обсягів LinkedList, що і у вас, буде
public class LinkedListNode
{
}
public class LinkedList
{
// Use LinkedListNode to implement the class
}
LinkedListNodeнавряд чи буде корисним без LinkedListсамого класу. Навіть якщо LinkedListнадаються деякі функції, які повертають LinkedListNodeоб'єкт, яким користувач LinkedListможе користуватися, він все одно стає LinkedListNodeкорисним лише тоді, коли LinkedListвикористовується. З цієї причини перетворення класу "вузол" в одноранговий клас LinkedListзабруднює область, що містить.