0Pricing
C# Academy · บทเรียน

Enum แบบ Flags และการรวมค่าระดับบิต

รวมค่า Enum ด้วยแอตทริบิวต์ Flags

Enum แบบ Flags และการรวมค่าระดับบิต เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

อีนัมแบบแฟล็ก

อีนัมแบบแฟล็กใช้แทนการรวมตัวเลือกหลายรายการ ให้กำกับด้วยแอตทริบิวต์ [Flags] และกำหนดให้สมาชิกแต่ละตัวมีเลขยกกำลังสองที่แตกต่างกัน

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2, Execute = 4 }
class Program {
    static void Main() {
        Access a = Access.Read | Access.Write;
        Console.WriteLine(a);
    }
}

เลขยกกำลังของสอง

แฟล็กแต่ละตัวต้องใช้บิตที่ไม่ซ้ำกัน ได้แก่ 1, 2, 4, 8, 16 วิธีนี้ทำให้สามารถรวมค่าได้โดยไม่ทับซ้อนกัน

using System;

[Flags]
enum Perm { Read = 1, Write = 2, Delete = 4, Share = 8 }
class Program {
    static void Main() {
        Console.WriteLine((int)Perm.Share);
    }
}

การรวมค่าด้วย OR

ใช้ OR ระดับบิต (|) เพื่อรวมแฟล็กเป็นค่าเดียว

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2, Execute = 4 }
class Program {
    static void Main() {
        Access a = Access.Read | Access.Execute;
        Console.WriteLine((int)a);
    }
}

การตรวจสอบด้วย HasFlag

HasFlag ใช้ทดสอบว่าค่าที่รวมกันมีแฟล็กที่ระบุอยู่หรือไม่

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2, Execute = 4 }
class Program {
    static void Main() {
        Access a = Access.Read | Access.Write;
        Console.WriteLine(a.HasFlag(Access.Write));
        Console.WriteLine(a.HasFlag(Access.Execute));
    }
}

การตรวจสอบด้วย AND ระดับบิต

คุณยังสามารถทดสอบแฟล็กด้วย & แล้วเปรียบเทียบกับค่าที่ไม่ใช่ศูนย์ได้ ซึ่งรวดเร็วและแสดงเจตนาอย่างชัดเจน

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2 }
class Program {
    static void Main() {
        Access a = Access.Read | Access.Write;
        bool canWrite = (a & Access.Write) != 0;
        Console.WriteLine(canWrite);
    }
}

การนำแฟล็กออก

ล้างแฟล็กด้วย AND กับค่าส่วนเติมเต็ม: a &= ~Access.Write

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2, Execute = 4 }
class Program {
    static void Main() {
        Access a = Access.Read | Access.Write;
        a &= ~Access.Write;
        Console.WriteLine(a);
    }
}

การเพิ่มแฟล็ก

เพิ่มแฟล็กด้วยการทำ OR เข้าไป หากมีแฟล็กนั้นอยู่แล้ว ค่าจะไม่เปลี่ยนแปลง

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2, Execute = 4 }
class Program {
    static void Main() {
        Access a = Access.Read;
        a |= Access.Execute;
        Console.WriteLine(a);
    }
}

การสลับแฟล็ก

XOR (^) จะสลับแฟล็กให้เปิดหรือปิดได้ในขั้นตอนเดียว

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2 }
class Program {
    static void Main() {
        Access a = Access.Read;
        a ^= Access.Write;
        Console.WriteLine(a);
        a ^= Access.Write;
        Console.WriteLine(a);
    }
}

เหตุผลที่ [Flags] มีความสำคัญ

แอตทริบิวต์ [Flags] เปลี่ยนการทำงานของ ToString ให้พิมพ์ชื่อที่รวมกันแทนการพิมพ์ตัวเลขเพียงตัวเดียว

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2, Execute = 4 }
class Program {
    static void Main() {
        Access a = Access.Read | Access.Execute;
        Console.WriteLine(a);
    }
}

การกำหนดสมาชิกแบบรวม

คุณสามารถกำหนดสมาชิกเพื่อความสะดวกที่เป็นการรวมค่าหลายรายการได้ เช่น All

using System;

[Flags]
enum Access { None = 0, Read = 1, Write = 2, Execute = 4, All = Read | Write | Execute }
class Program {
    static void Main() {
        Console.WriteLine((int)Access.All);
    }
}

การใช้แฟล็กในทางปฏิบัติ

แฟล็กใช้แทนสิทธิ์ การเปิดปิดความสามารถ และชุดตัวเลือกได้อย่างกะทัดรัดภายในจำนวนเต็มเพียงค่าเดียว

using System;

[Flags]
enum Feature { None = 0, Dark = 1, Beta = 2, Sync = 4 }
class Program {
    static void Main() {
        Feature f = Feature.Dark | Feature.Sync;
        Console.WriteLine(f.HasFlag(Feature.Beta));
    }
}

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับอีนัมแบบแฟล็ก

สรุปทบทวน

อีนัม [Flags] กำหนดให้สมาชิกแต่ละตัวมีเลขยกกำลังสองที่ไม่ซ้ำกัน จึงสามารถรวมแฟล็กด้วย | และตรวจสอบด้วย HasFlag หรือ & ได้ คุณเพิ่มค่าด้วย |= นำค่าออกด้วย &= ~ และสลับค่าด้วย ^=

แอตทริบิวต์นี้ทำให้ ToString พิมพ์ชื่อที่รวมกัน และคุณสามารถกำหนดสมาชิกเพื่อความสะดวก เช่น All ได้

คำถามที่พบบ่อย

บทเรียน “Enum แบบ Flags และการรวมค่าระดับบิต” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “Enum แบบ Flags และการรวมค่าระดับบิต” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “Enum แบบ Flags และการรวมค่าระดับบิต”

รวมค่า Enum ด้วยแอตทริบิวต์ Flags คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “Enum แบบ Flags และการรวมค่าระดับบิต” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การกำหนดและใช้งาน Enum
  2. Enum แบบ Flags และการรวมค่าระดับบิต
  3. การแปลงและแยกวิเคราะห์ Enum
  4. การวนซ้ำค่าของ Enum
← กลับไปที่ C# Academy