اینجا میتونی برنامه نویسی ویندوز رو به طور کاملا رایگان یاد بگیری
2 سال پیش / خواندن دقیقه

آشنایی با Func در زبان سی شارپ

Func یک delegate تعریف شده در زبان سی شارپ است که با استفاده از آن دیگر نیاز نیست یک delegate را به شکلی که قبلا تعریف میکردیم در برنامه اعلان کنیم. در این فصل با دلیگیت Func در سی شارپ آشنا میشویم.

Func

در فصل های قبل مطالبی را در مورد delegate ها آموختیم. یک delegate می تواند به شکلی که در زیر آمده است تعریف شود :

public delegate int SomeOperation(int i, int j);
class Program
{
    static int Sum(int x, int y)
    {
        return x + y;
    }
    static void Main(string[] args)
    {
        SomeOperation add = Sum;
        int result = add(10, 10);
        Console.WriteLine(result); 
    }
}

خروجی نمونه مثال بالا به شکل زیر است :

20

سی شارپ نسخه ی ۳ به بعد شامل یک delegate درونی است که جنریک بوده و Func نام دارد. بنابراین دیگر نیاز نیست به شکلی که در بالا آمده است، delegate دلخواه خود را تعریف کنید. Func در فضای نامی System قرار دارد و می تواند به تعداد صفر و یا بیشتر پارامتر ورودی داشته باشد. Func همچنین دارای یک پارامتر out برای برگرداندن نتیجه است. برای مثال یک Func که یک پارامتر را به عنوان ورودی دریافت و پارامتری را برای خروجی داشته باشد، به شکل زیر در فضای نامی System قرار دارد :

namespace System
{    
    public delegate TResult Func<in T, out TResult>(T arg);
}

آخرین پارامتر در براکت های <> به عنوان نوع بازگشتی در نظر گرفته می شود. دیگر پارامترها پارامتر ورودی محسوب می شوند :

 

آشنایی با Func در زبان سی شارپ
یک Func با دو پارامتر ورودی و یک پارامتر خروجی به شکلی است که در زیر آمده است :


آشنایی با Func در زبان سی شارپ
برای مثالی که در ابتدای فصل آمده بود، می‌توان با استفاده از دلیگیت Func بازنویسی را به شکل زیر انجام داد :

class Program
{
    static int Sum(int x, int y)
    {
        return x + y;
    }
    static void Main(string[] args)
    {
        Func<int,int, int> add = Sum;
        int result = add(10, 10);
        Console.WriteLine(result); 
    }
}

می‌توانید هر متدی را که دو پارامتر از نوع int داشته باشد و مقداری از نوع int را بازگرداند به Func بالا انتساب داد.

به کار بردن Func به همراه متد های بی نام

میتوان یک متد بی نام را به Func انتساب داد. این کار با استفاده از کلمه کلیدی delegate انجام می پذیرد :

Func<int> getRandomNumber = delegate()
                            {
                                Random rnd = new Random();
                                return rnd.Next(1, 100);
                            };

میتوان در انتساب به یک Func از عبارت های لمبدا استفاده نمود.مثال زیر این مورد را به خوبی نشان می‌دهد :

Func<int> getRandomNumber = () => new Random().Next(1, 100);
//Or 
Func<int, int, int>  Sum  = (x, y) => x + y;



شاید از نوشته‌های زیر خوشتان بیاید
نظر خود را درباره این پست بنویسید ...

منوی سریع