اثر پروانه ای

برنامه نویسی حرفه ای کامپیوتر به زبان سی شارپ - لیست کامل کلمات کلیدی در ʚĭɞ - ßữʈʨɾflỵ ⓔⓕⓕⓔⓒⓣ

اثر پروانه ای

برنامه نویسی حرفه ای کامپیوتر به زبان سی شارپ - لیست کامل کلمات کلیدی در ʚĭɞ - ßữʈʨɾflỵ ⓔⓕⓕⓔⓒⓣ

اثر پروانه ای

اثر پروانه‌ای نام پدیده‌ای است که به دلیل حساسیت سیستم‌های آشوب‌ناک به شرایط اولیه ایجاد می‌شود. این پدیده به این اشاره می‌کند که تغییری کوچک در یک سیستم آشوب‌ناک چون جو سیارهٔ زمین (مثلاً بال‌زدن پروانه) می‌تواند باعث تغییرات شدید (وقوع توفان در کشوری دیگر) در آینده شود.

ایده‌ٔ این‌که پروانه‌ای می‌تواند باعث تغییری آشوبی شود نخستین بار در ۱۹۵۲ در داستان کوتاهی به نام آوای تندر اثر ری بردبری مطرح شد. عبارت «اثر پروانه ای» هم در ۱۹۶۱ در پی مقاله‌ای از ادوارد لورنتس به وجود آمد. وی در صد و سی و نهمین اجلاس ای‌ای‌ای‌اس در سال ۱۹۷۲ مقاله‌ای با این عنوان ارائه داد که «آیا بال‌زدن پروانه‌ای در برزیل می‌تواند باعث ایجاد تندباد در تکزاس شود؟»

آخرین نظرات
  • ۱۳ بهمن ۰۱، ۱۵:۳۱ - حسنا سادات و سما سادات
    عالی
  • ۱
  • ۰

شما وقتی که بخواهید کد سفارشی ای بنویسید که هنگام برپا شدن یک رویداد فراخوانی شود، تعهد آن رویداد را که توسط کلاس های دیگر منتشر شده است را امضا می کنید. برای نمونه، ممکن است برای اینکه اپلیکیشن شما کار مفیدی را در مواقعی که کاربر روی دکمه "کلیک" کرد انجام دهد، تعهد رویداد click دکمه را امضا کنید.


امضای تعهد به رویدادها با استفاده از IDE ویژوال استودیو

  1. اگر نمی توانید پنجره Properties را ببینید، در نمای Design ، روی فرم یا کنترلی (دکمه ، تکست باکس و...) که می خواهید برایش استعمال کننده رویداد بسازید، راست کلیک کنید و گزینه Properties را انتخاب کنید.
  2. در بالاترین قسمت پنجره Properties روی آیکن Events (به شکل رعدوبرق) کلیک کنید.
  3. روی رویدادی که می خواهید بسازید (برای مثال رویداد Load) ، دوبار کلیک کنید.
    ویژوال استودیو بصورت خودکار یک متد استعمال کننده (بصورت خالی و پیاده سازی نشده) رویداد را به کد شما اضافه می کند. به بیانی دیگر، شما می توانید همین کدها را بصورت دستی در نمای Code وارد کند. برای مثال، خطوط کد زیر یک متد استعمال کننده رویداد را اعلان می کنند که در هنگام برپا شدن رویداد Load از کلاس Form فراخوانی خواهد شد.

private void Form1_Load(object sender, System.EventArgs e)
{
    // Add your form load event handling code here.
}

خطوطی از کد که برای تعهد دادن به رویداد مورد نیاز هستند نیز بصورت اتوماتیک تولید شده و در متد InitializeComponent واقع در فایل Form1.Designer.cs  پروژه شما قرار گرفته اند. این کد شبیه کد زیر است:

this.Load += new System.EventHandler(this.Form1_Load);


