Nested Class คือ Class ที่ประกาศอยู่ภายใน Class อื่น (Enclosing Class) เป็น Member ของ Class นั้น
Syntax
class Outer
{
class Nested { } // Default: private
public class PublicNested { } // เข้าถึงได้จากนอก
private class PrivateNested { } // เข้าถึงได้แค่ใน Outer
}
ตัวอย่าง
using System;
class Outer
{
public int OuterValue = 10;
public class Nested
{
public int NestedValue = 20;
public void Show()
{
// ไม่เข้าถึง Outer Instance Members ได้โดยตรง
// ต้องมี Instance ของ Outer
Console.WriteLine("Nested Value: " + NestedValue);
}
}
}
class Program
{
static void Main()
{
// เข้าถึง Nested Class ผ่าน Outer Class
Outer.Nested nested = new Outer.Nested();
nested.Show();
// Nested Class สามารถเข้าถึง Private Members ของ Outer ได้
// (ถ้ามี Instance ของ Outer)
}
}
คุณสมบัติสำคัญ
- Default Access: **private** (ต่างจาก Top-level Class ที่เป็น internal)
- เข้าถึง Private Members ของ Enclosing Class ได้ (ผ่าน Instance)
- ใช้สำหรับ: Implementation Details, Helper Classes, Encapsulation
- Instantiate:
Outer.Nested n = new Outer.Nested();
ตัวอย่าง: เข้าถึง Private Members ของ Outer
class Outer
{
private string _secret = "Hidden";
public class Nested
{
public void RevealSecret(Outer outer)
{
Console.WriteLine(outer._secret); // เข้าถึง private ได้!
}
}
}
// ใช้งาน
Outer outer = new Outer();
Outer.Nested nested = new Outer.Nested();
nested.RevealSecret(outer); // "Hidden"
ใช้งานจริง
- Iterator Implementation (IEnumerator)
- Node Classes ใน Data Structures (TreeNode, ListNode)
- Event Arguments Classes
- Builder Pattern Inner Classes