Func Delegate در زبان #C
در این بخش از آموزش سی شارپ با Func Delegate در سی شارپ آشنا میشویم. Func یک delegate تعریف شده در زبان سی شارپ است که با استفاده از آن دیگر نیاز نیست یک delegate را به شکلی که قبلا تعریف کرده ایم در برنامه تعریف کنیم.
سی شارپ شامل انواع delegate های عمومی داخلی Func و Action است، به طوری که در بیشتر موارد نیازی به تعریف delegate های سفارشی به صورت دستی ندارید.
Func یک generic delegate است که در فضای نام سیستم گنجانده شده است. دارای صفر یا چند پارامتر ورودی (input parameters) و یک پارامتر خروجی (out parameter) است. آخرین پارامتر به عنوان پارامتر out در نظر گرفته می شود.
Func delegate که یک پارامتر ورودی و یک پارامتر خروجی دارد، در فضای نام سیستم (System namespace) تعریف می شود، همانطور که در زیر نشان داده شده است:
همانطور که در شکل زیر نشان داده شده است آخرین پارامتر در براکت های <> نوع برگشتی و بقیه پارامترها نوع پارامتر ورودی در نظر گرفته می شوند.
یک Func delegate با دو پارامتر ورودی و یک پارامتر خروجی مطابق شکل زیر نمایش داده می شود.
Func delegate زیر دو پارامتر ورودی از نوع int را می گیرد و مقداری از نوع int برمی گرداند:
شما می توانید هر متدی را به func delegate فوق اختصاص دهید که دو پارامتر int را بگیرد و یک مقدار int برگرداند.
خروجی قطعه کد بالا در ادامه نشان داده شده است.
یک نوع Func delegate می تواند شامل 0 تا 16 پارامتر ورودی از انواع مختلف باشد. با این حال، باید یک پارامتر out برای نتیجه داشته باشد. به عنوان مثال، Func delegate زیر هیچ پارامتر ورودی ندارد و فقط یک پارامتر خروجی را شامل می شود.
C# Func با یک متد ناشناس (Anonymous Method)
با استفاده از کلمه کلیدی delegate می توانید یک متد ناشناس را به Func delegate اختصاص دهید.
Func با Lambda Expression
یک Func delegate همچنین می تواند با عبارت lambda استفاده شود، همانطور که در زیر نشان داده شده است:
خروجی کد بالا در ادامه نشان داده شده است.
نکاتی که در مورد Func ها در زبان برنامه نویسی سی شارپ باید به خاطر بسپارید:
1- Func یک نوع built-in delegate است.
2- نوع Func delegate باید مقداری را برگرداند.
3- نوع Func delegate می تواند صفر تا 16 پارامتر ورودی داشته باشد.
4- Func delegate پارامترهای ref و out را نمی پذیرد.
5- نوع Func delegate را می توان با anonymous method یا lambda expression استفاده کرد.