C# C-Sharp คือ ตอนที่ 10 : ผู้รับมอบสิทธิ์ (Delegates) และเหตุการณ์ (Events)

  1. ทำความเข้าใจกับผู้รับมอบสิทธิ์ (Delegates)
  2. ผู้รับมอบสิทธิ์แบบหลายผู้รับ (Multicast Delegates)
  3. ทำความเข้าใจเหตุการณ์ (Events)
  4. การใช้ผู้รับมอบสิทธิ์ (Delegates) และกิจกรรม (Events) ในการพัฒนาแอปพลิเคชัน

C# เป็นภาษาการเขียนโปรแกรมแบบหลายกระบวนทัศน์แบบสแตติกที่พัฒนาโดย Microsoft โดยเป็นส่วนหนึ่งของความคิดริเริ่ม .NET คุณสมบัติหลักประการหนึ่งคือการสนับสนุนโปรแกรมเชิงวัตถุ (OOP) ที่หลากหลายด้วยเครื่องมือที่มีประสิทธิภาพสำหรับการห่อหุ้ม การสืบทอด และความหลากหลาย แต่ C# ยังขยายกระบวนทัศน์ OOP ด้วยคุณสมบัติขั้นสูง เช่น ผู้มอบหมายงานและเหตุการณ์ ซึ่งมีความสำคัญอย่างยิ่งในการทำแอพ

ผู้รับมอบสิทธิ์ (Delegates) และเหตุการณ์ (Events) จัดเตรียมวิธีการกำหนดและจัดการพอยน์เตอร์ของฟังก์ชัน โดยสรุปแล้วเป็นการสรุปเมธอดภายในออบเจกต์ วิธีนี้ทำให้สามารถส่งผ่านเมธอดเป็นพารามิเตอร์ เก็บไว้ในโครงสร้างข้อมูล และแม้แต่ส่งคืนจากเมธอดอื่นๆ ซึ่งนำไปสู่ความยืดหยุ่นสูงและโค้ดคู่หลวมๆ บทความนี้จะสำรวจแนวคิดเหล่านี้โดยละเอียดและแสดงให้เห็นว่าแนวคิดเหล่านี้มีความสำคัญต่อการทำแอพใน C# อย่างไร

1. ทำความเข้าใจกับผู้รับมอบสิทธิ์ (Delegates)

ผู้รับมอบสิทธิ์ (Delegates) เป็นหนึ่งในคุณลักษณะเฉพาะของ C# ผู้รับมอบสิทธิ์เป็นตัวชี้ฟังก์ชันเชิงวัตถุที่ปลอดภัยประเภท สรุปเมธอดที่มีลายเซ็นและประเภทการส่งคืนเฉพาะ ผู้รับมอบสิทธิ์สามารถอ้างอิงทั้งเมธอดแบบสแตติกและอินสแตนซ์ และสามารถเรียกใช้ได้เหมือนฟังก์ชันปกติ แม้ว่าอาจชี้ไปที่ฟังก์ชันใดๆ ที่มีลายเซ็นตรงกันก็ตาม

นี่คือการประกาศผู้รับมอบสิทธิ์อย่างง่าย:

public delegate int BinaryOperation(int num1, int num2);

ในกรณีนี้ BinaryOperation เป็นผู้รับมอบสิทธิ์ที่สามารถสรุปเมธอดใดๆ ที่รับจำนวนเต็มสองตัวเป็นพารามิเตอร์และส่งกลับค่าจำนวนเต็ม

ผู้รับมอบสิทธิ์เป็นแบบปลอดภัย หมายความว่าผู้รับมอบสิทธิ์ที่กำหนดให้กับเมธอดประเภทหนึ่งไม่สามารถกำหนดให้กับเมธอดประเภทอื่นที่มีลายเซ็นต่างกันได้ สิ่งนี้ให้ความปลอดภัยและความสามารถในการคาดเดาในโค้ดของคุณ ทำให้แน่ใจว่าคุณเรียกใช้เมธอดที่สอดคล้องกับคำจำกัดความของผู้รับมอบสิทธิ์เท่านั้น

2. ผู้รับมอบสิทธิ์แบบหลายผู้รับ (Multicast Delegates)

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

วิธีสร้างและใช้ผู้รับมอบสิทธิ์แบบหลายผู้รับมีดังนี้

BinaryOperation operations = Operation.Add;
operations += Operation.Subtract;
int result = operations(10, 5);  // This will call both Operation.Add and Operation.Subtract

ในกรณีนี้ operations ผู้รับมอบสิทธิ์แบบหลายผู้รับที่เรียกทั้ง Operation.Add และOperation.Subtract

3. ทำความเข้าใจเหตุการณ์ (Events)

