اثر پروانه ای

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

اثر پروانه ای

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

اثر پروانه ای

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

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

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

اصلاحگر new

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

برای مخفی کردن یک عضو ارثی، آن را در کلاس مشتق شده با یک نام یکسان اعلان کنید و آنرا با اصلاحگر new اصلاح کنید. برای مثال:

public class BaseC
{
    public int x;
    public void Invoke() { }
}
public class DerivedC : BaseC
{
    new public void Invoke() { }
}

در این مثال، BaseC.Invoke توسط DerivedC.Invoke مخفی است. مخفی سازی روی فیلد x مؤثر واقع نمی شود ، به این دلیل که با یک نام مشابه مخفی نشده است.

مخفی سازی نام از طریق وراثت به یکی از حالت های زیر است:

  • یک ثابت، فیلد، پراپرتی یا نوع که در یک کلاس یا ساختار (struct) معرفی شده، همه ی اعضای کلاس پایه را که نام یکسانی با آنها دارند را مخفی می کند.
  • یک متد که در یک کلاس یا ساختار معرفی شده، پراپرتی ها ، فیلدها و نوع های موجود در کلاس پایه را که نام یکسانی با آن متد داشته باشند ، مخفی می کند. این متد همچنین تمام متدهای کلاس پایه را که امضای مشابهی دارند را مخفی می کند.
  • یک شاخصگر (indexer) که در یک کلاس یا ساختار معرفی شده، همه indexer های موجود در کلاس پایه را که امضای مشابهی دارند را مخفی می کند.

استفاده همزمان new و override روی یک عضو، خطا محسوب می شود، زیرا این دو اصلاحگر بصورت متقابل معانی منحصربفردی دارند. اصلاحگر new یک عضو جدید با نام یکسان می سازد و باعث مخفی شدن عضو اصلی می شود. اصلاحگر override پیاده سازی یک عضو ارث بری شده را توسعه می دهد.

استفاده از اصلاحگر new در یک اعلان که عمل مخفی سازی یک عضو ارثی را انجام نمی دهد، تولید یک اخطار از سوی کامپایلر می کند.

مثال

در این مثال، یک کلاس پایه ای به نام BaseC و یک کلاس مشتق شده به نام DerivedC از یک فیلد یکسان به نام x استفاده می کنند که مقدار فیلد ارث بری شده را مخفی می کند. این مثال طرز استفاده اصلاحگر new را توضیح می دهد. همچنین چگونگی دسترسی به اعضای مخفی شده از کلاس پایه را با استفاده از نام کامل آنها (fully qualified name) ، را توضیح می دهد.

public class BaseC
{
    public static int x = 55;
    public static int y = 22;
}

public class DerivedC : BaseC
{
    // Hide field 'x'.
    new public static int x = 100;

    static void Main()
    {
        // Display the new value of x:
        Console.WriteLine(x);

        // Display the hidden value of x:
        Console.WriteLine(BaseC.x);

        // Display the unhidden member y:
        Console.WriteLine(y);
    }
}
/*
Output:
100
55
22
*/

در این مثال، یک کلاس تودرتو ، کلاسی که نام مشابهی در کلاس پایه دارد را مخفی می کند. این مثال چگونگی استفاده از اصلاحگر new برای رفع پیام اخطار و چگونگی دسترسی به اعضای مخفی کلاس با استفاده از نام کامل را نشان می دهد.

public class BaseC 
{
    public class NestedC 
    {
        public int x = 200;
        public int y;
    }
}

public class DerivedC : BaseC 
{
    // Nested type hiding the base type members.
    new public class NestedC   
    {
        public int x = 100;
        public int y; 
        public int z;
    }

    static void Main() 
    {
        // Creating an object from the overlapping class:
        NestedC c1  = new NestedC();

        // Creating an object from the hidden class:
        BaseC.NestedC c2 = new BaseC.NestedC();

        Console.WriteLine(c1.x);
        Console.WriteLine(c2.x);   
    }
}
/*
Output:
100
200
*/

اگر شما اصلاحگر new را حذف کنید، برنامه باز هم کامپایل شده و اجرا می شود، اما اخطار زیر را دریافت خواهید کرد:

The keyword new is required on 'MyDerivedC.x' because it hides inherited member 'MyBaseC.x'.az

نظرات (۰)

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

ارسال نظر

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