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 Node
allo stesso ambito LinkedList
, avrai
public class LinkedListNode
{
}
public class LinkedList
{
// Use LinkedListNode to implement the class
}
LinkedListNode
è improbabile che sia utile senza la LinkedList
classe stessa. Anche se LinkedList
fornito alcune funzioni che restituiscono un LinkedListNode
oggetto che un utente LinkedList
potrebbe utilizzare, è comunque LinkedListNode
utile solo quando LinkedList
viene utilizzato. Per tale motivo, rendere la classe "nodo" una classe pari LinkedList
è inquinare l'ambito di contenimento.