اثر پروانه ای

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

اثر پروانه ای

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

اثر پروانه ای

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

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

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

انتساب delegate ها

به این دلیل که delegate ها نوع های مرجع هستند، شما می توانید ارجاع گنجانده شده در یک  متغیر وکالتی را با انتساب یک ارجاع به آن متغیر وکالتی تغییر دهید. شیئ وکالتی قدیمی توسط زباله روب (Garbage Collector) عزل خواهد شد.

برای مثال، کد زیر مقدار delVar را تنظیم کرده سپس آنرا تغییر می دهد. شکل زیر این موضوع را نشان می دهد.

MyDel delVar;
delVar = myInstObj.MyM1; // Create and assign the delegate object.
...
delVar = SClass.OtherM2; // Create and assign the new delegate object.


ترکیب delegate ها

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

برای مثال، کد زیر 3 وکیل می سازد. وکیل سوم از ترکیب 2 وکیل اول ایجاد شده است.

MyDel delA = myInstObj.MyM1;
MyDel delB = SClass.OtherM2;
MyDel delC = delA + delB; // Has combined invocation list

هرچند کلمه "ترکیب" این مفهوم را متبادر می کند که وکیل هایی که در قسمت عملوند قرار گرفته اند تغییر می کنند؛ اما بطور کلی چنین چیزی اتفاق نمی افتد. در حقیقت، delegate ها تغییرناپذیر هستند. بعد از اینکه شیئ وکالتی ساخته شد، دیگر نمی توان آنرا تغییر داد.

شکل زیر نتیجه اجرای کد قبلی را توضیح می دهد. دقت کنید که وکیل ها عملوند (آنهایی که در کنار عملگر "+" قرار دارند) بدون تغییر باقی می مانند.


اضافه کردن متد به delegate ها

همانطور که ملاحظه کردید وکیل ها در حقیقت غیرقابل تغییر هستند. اما #C از طریق عملگر =+ املائی را فراهم نموده که توسط آن بنظر میرسد که می توانید یک متد را به delegate اضافه کنید.

برای مثال، کد زیر 2 متد را به لیست احضار delegate "اضافه" می کند. متدها به پائین لیست احضار اضافه شده اند. شکل زیر نتیجه را نشان می دهد.

MyDel delVar = inst.MyM1; // Create and initialize.
delVar += SCl.m3; // Add a method.
delVar += X.Act; // Add a method.

در توضیح شکل باید بگوییم که در واقع وکیل ها غیرقابل تغییرند؛ وکیل نتیجه کد بالا که در لیست احضار خود دارای 3 متد است، در واقع یک وکیل جدید است که بوسیله متغیر به آن اشاره شده است.

درواقع کاری که در اینجا انجام می پذیرد این است که یک وکیل جدید با لیست احضار وکیل سمت چپ علامت =+ و متد سمت راست ساخته می شود. این وکیل جدید سرانجام به متغیر delVar انتساب داده می شود.

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

نظرات (۰)

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

ارسال نظر

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