اثر پروانه ای

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

اثر پروانه ای

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

اثر پروانه ای

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

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

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

بیان using

یک املاء (syntax) راحت که درستی استفاده از اشیاء IDisposable را تضمین میکند را ارائه می دهد.

مثال

مثال زیر چگونگی استفاده از بیان using را نشان می دهد.

using (Font font1 = new Font("Arial", 10.0f)) 
{
    byte charset = font1.GdiCharSet;
}

ملاحظات

File و Font نمونه هایی از نوع های مدیریت شده (managed) هستند که منابع مدیریت نشده (unmanaged) را دستیابی می کنند (در این مورد دستگیره های فایل و زمینه ها دستگاه (دستگاهی که قرار است فونت در آنجا به نمایش در بیاید)) انواع گوناگون دیگری از منابع مدیریت نشده و نوع های کتابخانه کلاسی که آنها را کپسوله می کنند وجود دارد. همه ی چنین نوع هایی باید رابط IDisposable را پیاده سازی کنند.

به عنوان یک قانون، وقتی شما از یک شیئ IDisposable استفاده می کنید، می بایست آنرا در یم بیان using اعلان و نمونه سازی کنید. بیان using متد Dispose آن شیئ را به روشی درست فراخوانی می کند و (وقتی شما از آن به روشی که خواهد آمد استفاده می کنید) همچنین باعث می شود که شیئ به مجرد اینکه Dispose فراخوانی شد، خودش را از حوزه بیرون برود. در داخل بلوک using، آن شیئ فقط-خواندنی است و نمی توان آنرا ویرایش یا انتساب مجدد کرد.

بیان using تضمین می کند که متد Dispose فراخوانی می شود، حتی اگر در هنگام فراخوانی متدهای آن شیئ خطایی رخ دهد. شما می توانید با قرار دادن شیئ در داخل بلوک try و سپس فراخوانی Dispose در یک بلوک finally ، نتیجه مشابهی بدست آورید؛ در حقیقت این همان چگونگی ترجمه بیان using توسط کامپایلر است. کد مثال بعدی در زمان کامپایل به کد زیر بسط داده می شود ( برای ساختن حوزه ای محدود برای شیئ ، به آکولاد ها توجه کنید):

{
  Font font1 = new Font("Arial", 10.0f);
  try
  {
    byte charset = font1.GdiCharSet;
  }
  finally
  {
    if (font1 != null)
      ((IDisposable)font1).Dispose();
  }
}

 می توان چندین شیئ را در بیان using استفاده کرد، اما آنها باید در داخل بیان using اعلان شوند، مانند مثال زیر:

using (Font font3 = new Font("Arial", 10.0f),
            font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}

شما می توانید شیئ منبع را نمونه سازی کرده سپس متغیر مربوطه را به بیان using پاس دهید، اما این کار تمرین خوبی نیست. با این کار بعد از اینکه کنترل (روند اجرا) از بلوک using خارج شد، شیئ در حوزه (scope) باقی می ماند ولو اینکه احتمالا" دیگر به منابع مدیریت نشده اش دسترسی نخواهد داشت. به بیانی دیگر، دیگر کاملا مقداردهی اولیه نمی شود. اگر شما سعی کنید از بیرون بلوک using به شیئ دسترسی پیدا کنید، با ریسک پرتاب شدن یک استثناء مواجه می شود. به همین دلیل عموما" بهتر است که شیئ را در داخل بیان using نمونه سازی کنید و حوزه آن را به بلوک using محدود کنید.

Font font2 = new Font("Arial", 10.0f);
using (font2) // not recommended
{
    // use font2
}
// font2 is still in scope
// but the method call throws an exception
float f = font2.GetHeight();

نظرات (۰)

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

ارسال نظر

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