C # - วิธีการที่ไม่ระบุชื่อ
เราได้พูดคุยกันว่าผู้ได้รับมอบหมายถูกใช้เพื่ออ้างอิงวิธีการใด ๆ ที่มีลายเซ็นเหมือนกับของผู้รับมอบสิทธิ์ กล่าวอีกนัยหนึ่งคุณสามารถเรียกเมธอดที่ผู้รับมอบสิทธิ์อ้างอิงได้โดยใช้อ็อบเจ็กต์ผู้รับมอบสิทธิ์นั้น
Anonymous methodsจัดเตรียมเทคนิคในการส่งรหัสบล็อกเป็นพารามิเตอร์ตัวแทน วิธีการไม่ระบุชื่อเป็นวิธีการที่ไม่มีชื่อเป็นเพียงร่างกาย
คุณไม่จำเป็นต้องระบุประเภทการส่งคืนในวิธีการแบบไม่ระบุตัวตน มันอนุมานได้จากคำสั่ง return ภายในตัวเมธอด
การเขียนวิธีการไม่ระบุตัวตน
วิธีการที่ไม่ระบุชื่อถูกประกาศพร้อมกับการสร้างอินสแตนซ์ของผู้ร่วมประชุมด้วย delegateคำสำคัญ. ตัวอย่างเช่น,
delegate void NumberChanger(int n);
...
NumberChanger nc = delegate(int x) {
Console.WriteLine("Anonymous Method: {0}", x);
};
รหัสบล็อกConsole.WriteLine ("Anonymous Method: {0}", x); เป็นเนื้อหาของวิธีการที่ไม่ระบุตัวตน
ผู้ร่วมประชุมสามารถเรียกได้ทั้งด้วยเมธอดแบบไม่ระบุชื่อและเมธอดที่ตั้งชื่อในลักษณะเดียวกันกล่าวคือโดยส่งผ่านพารามิเตอร์เมธอดไปยังอ็อบเจ็กต์ผู้รับมอบสิทธิ์
ตัวอย่างเช่น,
nc(10);
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงแนวคิด -
using System;
delegate void NumberChanger(int n);
namespace DelegateAppl {
class TestDelegate {
static int num = 10;
public static void AddNum(int p) {
num += p;
Console.WriteLine("Named Method: {0}", num);
}
public static void MultNum(int q) {
num *= q;
Console.WriteLine("Named Method: {0}", num);
}
public static int getNum() {
return num;
}
static void Main(string[] args) {
//create delegate instances using anonymous method
NumberChanger nc = delegate(int x) {
Console.WriteLine("Anonymous Method: {0}", x);
};
//calling the delegate using the anonymous method
nc(10);
//instantiating the delegate using the named methods
nc = new NumberChanger(AddNum);
//calling the delegate using the named methods
nc(5);
//instantiating the delegate using another named methods
nc = new NumberChanger(MultNum);
//calling the delegate using the named methods
nc(2);
Console.ReadKey();
}
}
}
เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานโค้ดจะได้ผลลัพธ์ดังนี้ -
Anonymous Method: 10
Named Method: 15
Named Method: 30