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 Node
naik ke cakupan yang sama dengan LinkedList
, Anda akan memilikinya
public class LinkedListNode
{
}
public class LinkedList
{
// Use LinkedListNode to implement the class
}
LinkedListNode
tidak mungkin berguna tanpa LinkedList
kelas itu sendiri. Bahkan jika LinkedList
disediakan beberapa fungsi yang mengembalikan LinkedListNode
objek yang LinkedList
bisa digunakan pengguna, itu tetap LinkedListNode
berguna hanya ketika LinkedList
digunakan. Untuk alasan itu, membuat kelas "simpul" kelas sebaya LinkedList
mencemari ruang lingkup yang berisi.