Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

Nested Classes (คลาสซ้อน) ใน C#

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