امضای تعهد به رویدادها با برنامه نویسی

  1. یک متد استعمال کننده رویداد، که امضایش با امضای وکیل رویداد منطبق باشد را تعریف کنید. برای مثال، اگر رویداد، برپایه نوع وکالتی EventHandler است، کد زیر متد منطبق با آن را نشان می دهد:
      void HandleCustomEvent(object sender, CustomEventArgs a)
      {
         // Do something useful here.
      }
  2. با استفاده از عملگر انتساب افزایش دهنده ( =+ ) ، استعمال کننده رویداد خود را به رویداد الحاق کنید. در مثال زیر، فرض کنید شیئ به نام Publisher دارای رویدادی به نام RaiseCustomEvent باشد. دقت کنید که کلاس تعهد کننده به یک مرجع به کلاس ناشر نیاز دارد تا بتواند به رویداده های آن، تعهد دهد.
    publisher.RaiseCustomEvent += HandleCustomEvent;
    توجه کنید که املاء کد بالا در C# 2.0 تازگی دارد. این کد دقیقا با املاء کد C# 1.0 که در آن وکیل کپسوله شده مجبور بود صریحا" با کلمه کلیدی new ساخته شود، برابر است.
    publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);
    یک استعمال کننده رویداد را می توان با استفاده از یک عبارت لامبدا اضافه کرد:
    public Form1()
    {
        InitializeComponent();
        // Use a lambda expression to define an event handler.
        this.Click += (s,e) => { MessageBox.Show(((MouseEventArgs)e).Location.ToString());};
    }


امضای تعهد به رویدادها با استفاده از متدهای بی نام

  • اگر در آینده مجبور به ترک تعهد به رویداد نخواهید بود، می توانید از عملگر انتساب افزایش دهنده ( =+ ) برای الحاق متد بی نام به رویداد استفاده کنید. در مثال زیر، فرض کنید که شیئی به نام Publisher دارای رویدادی به نام RaiseCustomEvent باشد و اینکه یک کلاس CustomEventArgs هم برای حمل کردن برخی اطلاعات اختصاصی شده رویداد ، تعریف شده باشد. توجه کنید که کلاس تعهد کننده به یک ارجاع به Publisher نیاز دارد برای اینکه بتواند به رویدادهای آن تعهد بدهد.
    public Form1()
    {
        InitializeComponent();
        // Use a lambda expression to define an event handler.
        this.Click += (s,e) => { MessageBox.Show(((MouseEventArgs)e).Location.ToString());};
    }
    توجه به این نکته مهم است که شما درصورت استفاده از تابع بی نام برای تعهد به رویداد ، نمی توانید بسادگی از تعهد آن رویداد خارج شوید. در این سناریو برای از تعهد خارج کردن، لازم است که به کدی که در آن به رویداد تعهد داده ایم برگردیم، متد بی نام را در یک متغیر وکالتی ذخیره کرده ، سپس آن وکیل را به رویداد اضافه کنیم. بطور کلی ، ما پیشنهاد می کنیم که اگر می خواهید در برخی نقاط بعدی کدتان از تعهد رویداد خارج شوید، از توابع بی نام برای تعهد به رویدادها استفاده نکنید.

خروج از تعهد

برای جلوگیری از فراخوانده شدن استعمال کننده رویداد در هنگام برپایی رویداد ، از تعهد رویداد خارج شوید. برای جلوگیری از نشتی های منابع، می بایستی قبل از اینکه شیئ متعهد را معزول (dispose) کنید ، از تعهد رویداد خارج شوید. تا زمانیکه از تعهد رویداد خارج شوید، وکیل چندپخشی ای که زیربنای رویداد در شیئ ناشر است یک ارجاع به وکیل تعهد کننده ی مربوط به استعمال کننده رویداد ، دارد. تا زمانیکه شیئ ناشر آن ارجاع را نگهداری می کند، زباله روب (GC) ، شیئ متعهد شما را حذف نخواهد کرد.


فسخ تعهد از یک رویداد

  • برای فسخ تعهد از یک رویداد، از عملگر انتساب کاهنده ( =- ) بصورت زیر استفاده کنید:
    publisher.RaiseCustomEvent -= HandleCustomEvent;
    وقتی همه متعهد ها از تعهد به یک رویداد خارج شدند، نمونه ی رویداد در کلاس ناشر مقدار null به خود می گیرد.

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی