ข้อดีของภาษา C# เมื่อเทียบกับภาษาอื่น ๆ ตอนที่ 9

ข้อดีของภาษา C# เมื่อเทียบกับภาษาอื่น ๆ ตอนที่ 9
การเรียกใช้เมธอดเสริม
กฎของการผูกเมธอด
ตัวอย่างโค้ดต่อไปนี้สาทิตการทำงานของตัวแปลภาษาว่าจะเรียกใช้เมธอดภายในของไทป์หรือเมธอดเสริม คลาส Extensions (รูปที่ 3) มีนิยามของเมธอดเสริมที่สามารถทำงานกับไทป์อะไรก็ได้ที่ล้อตามอินเตอร์เฟส IMyInterface (รูปที่ 2)
ตัวอย่างโค้ดที่นิยามเมธอดเสริม โค้ดบรรทัด 35 จับรวมเนมสเปส DefineIMyInterface โดยใช้คำสั่ง using เพราะต้องการอ้างถึงไทป์นี้ในบรรทัดที่ 41, 47, 56 เมธอด MethodA ในบรรทัดที่ 41 กับเมธอด MethodA ในบรรทัดที่ 47 ถึงแม้ว่าจะมีชื่อเหมือนกันแต่ก็มีซิกเนเจอร์ (ชนิดและการเรียงลำดับของพารามิเตอร์) ไม่ตรงกันจึงถือว่าเป็นเมธอดคนละตัวกัน ส่วนเมธอดเสริม MethodB (รูปที่ 3 บรรทัด 56) จะไม่มีวันถูกเรียกใช้เพราะมันมีชื่อและซินเนเจอร์ตรงกันทุกอย่างกับเมธอดในคลาสทั้งสาม เมื่อตัวแปลภาษาไม่พบเมธอดภายในมันจึงจะเรียกใช้เมธอดเสริม
เนมสเปส ExtensionMethodsDemo1 ที่มีคลาส A B และ C ซึ่งเป็นตัวอย่างนิยามคลาสที่ล้อตามอินเตอร์เฟส IMyInterface โดยคลาส A มีนิยามเมธอด MethodB คลาส B มีนิยามเมธอด MethodB และ มีนิยามเมธอด MethodA ด้วย และคลาส C ก็มีนิยามเมธอด MethodB และ มีนิยามเมธอด MethodA ด้วยเช่นกัน เนื่องจากทุกคลาสมีนิยามเมธอด MethodB ทำให้เมธอดเสริม MethodB (รูปที่ 3 บรรทัด 56) จะไม่มีวันถูกเรียกใช้
เมธอด Main คือส่วนที่เป็นโค้ดตัวอย่างแสดงการเรียกใช้เมธอดเสริม โค้ดบรรทัด 109, 110 เรียกเมธอด MethodA แต่ในคลาส A ไม่มีเมธอดชื่อนี้มีผลให้เมธอดเสริมถูกเรียกใช้ ในขณะที่บรรทัด 114 เรียกเมธอด MethodB ที่มีนิยามไว้แล้วใน A มีผลให้เมธอดเสริมไม่ถูกเรียกใช้งาน
ผลลัพธ์การทำงานของโค้ดตัวอย่างในรูป 2-5
กฎการสร้างเมธอดเสริม
- เมธอเสริมจะไม่ทำงานหากมีเมธอดเดิมที่เหมือนกันอยู่แล้วภายในไทป์
- เมธอดเสริมจะทำงานได้ต่อเมื่อนำเข้าเนมสเปสที่นิยามเมธอดเสริมด้วยคำสั่ง using
รีเฟอร์เรนซ์
- ใช้ในซิกเนเจอร์ของเมธอดและในการเรียกเมธอดเพื่อส่งอาร์กิวเมนต์ไปยังเมธอดโดยวิธีรีเฟอร์เรนซ์
- ใช้ในซิกเนเจอร์ของเมธอดเพื่อส่งค่ากลับไปให้โค้ดที่เรียกเมธอดโดยวิธีรีเฟอร์เรนซ์
- ใช้ร่วมกับสมาชิกของคลาสเพื่อบอกให้รู้ว่าเป็นตัวแปรท้องถิ่นที่เข้าถึงค่าต่าง ๆ โดยวิธีรีเฟอร์เรนซ์
- ใช้ร่วมกับการประกาศสตรักเจอร์เพื่อบังคับให้อินแสตนซ์ของมันถูกเก็บไว้ในสแต็ก
การส่งอาร์กิวเมนต์แบบรีเฟอร์เรนซ์
คือตัวอย่างการใส่คำสั่ง ref ไว้หน้ารายการอาร์กิวเมนต์ของเมธอดเพื่อระบุว่าอาร์กิวเมนต์นั้น ๆ จะทำงานโดยใช้วิธีรีเฟอร์เรนซ์ ท่านจะต้องใส่คำสั่ง ref ไว้สองแห่ง คือใส่หน้าอาร์กิวเมนต์ที่โค้ดส่วนเรียกเมธอด (บรรทัด 14) และใส่ไว้หน้าพารามิเตอร์ของเมธอดที่จะถูกเรียก (บรรทัด 19)