اثر پروانه ای

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

مشخصات بلاگ
اثر پروانه ای

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

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

آخرین نظرات
  • ۱۱ بهمن ۹۵، ۱۷:۱۸ - فاروق کریمی زاده
    خوب بود.
اثر پروانه ای

همه چیز در مورد delegate - بخش 4

يكشنبه, ۲۸ مهر ۱۳۹۲، ۰۹:۱۲ ق.ظ

حذف متدها از delegate

شما همچنین می توانید یک متد را با استفاده از عملگر =- از delegate حذف کنید. تکه کد زیر طرز استفاده از این عملگر را نشان می دهد. شکل زیر نتیجه اجرای کد را نشان می دهد.

delVar -= SCl.m3; // Remove the method from the delegate.

پس از حذف متد از delegate شکل بصورت زیر در می آید.

مشابه اضافه کردن یک متد به delegate که در واقع delegate نتیجه یک delegate جدید است، در حذف کردن متد از delegate نیز delegate نهایی یک delegate جدید است. (ببخشید که این همه کلمه دله گیت تکرار شد)--- اما واضح است که در حذف متد از delegate ، لیست احضار delegate جدید دارای ارجاع به متد حذف شده نمی باشد.

موارد زیر چیزهایی هستند که می بایست در هنگام حذف متد از delegate به یاد داشته باشید:

  • اگر چندین متد یکسان در لیست احضار موجود باشد، عملگر =- از پایین لیست شروع کرده و اولین متد منطبق با شرایط را حذف می کند.
  • سعی بر حذف کردن متدی که در لیست احضار موجود نیست، هیچ اثری در پی ندارد.
  • سعی بر احضار یک delegate خالی، باعث پرتاب استثناء می شود.(بوجود آمدن خطا-اصطلاح درستش همون پرتاب استثناء هست. البته یکسری دلایل داره که در جای خودشون توضیح داده ام) شما می توانید با مقایسه کردن delegate با null تشخیص دهید که آیا لیست احضار delegate خالی است یا نه. درصورتی که لیست احضار خالی باشد، وکیل null است.
احضار یک delegate
شما delegate را با صدا زدن آن احضار می کنید، به سادگی صذدا زدن متد. پارامترهایی که برای احضار delegate بکار می برید، برای تک تک متدهای لیست احضار استفاده می شوند (مگر اینکه یکی از آنها پارامتر خروجی باشد، که بزودی در مورد آنها توضیح خواهم داد).
برای مثال همانطور که در تکه کد زیر می بینید، وکیل delVar تنها یک مقدار عددی برای ورودی خود می گیرد. احضار کردن وکیل با یک پارامتر باعث می شود که تمام اعضای لیست احضار آن با مقدار پارامتر یکسان احضار شوند (در این مورد 55). شکل زیر مراحل احضار را نشان می دهد.
MyDel delVar = inst.MyM1;
delVar += SCl.m3;
delVar += X.Act;
...
delVar( 55 ); // Invoke the delegate.
...
اگر یک متد در لیست احضار بیش از یک مرتبه موجود باشد، سپس delegate احضار شود، به ازای هر بار رویارویی با آن متد در لیست احضار، آن متد یک بار احضار می شود.

مثال delegate
کد زیر یک delegate بدون پارامتر و بدون مقدار خروجی را اعلان کرده سپس از آن استفاده می کند. در مورد کد به موارد زیر دقت داشته باشید:
*کلاس Test دوتا تابع print اعلان کرده است.
*متد Main یک نمونه از delegate می سازد، سپس سه متد دیگر به آن اضافه می کند.
*در آخر برنامه delegate را احضار می کند، که delegate هم متدهای خودش را احضار می کند. هرچند قبل از احضار delegate برای اینکه مطمئن شود delegate تهی نیست، آن را بررسی می کند.
// Define a delegate type with no return value and no parameters.
delegate void PrintFunction();
class Test
{
    public void Print1()
    { Console.WriteLine("Print1 -- instance"); }
    public static void Print2()
    { Console.WriteLine("Print2 -- static"); }
}
class Program
{
    static void Main()
    {
        Test t = new Test(); // Create a test class instance.
        PrintFunction pf; // Create a null delegate.
        pf = t.Print1; // Instantiate and initialize the delegate.
        // Add three more methods to the delegate.
        pf += Test.Print2;
        pf += t.Print1;
        pf += Test.Print2;
        // The delegate now contains four methods.
        if (null != pf) // Make sure the delegate isn't null.
            pf(); // Invoke the delegate.
        else
            Console.WriteLine("Delegate is empty");
    }
}

این کد نتیجه زیر را حاصل می کند:
Print1 -- instance
Print2 -- static
Print1 -- instance
Print2 -- static

نظرات  (۰)

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

ارسال نظر

لطفا اگر می خواهید در بخش نظرات، کد برنامه مورد نظر خود را بنویسید، قسمت زیر (Program Code) را کپی کرده، و در کادر "پیام" ، paste کنید. سپس برنامه مورد نظر خود را در کادری که ایجاد می شود، وارد کنید.

  • کلید میانبر برای Copy کردن: Ctrl+C

  • کلید میانبر برای paste کردن: Ctrl+V

//Program Code

از همکاری شما کمال تشکر را دارم.

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