Quindi perché creare una classe nidificata?
Posso pensare a un paio di ragioni importanti:
1. Abilita incapsulamento
Molte volte le classi nidificate sono dettagli di implementazione della classe. Gli utenti della classe principale non dovrebbero preoccuparsi della loro esistenza. Dovresti essere in grado di cambiarli a piacimento senza richiedere agli utenti della classe principale di cambiare il loro codice.
2. Evitare l'inquinamento dei nomi
Non aggiungere tipi, variabili, funzioni, ecc. In un ambito a meno che non siano appropriati in tale ambito. Questo è leggermente diverso dall'incapsulamento. Potrebbe essere utile esporre l'interfaccia di un tipo nidificato, ma il posto corretto per il tipo nidificato è ancora la classe principale. In C ++ land, i tipi di iteratori ne sono un esempio. Non ho abbastanza esperienza in C # per darvi esempi concreti.
Facciamo un esempio semplicistico per illustrare perché spostare una classe nidificata nello stesso ambito della classe principale è l'inquinamento dei nomi. Supponiamo che tu stia implementando una classe di elenco collegata. Normalmente, useresti
publid class LinkedList
{
class Node { ... }
// Use Node to implement the LinkedList class.
}
Se decidi di passare Nodeallo stesso ambito LinkedList, avrai
public class LinkedListNode
{
}
public class LinkedList
{
// Use LinkedListNode to implement the class
}
LinkedListNodeè improbabile che sia utile senza la LinkedListclasse stessa. Anche se LinkedListfornito alcune funzioni che restituiscono un LinkedListNodeoggetto che un utente LinkedListpotrebbe utilizzare, è comunque LinkedListNodeutile solo quando LinkedListviene utilizzato. Per tale motivo, rendere la classe "nodo" una classe pari LinkedListè inquinare l'ambito di contenimento.