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