در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

Event ها در زبان سی شارپ

از قدیم گفتن هر عملی یک عکس العمل دارد. شما در خیابان در حال راه رفتن هستید، ناگهان دوست خود را می بینید و او به شما سلام می کند، شما ناخودآگاه جواب سلام او را با زبانی که بین شما و دوستتان تعریف شده می دهید، حال این جواب سلام می تواند خیلی رسمی باشد یا خیلی خودمانی. یعنی شما بر اساس شخصی که به شما سلام می دهد، جواب سلامی متفاوت می دهید! در حقیقت بین شما و دوست شما یک Event وجود دارد با این تعریف: «اگر برای مثال محمد را دیدم و او به من سلام کرد، من هم جواب سلام او را می دهم.» در زبان های برنامه نویسی که از قابلیت Event ها پشتیبانی می کنند نیز به همین صورت است، شما می توانید برای هر کلاس یک Event تعریف کنید که این Event، در شرایطی خاص اجرا می شود. تعریف و استفاده از Event ها به طور مستقیم به مبحث Delegate ها ارتباط دارند. در این بخش با نحوه تعریف و استفاده از Event ها آشنا می شویم. فرض کنید دو کلاس داریم با نام Person و PersonRepository که به صورت زیر تعریف شده اند:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class PersonRepository
{
    public void Add(Person person)
    {
        // add person to database
    }

    public void RemovePerson(Person person)
    {
        // remove person from database
    }
}

کلاس Person مدل سازی موجودیت یک شخص در برنامه و کلاس PersonRepository وظیفه حذف و اضافه کردن موجودیت Person را از Database دارد. حال فرض کنید می خواهیم زمانی که یک شخص به بانک اطلاعاتی اضافه شد، یک کد اجرا شود، این کد مشخص نیست و می بایست از بیرون کلاس مشخص شود. برای این کار باید از Event ها استفاده کنیم. ابتدا باید یک Delegate برای Event مورد نظر تعریف کنیم:

public delegate void OnPersonAddOrRemove(Person addedPerson);

Delegate بالا، signature متدی را تعریف می کند که نوع بازگشتی آن void و پارامتر ورودی آن از نوع Person است. حال باید برای کلاس PersonRepositorty رویداد های مورد نظر را تعریف کنید. ساختار تعریف Event به صورت زیر است:

public event {delegate data type} {eventname};
  1. delegate data type: نوع داده delegate ای که تعریف کردیم را در این قسمت می نویسیم
  2. eventname: نام event را مشخص می کند

در قدم بعدی، کلاس PersonRepository را به صورت زیر تغییر می دهیم:

public class PersonRepository
{
    public event OnPersonAddOrRemove OnPersonAdded;
    public event OnPersonAddOrRemove OnPersonRemoved;

    public void Add(Person person)
    {
        // add person to database
        if (OnPersonAdded != null)
            OnPersonAdded(person);
    }

    public void RemovePerson(Person person)
    {
        // remove person from database
        if (OnPersonRemoved != null)
            OnPersonRemoved(person);
    }
}

همانطور که در کد بالا مشاهده می کنید، ابتدا دو event با نام های OnPersonAdded و OnPersonRemoved به کلاس PersonRepository اضافه شده اند، داخل متدهای Add و Remove، ابتدا بررسی کردیم که Event های مربوطه null هستند یا خیر، در صورت null نبودن اقدام به فراخوانی event کردیم. دقت کنید اگر برای event، متدی مشخص نکنیم، مقدار event برابر null است. برای استفاده از event های تعریف شده، ابتدا متدی برای event تعریف می کنیم:

private static void OnPersonAdded(Person addedPerson)
{
    Console.WriteLine("Person " + addedPerson.FirstName + " " + addedPerson.LastName + " added to database.");
}

در حال زمان استفاده از کلاس PersonRepository، باید Event مورد نظر را مقدار دهی کنیم:

PersonRepository repository = new PersonRepository();
repository.OnPersonAdded += OnPersonAdded;

repository.Add(new Person()
{
    FirstName = "Hossein",
    LastName = "Ahmadi"
});

در کد بالا، بعد از اضافه کردن یک Person، کدی که برای رویداد Add نوشتیم فراخوانی می شود.

علاوه بر اینکه می توانید به یک Event، یک کد را منسوب کنید، می توانید متد منسوب شده را از Event بردارید، برای اینکار به صورت زیر عمل می کنید:

repository.OnPersonAdded -= OnPersonAdded;

می توانید برای انتساب یک متد به یک Event، از Anonymous Method ها و Lambda Expression ها نیز استفاده کنید.

استفاده از Event ها کاربردهای خیلی زیادی دارد، مخصوصاً در نوشتن برنامه های Windows Application که باید برای کنترل های فرم ها، رویدادهای مختلف تعریف کنیم. امیدوارم که این آموزش مورد توجه شما دوستان عزیز قرار گرفته باشد. ITPRO باشید

نویسنده: حسین احمدی

انجمن تخصصی فناوری اطلاعات ایران

#رویدادها_در_زبان_سی_شارپ #event_ها_در_زبان_سی_شارپ #نکات_برنامه_نویسی #آموزش_برنامه_نویسی #استفاده_delegate_ها_در_event_ها
4 نظر
mk512

سلام استاد احمدی;

الان یه آموزش متنی C# هست در سطح مبتدی، یه آموزش تصویری C# هست بازم در سطح مبتدی، و این مقالات مستقل آموزشی در خصوص مباحث C#.

خواستم ببینم این مقالات مستقل، ربطی به اون مجموعه های آموزشی که بالا اشاره کردم دارند یا خیر؟

یا فقط یه منبع مستقل محسوب میشن؟ چون اینجوری جایی ایندکس نمیشن که بشه بهش دسترسی راحت داشت.

همچنین از جایی هم بهش ارجاع داده نشده.

ممنون

حسین احمدی

آموزش متنی برای دوستانی هست که نمیخوان برای فیلم ها مبلغی رو هزینه کنن. روی فیلم های آموزشی بهتر میشه مطالب رسوند. بالاخره گفتاری و تصویری هست و البته نیازمند پرداخت هزینه.

mk512

بله.

اما من جدا از اون دوره های آموزشی، روی صحبتم با این مقالات مستقل بود. مثالش همین مقاله یا امثال "آشنایی با delegate ها در زبان سی شارپ" و ...

خواستم ببینم اینم جزئی از اون آموزش هاس؟ یک کورس جداگونه هست؟ و یا ...

حسین احمدی

این مطالب ادامه همون مباحث هست. اما دیگه به صورت سری ارایه نمیشه. موضوع محور مطالب رو قرار میدم.

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....