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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดและใช้งาน Enum
- Enum แบบ Flags และการรวมค่าระดับบิต
- การแปลงและแยกวิเคราะห์ Enum
- การวนซ้ำค่าของ Enum