سه شنبه ۲۷ شهريور ۱۴۰۳
Tut24 آموزش برنامه نویسی و مجله تخصصی فناوری ورود/عضویت

آموزش سی شارپ - متدهای ناشناس

گفتیم که از delegate ها برای ارجاع به هر متدی استفاده می‌شود که امضایی مشابه امضای delegate داشته باشد. به عبارت دیگر، شما می‌توانید یک متد را که می‌تواند توسط یک delegate مورد ارجاع قرار گیرد را با استفاده از آن شیء delegate فراخوانی کنید.

متدهای ناشناس روشی را برای ارسال یک بلاک کد به عنوان پارامتر delegate فراهم می‌کنند. متدهای ناشناس متدهایی هستند که بدون نام هستند، فقط بدنه دارند.

شما نیازی به مشخص کردن نوع برگشتی در یک متد ناشناس ندارید؛ این نوع از دستور از طریق بازگشت داخل بدنه متد دستور داده می‌شود .

نوشتن یک متد ناشناس

متدهای ناشناس با ایجاد نمونه delegate با کلیدواژه delegate اعلام می‌شوند. به عنوان مثال،

delegate void NumberChanger(int n);
...
NumberChanger nc = delegate(int x) {
   Console.WriteLine("Anonymous Method: {0}", x);
};

بلاک کد Console.WriteLine("Anonymous Method: {0}", x); بدنه‌ی متد ناشناس است.

Delegate می‌تواند به همین روش، یعنی با ارسال پارامترهای متد به شیء delegate، هم با استفاده از متدهای ناشناس و هم با استفاده از متدهای نامگذاری شده فراخوانی شود.

به عنوان مثال،

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