متدهای بی نام همانطور که از نامشان پیداست ، متدهایی هستند که فاقد نامند. این متد ها در سی شارپ با استفاده از کلمه ی کلیدی delegate تعریف میشوند. در این فصل با متدهای بی نام در سی شارپ آشنا خواهیم شد.
Anonymous Method
همانطور که از نام این متدها مشخص است، یک متد بی نام متدی است که نامی ندارد. متدهای بی نام در سی شارپ میتوانند با استفاده از کلمه کلیدی delegate
تعریف شوند و همچنین می توانند به متغیری که از نوع delegate تعریف شده است ، انتساب داده شوند.
public delegate void Print(int value);
static void Main(string[] args)
{
Print print = delegate(int val) {
Console.WriteLine("Inside Anonymous method. Value: {0}", val);
};
print(100);
}
خروجی نمونه مثال بالا به شکل زیر است :
Inside Anonymous method. Value: 100
متد های بی نام میتوانند به متغیرهایی که در خارج از خود تعریف شدهاند ، دسترسی داشته باشند :
public delegate void Print(int value);
static void Main(string[] args)
{
int i = 10;
Print prnt = delegate(int val) {
val += i;
Console.WriteLine("Anonymous method: {0}", val);
};
prnt(100);
}
خروجی نمونه مثال بالا به شکل زیر است :
Anonymous method: 110
متد های بی نام همچنین می توانند به عنوان آرگومان برای متدهایی که یک delegate را به عنوان پارامتر میپذیرند، ارسال شوند. در نمونه مثال زیر متد ()PrintHelperMethod
در اولین پارامتر خود یک آرگومان از نوع delegate میپذیرد :
public delegate void Print(int value);
class Program
{
public static void PrintHelperMethod(Print printDel,int val)
{
val += 10;
printDel(val);
}
static void Main(string[] args)
{
PrintHelperMethod(delegate(int val) { Console.WriteLine("Anonymous method: {0}", val); }, 100);
}
}
خروجی نمونه مثال بالا به شکل زیر است :
Anonymous method: 110
محدودیت های متد های بی نام
محدودیت های استفاده از متدهای بی نام عبارت اند از :
- در متدهای بی نام نمی توان از دستورات پرش همچون
goto
،break
وcontinue
استفاده نمود. - متد های بی نام نمی توانند شامل پارامترهای
ref
وout
باشند