متدهای بی نام در زبان سی شارپ (Anonymous methods)
در این بخش قصد داریم anonymous method در زبان برنامه نویسی سی شارپ و محدودیت های آن در این زبان توضیح دهیم. اینکه چگونه می توان یک متد بدون نام تعریف کرد، با استفاده از متد های بدون نام چگونه به متغیرها یا توابع خارجی دسترسی داشت و به عنوان یک پارامتر منتقل شوند. anonymous method، همانطور که از نام آن پیداست، متدی بدون نام است. متدهای بی نام در سی شارپ را می توان با استفاده از کلمه کلیدی delegate تعریف کرد و به متغیری از نوع delegate نسبت داد.
در زبان برنامه نویسی #C برای اینکه بارها و بارها ازیک متد استفاده کنیم، متد را نامگذاری می کنیم اما اگر یک متد قرار است فقط یک بار فراخوانی شود نیاز نیست متد با نام تعریف کنیم، کافی است به کمک delegeteها متد بدون نام داشته باشیم. متد های بدون نام را می توان به عنوان ورودی به یک متد دیگر ارسال کرد و همچنین می توانند دارای ورودی یا بدون ورودی باشند. متدهای بدون نام می توانند به متغیرهای تعریف شده در یک تابع خارجی دسترسی داشته باشند. همانطور که گفته شد اگر بخواهیم از متد بی نام استفاده کنیم، باید یک delegate تعریف کنیم با ساختار متدی که قراراست از آن استفاده کنیم.
خروجی کد بالا در ادامه نشان داده شده است.
متدهای بی نام می توانند به متغیرهای تعریف شده در یک تابع بیرونی دسترسی داشته باشند.
خروجی کد بالا در ادامه نشان داده شده است.
anonymous methods نیز می توانند به متدی منتقل شوند که delegate را به عنوان پارامتر می پذیرد.
در مثال زیر، ()PrintHelperMethod اولین پارامترهای Print delegate را می گیرد:
خروجی کد بالا در ادامه نشان داده شده است.
متدهای بی نام را می توان به عنوان event handlers استفاده کرد:
C# 3.0 عبارت lambda را معرفی کرد که آن هم مانند یک متد بی نام عمل می کند.
محدودیت های Anonymous Method
1- anonymous method نمی تواند شامل دستورات پرش مانند goto، break یا continue باشد.
2- anonymous method نمی تواند به پارامتر ref یا out مربوط به یک متد خارجی دسترسی پیدا کند.
3- anonymous method نمی تواند کد ناامن داشته باشد یا به آن دسترسی داشته باشد.
4- anonymous method نمی تواند در سمت چپ عملگر is استفاده شود.
نکاتی که در مورد anonymous method در زبان سی شارپ باید به خاطر بسپارید:
1- متد بی نام را می توان با استفاده از کلمه کلیدی delegate تعریف کرد.
2- متد بی نام باید به یک delegate اختصاص داده شود.
3- متد بی نام می تواند به متغیرها یا توابع بیرونی دسترسی داشته باشد.
4- متد بی نام را می توان به عنوان یک پارامتر ارسال کرد.
5- متد بی نام را می توان به عنوان event handlers استفاده کرد.