Jadi mengapa membuat kelas bersarang?
Saya dapat memikirkan beberapa alasan penting:
1. Aktifkan enkapsulasi
Berkali-kali kelas bersarang adalah detail implementasi kelas. Pengguna kelas utama tidak harus peduli dengan keberadaan mereka. Anda harus dapat mengubahnya sesuka hati tanpa mengharuskan pengguna kelas utama untuk mengubah kode mereka.
2. Hindari pencemaran nama
Anda tidak harus menambahkan tipe, variabel, fungsi, dll. Dalam cakupan kecuali mereka sesuai dalam lingkup itu. Ini sedikit berbeda dari enkapsulasi. Mungkin bermanfaat untuk mengekspos antarmuka dari tipe bersarang tetapi tempat yang tepat untuk tipe bersarang masih merupakan kelas utama. Di tanah C ++, tipe iterator adalah salah satu contohnya. Saya tidak berpengalaman dalam C # cukup untuk memberikan contoh konkret di dalamnya.
Mari kita membuat contoh sederhana untuk menggambarkan mengapa memindahkan kelas bersarang ke ruang lingkup yang sama dengan kelas utama adalah polusi nama. Katakanlah Anda menerapkan kelas daftar tertaut. Biasanya, Anda akan menggunakannya
publid class LinkedList
{
class Node { ... }
// Use Node to implement the LinkedList class.
}
Jika Anda memutuskan untuk Nodenaik ke cakupan yang sama dengan LinkedList, Anda akan memilikinya
public class LinkedListNode
{
}
public class LinkedList
{
// Use LinkedListNode to implement the class
}
LinkedListNodetidak mungkin berguna tanpa LinkedListkelas itu sendiri. Bahkan jika LinkedListdisediakan beberapa fungsi yang mengembalikan LinkedListNodeobjek yang LinkedListbisa digunakan pengguna, itu tetap LinkedListNodeberguna hanya ketika LinkedListdigunakan. Untuk alasan itu, membuat kelas "simpul" kelas sebaya LinkedListmencemari ruang lingkup yang berisi.