خرید دوره های برنامه نویسی با کیف پولت

Delegates در سی شارپ,نماینده‌ها (Delegates) در سی‌شارپ,کاربردهای Delegates در سی شارپ

Delegates در سی شارپ

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

تیم تحریریه
253
0
29 آبان 1403
لینک کوتاه

Delegates در سی شارپ

در زبان برنامه‌نویسی سی‌شارپ، نماینده‌ها (Delegates) نوعی مرجع به متدها هستند که اجازه می‌دهند متدها را به‌عنوان پارامتر به دیگر متدها ارسال کرده و کدها را به‌طور داینامیک (پویا) مدیریت کنید.

نماینده‌ها امکان پیاده‌سازی مفاهیم مهمی همچون پولیمورفیسم (Polymorphism) و مدیریت رویدادها (Event Handling) را فراهم می‌کنند و در عین حال کدهایی تمیز و انعطاف‌پذیر ایجاد می‌کنند.

در این مقاله به آموزش Delegates، انواع نماینده‌ها از جمله Func و کاربرد آن‌ها می‌پردازیم.

نماینده‌ها در سی‌شارپ مشابه اشاره‌گرهای تابعی در زبان‌های C و C++ هستند، اما با امنیت بیشتری پیاده‌سازی شده‌اند.

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

وقتی یک متد به نماینده‌ای اختصاص داده شود، نماینده می‌تواند آن متد را در هر زمانی فراخوانی کند.

 

Delegates در سی شارپ

تعریف و ساختار نماینده‌ها

برای تعریف یک نماینده در سی‌شارپ، باید نوع بازگشتی و پارامترهای ورودی آن را مشخص کنید.

مثال: تعریف نماینده‌ای که دو عدد صحیح را جمع می‌کند:

// تعریف یک نماینده که به متدی اشاره می‌کند که دو عدد صحیح را دریافت کرده و یک عدد صحیح باز می‌گرداند
public delegate int Operation(int a, int b);

class Program
{
    static void Main(string[] args)
    {
        // ایجاد یک نمونه از نماینده
        Operation add = Sum;

        // فراخوانی متد از طریق نماینده
        Console.WriteLine("Sum: " + add(5, 3));
    }

    // متدی که با امضای نماینده Operation سازگار است
    static int Sum(int x, int y)
    {
        return x + y;
    }
}


در این مثال، نماینده‌ای به نام Operation تعریف شده است که دو عدد صحیح را به‌عنوان پارامتر دریافت کرده و یک عدد صحیح بازمی‌گرداند.

سپس، نماینده Operation برای متدی به نام Sum تعریف شده و در نهایت از طریق نماینده، متد فراخوانی شده است.

 

 

کاربردهای Delegates در سی شارپ

نماینده‌ها کاربردهای گسترده‌ای در سی‌شارپ دارند، از جمله:

  • پاس کردن متدها به عنوان پارامتر

    نماینده‌ها امکان ارسال متدها به دیگر متدها را فراهم می‌کنند، که به شما اجازه می‌دهد تا کدهایی انعطاف‌پذیرتر و قابل استفاده مجدد بنویسید.
  • مدیریت رویدادها

    در سی‌شارپ، رویدادها براساس نماینده‌ها پیاده‌سازی می‌شوند و به شما امکان می‌دهند که رفتارهای مختلف را هنگام وقوع یک رویداد اعمال کنید.
  • پیاده‌سازی مفاهیم چندریختی (Polymorphism)

    نماینده‌ها به شما امکان می‌دهند تا چندین متد با امضای مشابه را به عنوان یک نوع واحد در کد مدیریت کنید.
// تعریف یک نماینده که به متدی اشاره می‌کند که دو عدد صحیح را دریافت کرده و یک عدد صحیح باز می‌گرداند
public delegate int Operation(int a, int b);

class Program
{
    static void Main(string[] args)
    {
        // ایجاد یک نمونه از نماینده
        Operation add = Sum;

        // فراخوانی متد از طریق نماینده
        Console.WriteLine("Sum: " + add(5, 3));
    }

    // متدی که با امضای نماینده Operation سازگار است
    static int Sum(int x, int y)
    {
        return x + y;
    }
}

 

 

کاربردهای Delegates در سی شارپ

 

انواع نماینده‌های از پیش تعریف شده

سی‌شارپ چند نوع نماینده از پیش تعریف شده ارائه می‌دهد که از رایج‌ترین انواع نماینده‌ها هستند.

این نماینده‌ها برای ساده‌سازی کد و اجتناب از تعریف نماینده‌های سفارشی در هر بار استفاده می‌شوند.

  •  Action

    Action نماینده‌ای است که می‌تواند یک یا چند پارامتر ورودی دریافت کند اما هیچ مقداری بازنمی‌گرداند (void).

