คลาสซ้อน (Nested Class) คือ คลาสที่ประกาศอยู่ภายในคลาสอื่น (Enclosing Class) เป็นสมาชิกของคลาสที่ครอบคลุม และสามารถเข้าถึงสมาชิก private ของคลาสภายนอกได้ ในขณะที่คลาสภายนอก ไม่สามารถ เข้าถึงสมาชิก private ของคลาสซ้อนได้
ตัวอย่างโค้ด
class One
{
public int num1;
public class Two
{
public int num2;
}
}
class Demo
{
static void Main()
{
One a = new One();
a.num1++;
One.Two ab = new One.Two();
ab.num2++;
}
}
คำอธิบาย
class Twoประกาศอยู่ภายในclass Oneจึงเป็น Nested Class- เข้าถึงจากภายนอกผ่าน
One.Two(รูปแบบOuterClass.NestedClass) - หาก Nested Class เป็น
publicจะเข้าถึงได้จากทุกที่ หากเป็นprivateจะเข้าถึงได้เฉพาะในคลาสภายนอกเท่านั้น
ประโยชน์ของ Nested Classes
- Encapsulation: จัดกลุ่มคลาสที่เกี่ยวข้องไว้ด้วยกัน
- เข้าถึง Private Members: Nested class เข้าถึง private members ของ outer class ได้
- Readability: แสดงความสัมพันธ์ที่ใกล้ชิดระหว่างคลาส
หมายเหตุ: ต่างจาก Inner Class ใน Java ที่มี reference ไปยัง outer class instance โดยอัตโนมัติ ใน C# Nested Class ไม่มี reference ไปยัง outer instance หากต้องการเข้าถึง instance ต้องส่งผ่าน Constructor หรือ Parameter