اثر پروانه ای

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

اثر پروانه ای

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

اثر پروانه ای

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

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

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

۱۶ مطلب با کلمه‌ی کلیدی «delegate» ثبت شده است

  • ۱
  • ۰

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

وکیل ها برای پاس دادن متدها بصورت آرگومان ، به متد های دیگر استفاده می شوند. مدیریت کننده های رویداد، چیزی جز متدهایی که از طرق delegate ها احضار شده اند، نیستند. شما یک متد سفارشی می سازید و کلاسی مثل windows control می تواند متد شما را در هنگام اتفاق افتادن یک رویداد (event) خاص، فراخوانی کند. مثال زیر طرز اعلان یک وکیل را نشان می دهد:

public delegate int PerformCalculation(int x, int y);

هر متدی از هر کلاس یا ساختار قابل دسترس که با امضای وکیل (شامل نوع برگشتی و پارامترهای ورودی) مطابقت داشته باشد، می تواند به به وکیل انتساب داده شود. متد می تواند static یا یک متد نمونه (instance method) باشد. این کار باعث می شود که بتوانیم با برنامه نویسی، فراخوانی های متد را تغییر دهیم، و همچنین کد جدیدی را در یک کلاس موجود، وارد کنیم. تا وقتی که امضای وکیل را می دانید، می توانید متد خودتان را به آن انتساب دهید.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

رویداد ها ، به یک کلاس یا شیئ این امکان را می دهند که درصورت اتفاق چیزی دلخواه ، کلاس ها یا اشیاء دیگر را مطلع کنند. به کلاسی که رویداد را می فرستد (یا برپا می کند) ، ناشر (publisher) می گویند و به کلاس هایی که رویداد را دریافت (مدیریت/handle) می کنند، متعهد (subscriber/اشتراک گیرنده) می گویند.

در یک برنامه ویندوزی یا تحت وب نمونه که با #C نوشته شده است، شما توسط کنترل هایی مثل button و یا listbox متعهد رویدادهای برپاشده می شوید. شما می توانید با استفاده از IDE (محیط توسعه جامع) Visual C# تمام رویدادهایی که یک کنترل منتشر می کند را ببینید و هر کدام از آنها را که خواستید ، برای مدیریت (handle) انتخاب کنید. IDE بطورت خودکار یک متد خالی مدیریت کننده رویداد و کد تعهد به رویداد را اضافه می کند. برای اطلاعات بیشتر به "راهنمای چگونگی اشتراک گیری و لغو اشتراک از رویدادها" مراجعه کنید.

بررسی رویدادها

رویدادها دارای خواص زیر می باشند:

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

روند زیر چگونگی افزودن رویدادهایی که از الگوی استاندارد دات نت پیروی می کنند را به کلاس ها و ساختارها ، توضیح می دهد. همه رویدادها در کتابخانه کلاس Net Framework. بر پایه وکیل EventHandler می باشند، که بصورت زیر تعریف شده اند:

public delegate void EventHandler(object sender, EventArgs e);

نکته

نسخه 2.0 دات نت فریم وورک یک نسخه جنریک (generic) از این وکیل (delegate) بصورت <EventHandler<TEventArgs معرفی می کند. مثال های زیر چگونگی استفاده از هر دو نسخه را نشان می دهد. هر چند رویدادهای موجود در کلاس هایی که شما تعریف می کنید، می توانند بر پایه هر وکیل معتبری باشند؛ حتی وکیل هایی که یک مقدار را برگشت می دهند، عموما" پیشنهاد می شود که با استفاده از EventHandler ، رویداد هایتان را روی الگوی دات نت فریم وورک ، پایه گزاری کنید. بصورتی که در مثال زیر نشان داده شده است.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

کلمه کلیدی event

کلمه کلیدی event برای اعلان یک کلاس منتشر کننده رویداد استفاده می شود.

مثال

مثال زیر چگونگی اعلان و برپا کردن یک رویداد که از EventHandler به عنوان نوع وکالتی (delegate type) اساسی اش استفاده می کند. برای مشاهده مثال کاملی از چگونگی استفاده از نوع وکالتی جنریک <EventHandler<TEventArgs و چگونگی تصویب یک رویداد و ساختن یک متد مدیریت کننده رویداد، به راهنمای انتشار رویدادها ، مطابق Net Framework. مراجعه کنید.

public class SampleEventArgs
{
    public SampleEventArgs(string s) { Text = s; }
    public String Text {get; private set;} // readonly
}
public class Publisher
{
    // Declare the delegate (if using non-generic pattern).
    public delegate void SampleEventHandler(object sender, SampleEventArgs e);

    // Declare the event.
    public event SampleEventHandler SampleEvent;

    // Wrap the event in a protected virtual method
    // to enable derived classes to raise the event.
    protected virtual void RaiseSampleEvent()
    {
        // Raise the event by using the () operator.
        if (SampleEvent != null)
            SampleEvent(this, new SampleEventArgs("Hello"));
    }
}