مثال:

Action<string> greet = name => Console.WriteLine("Hello, " + name);
greet("Ali"); // خروجی: Hello, Ali
  • Func

    Func نوعی نماینده است که یک یا چند پارامتر ورودی دریافت کرده و مقداری را بازمی‌گرداند.
    آخرین پارامتر در تعریف Func همیشه نوع داده بازگشتی است.

مثال:

Func<int, int, int> multiply = (a, b) => a * b;
Console.WriteLine(multiply(5, 3)); // خروجی: 15

 

  •  Predicate

    Predicate نماینده‌ای است که یک پارامتر دریافت کرده و یک مقدار bool بازمی‌گرداند.
    این نوع نماینده برای شرایط و فیلترهای منطقی استفاده می‌شود.

مثال:

Predicate<int> isEven = x => x % 2 == 0;
Console.WriteLine(isEven(4)); // خروجی: True

 

 

انواع نماینده‌های از پیش تعریف شده


آموزش Func Delegates

Func یکی از پراستفاده‌ترین انواع نماینده‌ها در سی‌شارپ است.

این نماینده می‌تواند چندین پارامتر ورودی و یک مقدار بازگشتی داشته باشد، که نوع آخر در تعریف آن نمایانگر نوع داده‌ای است که بازمی‌گرداند.

تعریف و استفاده از Func در سی شارپ

فرض کنید می‌خواهیم تابعی داشته باشیم که سه عدد صحیح را به عنوان ورودی دریافت کند و حاصل‌جمع آن‌ها را بازگرداند.

با استفاده از Func می‌توانیم این کد را بدون نیاز به تعریف نماینده سفارشی پیاده‌سازی کنیم.

مثال:

Func<int, int, int, int> addThreeNumbers = (a, b, c) => a + b + c;
Console.WriteLine(addThreeNumbers(2, 3, 5)); // خروجی: 10




در این مثال، <Func<int, int, int, int یک نماینده از نوع Func است که سه عدد صحیح به عنوان ورودی دریافت کرده و یک عدد صحیح به عنوان خروجی بازمی‌گرداند.

 

کاربردهای Func در برنامه‌نویسی

  • کاهش کدهای اضافی

    Func اجازه می‌دهد که کدهای ساده و مستقیم‌تری نوشته و از تعریف نماینده‌های سفارشی جلوگیری شود.
  • قابلیت استفاده مجدد و خوانایی

    استفاده از Func موجب می‌شود کد خواناتر و قابل استفاده مجدد باشد، به خصوص در موقعیت‌هایی که نیاز به انجام عملیات مشابهی روی داده‌های مختلف داریم.
  • ادغام با لینک (LINQ)

    بسیاری از توابع لینک از Func برای فیلتر کردن، مرتب‌سازی و تغییر داده‌ها استفاده می‌کنند.

    مثال دیگر با LINQ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
Func<int, bool> isOdd = x => x % 2 != 0;
var oddNumbers = numbers.Where(isOdd).ToList();
Console.WriteLine(string.Join(", ", oddNumbers)); // خروجی: 1, 3, 5

 

کاربردهای Func در برنامه‌نویسی
مقایسه نماینده‌های Action و Func

Action برای متدهایی که بازگشتی ندارند و فقط عملیات اجرایی انجام می‌دهند مناسب است.
Func برای متدهایی استفاده می‌شود که مقداری را به عنوان خروجی بازمی‌گردانند.
برای مثال، اگر بخواهید عملیاتی مانند نمایش پیامی را انجام دهید که نیازی به بازگشت مقدار ندارد، از Action استفاده می‌کنید؛ اما اگر بخواهید نتیجه یک محاسبه را دریافت کنید، Func مناسب‌تر است.

نمونه‌ای ترکیبی از استفاده Action و Func

Action<string> printMessage = message => Console.WriteLine(message);
Func<int, int, int> add = (a, b) => a + b;

int result = add(5, 3);
printMessage("Result: " + result); // خروجی: Result: 8



نماینده‌ها در سی‌شارپ نقش مهمی در پیاده‌سازی کدهای پویا و قابل‌انعطاف دارند و امکان ارسال متدها به عنوان پارامتر، ایجاد انعطاف‌پذیری و استفاده از رویدادها را فراهم می‌کنند. Func، Action و Predicate از انواع مهم نماینده‌های از پیش تعریف شده در سی‌شارپ هستند که کار با آن‌ها ساده و کاربردی است.

با استفاده از نماینده‌ها و ترکیب آن‌ها با لینک، می‌توانید کدهایی ساده‌تر و خواناتر بنویسید و از قابلیت‌های شی‌گرایی و داینامیک سی‌شارپ بهره‌مند شوید.

 

 

