То навіщо створювати вкладений клас?
Я можу придумати кілька важливих причин:
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
забруднює область, що містить.