رویداد ها نوعی خاص از وکیل چندپخشی هستند که فقط از داخل کلاس یا ساختار (struct)ی که اعلان شده اند (کلاس منتشر کننده) ، احضار می شوند. اگر کلاس ها یا ساختارهای دیگر در رویداد مشترک شوند، وقتی که کلاس ناشر ، رویداد را برپا کند، متدهای مدیریت رویداد آنها فراخوانی خواهند شد. برای اطلاعات بیشتر به رویدادها (راهنمای برنامه نویسی #C) و وکیل ها (راهنمای برنامه نویسی #C) مراجعه کنید.

رویدادها را می توان با public، private، protected، internal یا protected internal علامتگذاری کرد. این اصلاحگرهای دسترسی، چگونگی دسترسی کاربران کلاس ، به رویداد را تعریف می کنند.

کلیدواژه ها و رویدادها

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

  • static : اگر هیچ نمونه ای از کلاس موجود نباشد، رویداد را برای فراخواننده گان در دسترس قرار می دهد. (بدون نمونه سازی از کلاس به رویداد دسترسی داریم).
  • virtual : به کلاس های مشتق شده اجازه می دهد تا با استفاده از کلمه کلیدی override رفتار رویداد را بازنویسی کنند.
  • sealed : رویداد را به عنوان مهروموم شده اعلام کرده و اجازه رونویسی نداریم. (برای کلاس های مشتق شده تعیین می کند که این رویداد، دیگر مجازی نیست).
  • abstract : کامپایلر بلوک های دستیابی کننده رویداد add و remove را تولید نمی کند، بنابراین کلاس مشتق شده باید پیاده سازی خودش را برای این دستیابی کننده ها ارائه کند.

یک رویداد ممکن است با کلمه کلیدی static به عنوان یک رویداد ایستا اعلان شود؛ این کار، رویداد را برای همیشه در دسترس فراخواننده گان قرار می دهد، حتی اگر هیچ نمونه ای از کلاس موجود نباشد.

یک رویداد می تواند به عنوان یک رویداد مجازی (virtual) علامتگذاری شود؛ که این امکان را به کلاس های مشتق شده می دهد تا رفتار رویداد را با استفاده از کلیدواژه override بازنویسی کنند. برای اطلاعات بیشتر "ارث بری (آموزش برنامه نویسی #C) را ببینید. رویدادی که رخداد مجازی را بازنویسی می کند، همچینی می تواند با sealed علامت گذاری شود؛ با این کار به کلاس های مشتق شده می گوییم که این رویداد دیگر مجازی نیست و نمی توان آنرا بازنویسی کرد. در پایان، یک رویداد می تواند بصورت abstract اعلان شود، که بدین معنی است که کامپایلر بلوک های دسترسی کننده ی رویداد add و remove را تولید نخواهد کرد. بنابراین کلاس های مشتق شده باید پیاده سازی خودشان را برای این بلوک ها ارائه دهند.

  • غلامعلی حسینی بهجانی
  • ۲
  • ۰

کلمه کلیدی in

با سلام!

مطلبی رو که امروز براتون آماده کردم. یه کم با مطالب قبلی تفاوت داره. احتمالا یه کم پیچیده تر.


ترمینولوژی:

Variant : چیزی که به چیزهای دیگر وابستگی دارد اما دقیقا مشابه نیست، گوناگون، متغیر

پیشوند Contra : ضد، مخالف، نقیض

پیشوند Co : با، باهم


برای پارامترهای نوع Generic (عام)، کلمه کلیدی in تعیین می کند که پارامتر آن نوع عام Contravariant است. شما می توانید از این کلمه کلیدی (in) در رابط های (Interface) عام و نماینده ها (delegate) استفاده کنید.

کنتراواریانس این توانایی رو به شما می دهد که از نوع کمتر مشتق شده (پایه ای تر، ریشه ای تر) نسبت به آن نوعی که پارامتر generic تعیین کرده استفاده کنید. که اجازه تبدیل ضمنی کلاس هایی که اینترفیس های گوناگون را پیاده سازی کرده اند را می دهد.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

کلیدواژه delegate

سلام!

امروز قصد دارم درمورد کلمه کلیدی delegate صحبت کنم.


تعریف وکیل (delegate) شبیه امضای متد است. یک مقدار برگشتی و هر تعداد پارامتر از هر نوع دارد:

public delegate void TestDelegate(string Message);

delegate یک نوع مرجع است که می تواند برای کپسوله کردن یک متد با نام یا بی نام استفاده شود. delegate ها شبیه اشاره گرها تابع در زبان برنامه نویسی ++c هستند.


نکات:

  • delegate ها زیربنای event ها هستند.
  • یک وکیل می تواند با انتسابش به یک متد با نام یا بی نام نمونه سازی شود.
  • یک نماینده حتما باید با یک متد یا عبارت لامبدا که دارای نوع خروجی و پارامترهای ورودی سازگار است نمونه سازی شود. برای استفاده وکیل با متد بی نام، delegate و کد منتسب به آن، باهم تعریف می شوند.

  • غلامعلی حسینی بهجانی