🌟 آیا به دنبال یک فرصت عالی برای یادگیری برنامه‌نویسی هستید؟ 🚀

با دوره آموزشی سی‌شارپ ما، شما می‌توانید مهارت‌های خود را به سطح جدیدی ارتقا دهید! این دوره به‌طور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامه‌نویسی سی‌شارپ پیش بروید.

👨‍🏫 چرا دوره ما را انتخاب کنید؟

  • محتوای جامع و عملی: با پروژه‌های واقعی و تمرینات عملی، یادگیری را به تجربه‌ای جذاب تبدیل کنید.
  • مدرس مجرب: از تجربه و دانش مدرس حرفه‌ای بهره‌مند شوید که شما را در هر مرحله از یادگیری راهنمایی می‌کنند.
  • پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
  • دسترسی مادام‌العمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، می‌توانید به آن مراجعه کنید.

💡 فرصت را از دست ندهید!

بایادگیری سی‌شارپ، می‌توانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژه‌های جذاب و چالش‌برانگیز شرکت کنید.

همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده‌ای روشن‌تر بردارید!

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

 

 

مثال پروژه‌محور کوتاه از Delegates در سی‌شارپ

در اینجا یک مثال پروژه‌محور کوتاه از Delegates در سی‌شارپ آورده شده است.

در این مثال، یک سیستم ساده‌ی پرداخت داریم که از نماینده‌ها (Delegates) برای مدیریت روش‌های مختلف پرداخت (پرداخت با کارت اعتباری، پرداخت نقدی و پرداخت با کیف پول دیجیتال) استفاده می‌کند.

مثال پروژه‌محور: سیستم پرداخت با استفاده از Delegates

using System;

class PaymentProcessor
{
    // تعریف Delegate برای روش پرداخت
    public delegate void PaymentDelegate(double amount);

    // متد پردازش پرداخت، با یک delegate به عنوان پارامتر برای نوع پرداخت
    public void ProcessPayment(double amount, PaymentDelegate paymentMethod)
    {
        paymentMethod(amount);  // اجرای متد پرداخت با استفاده از Delegate
    }
}

// کلاس‌های مختلف برای روش‌های پرداخت
class PaymentMethods
{
    public void CreditCardPayment(double amount)
    {
        Console.WriteLine($"پرداخت {amount} تومان با کارت اعتباری انجام شد.");
    }

    public void CashPayment(double amount)
    {
        Console.WriteLine($"پرداخت {amount} تومان به صورت نقدی انجام شد.");
    }

    public void DigitalWalletPayment(double amount)
    {
        Console.WriteLine($"پرداخت {amount} تومان با کیف پول دیجیتال انجام شد.");
    }
}

class Program
{
    static void Main()
    {
        PaymentProcessor processor = new PaymentProcessor();
        PaymentMethods methods = new PaymentMethods();

        // تعریف Delegate ها برای روش‌های مختلف پرداخت
        PaymentProcessor.PaymentDelegate creditCardDelegate = methods.CreditCardPayment;
        PaymentProcessor.PaymentDelegate cashDelegate = methods.CashPayment;
        PaymentProcessor.PaymentDelegate digitalWalletDelegate = methods.DigitalWalletPayment;

        // انجام پرداخت با استفاده از روش‌های مختلف
        processor.ProcessPayment(1000, creditCardDelegate);         // پرداخت با کارت اعتباری
        processor.ProcessPayment(2000, cashDelegate);               // پرداخت نقدی
        processor.ProcessPayment(3000, digitalWalletDelegate);      // پرداخت با کیف پول دیجیتال
    }
}



توضیح کد

  • PaymentProcessor: این کلاس شامل متدی به نام ProcessPayment است که از یک نماینده PaymentDelegate برای مشخص کردن نوع پرداخت استفاده می‌کند.

  • PaymentMethods: این کلاس سه روش مختلف پرداخت (CreditCardPayment، CashPayment، و DigitalWalletPayment) را پیاده‌سازی می‌کند.

  • Main: در اینجا، برای هر روش پرداخت یک نماینده (PaymentDelegate) ایجاد شده و سپس از ProcessPayment برای انجام پرداخت با نوع پرداخت مشخص استفاده شده است.

    این ساختار به ما امکان می‌دهد به‌راحتی روش‌های پرداخت جدیدی اضافه کنیم و سیستم را انعطاف‌پذیرتر کنیم.

محصولات مرتبط

کاربران ما

شما هم نظرتون با ما دریاره “Delegates در سی شارپ” اشتراک بزارید

برای ارسال نظر لطفا ورود یا ثبت نام کنید

منو