ในขณะที่ผู้รับมอบสิทธิ์มอบวิธีที่มีประสิทธิภาพในการสรุปเมธอด C# ยังแนะนำแนวคิดของเหตุการณ์เพื่อจัดการการร้องขอของผู้รับมอบสิทธิ์ เหตุการณ์เป็นผู้รับมอบสิทธิ์ชนิดพิเศษที่สามารถเรียกใช้ได้จากภายในคลาสที่ประกาศเท่านั้น สิ่งนี้จะป้องกันคลาสภายนอกจากการเรียกใช้เหตุการณ์โดยพลการ ซึ่งเป็นชั้นของการห่อหุ้มและการรักษาความปลอดภัย

วิธีประกาศกิจกรรมมีดังนี้

public class EventDemo
{
    public delegate void MyEventHandler(string message);
    public event MyEventHandler MyEvent;

    public void TriggerEvent(string message)
    {
        MyEvent?.Invoke(message);
    }
}

ในกรณีนี้ เป็นเหตุการณ์ MyEvent ที่สามารถเรียกใช้ได้ผ่านเมธอด TriggerEvent ในคลาส EventDemo ภายนอกสามารถสมัครเข้าร่วมกิจกรรมได้ แต่ไม่สามารถเรียกใช้งานได้โดยตรง

4. การใช้ผู้รับมอบสิทธิ์ (Delegates) และกิจกรรม (Events) ในการพัฒนาแอปพลิเคชัน

ผู้รับมอบสิทธิ์และกิจกรรมเป็นส่วนสำคัญของการทำแอพใน C# อนุญาตให้ใช้โค้ดที่ยืดหยุ่นและเชื่อมต่อกันหลวมๆ ซึ่งมีความสำคัญอย่างยิ่งในการเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์ เช่น แอปพลิเคชัน GUI การพัฒนาเกม และอื่นๆ

ตัวอย่างเช่น พิจารณาแอปพลิเคชัน GUI อย่างง่าย แอปพลิเคชันอาจมีปุ่มที่ผู้ใช้สามารถคลิก กล่องข้อความที่ผู้ใช้สามารถกรอก ช่องทำเครื่องหมายที่ผู้ใช้สามารถเลือกได้ และอื่นๆ การโต้ตอบของผู้ใช้เหล่านี้แต่ละครั้งเป็นเหตุการณ์ที่แอปพลิเคชันจำเป็นต้องตอบสนอง

ใน C# การโต้ตอบเหล่านี้สามารถสร้างแบบจำลองโดยใช้ผู้รับมอบสิทธิ์และเหตุการณ์ ปุ่ม กล่องข้อความ หรือช่องทำเครื่องหมายแต่ละปุ่มสามารถกำหนดเหตุการณ์ที่จะเรียกเมื่อผู้ใช้โต้ตอบกับเหตุการณ์นั้น แอปพลิเคชันสามารถสมัครรับเหตุการณ์เหล่านี้และกำหนดวิธีจัดการกับเหตุการณ์เหล่านี้ได้ สิ่งนี้นำไปสู่การแยกที่ชัดเจนระหว่างโค้ดที่จัดการการโต้ตอบของผู้ใช้และตรรกะส่วนที่เหลือของแอปพลิเคชัน ทำให้การพัฒนาและบำรุงรักษาแอปพลิเคชันง่ายขึ้น

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


ผู้รับมอบสิทธิ์และกิจกรรมเป็นคุณสมบัติขั้นสูงสองอย่างของ C# แต่ก็เป็นคุณสมบัติที่ทรงพลังที่สุดเช่นกัน พวกเขาอนุญาตให้สร้างโค้ดที่ยืดหยุ่นและเชื่อมโยงอย่างหลวม ๆ ซึ่งสามารถตอบสนองต่อเหตุการณ์ด้วยวิธีที่ควบคุมและปลอดภัย สิ่งเหล่านี้มีความสำคัญในการทำแอพ ทำให้โครงสร้างโค้ดที่ชัดเจนและบำรุงรักษาได้สำหรับการโต้ตอบของผู้ใช้ในแอปพลิเคชัน GUI และตรรกะที่กำหนดค่าซ้ำได้ในการใช้งานที่หลากหลาย ด้วยการทำความเข้าใจและใช้เครื่องมือเหล่านี้อย่างมีประสิทธิภาพ นักพัฒนาสามารถทำแอพ C# ที่มีคุณภาพสูง มีประสิทธิภาพ และบำรุงรักษาได้


C# C-Sharp คืออะไร

C# C-Sharp คือ ตอนที่ 9 : การเขียนโปรแกรมแบบมัลติเธรด (Multithreading) และอะซิงโครนัส (Asynchronous)
C# C-Sharp คือ ตอนที่ 11 : LINQ (Language Integrated Query)