اثر پروانه ای

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

اثر پروانه ای

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

اثر پروانه ای

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

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

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

۹ مطلب با کلمه‌ی کلیدی «access level» ثبت شده است

  • ۱
  • ۰

کلمه کلیدی this

کلمه کلیدی this به نمونه فعلی کلاس رجوع می کند و همچنین به عنوان اصلاحگر اولین پارامتر یک متد الحاقی (Extension Method) کاربرد دارد.

نکته

این تاپیک فقط کاربرد کلیدواژه this با نمونه های کلاس را توضیح می دهد. در مورد متدهای الحاقی بطور خلاصه باید بگویم که : متدهای الحاقی به شما این امکان را می دهند که متد ها را به نوع های موجود "اضافه" کنیم ، بدون اینکه یک نسخه مشتق شده جدید از آن نوع بسازیم ، بدون نیاز به کامپایل مجدد و یا حتی ویرایش نوع اصلی. متدهای الحاقی ، نوع خاصی از متدهای ایستا هستند، اما بگونه ای فراخوانی می شوند که انگار متد نمونه آن نوع الحاقی می باشند. برای کد نوشته شده در #C هیچ تفاوت آشکاری بین فراخوانی یک متد الحاقی و متدهایی که واقعا" در داخل نوع اعلان شده اند وجود ندارد. مشهورترین متدهای الحاقی ، عملگرهای پرس و جوی استاندارد LINQ می باشند که قابلیت های پرس و جو را به نوع های IEnumerable و <IEnumerable<T موجود اضافه می کنند. برای استفاده از عملگرهای پرس و جوی استاندارد، اول آنها را با استفاده از رهنمون using System.Linq به داخل حوزه (scope) بیاورید. از جمله متدهای الحاقی LINQ می توان به GroupBy ، OrderBy و Average اشاره کرد که پس اضافه کردن رهنمون فوق الذکر به نوع شمارشی IEnumerable اضافه می شوند.


موارد زیر کاربردهای معمول کلمه کلیدی this است:

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

کلمه کلیدی sealed

اصلاحگر sealed وقتی به یک کلاس اعمال می شود، از ارث بری کلاس های دیگر از این کلاس جلوگیری می کند. در مثال زیر کلاس B از کلاس A ارث بری می کند، اما هیچ کلاسی نمی تواند از کلاس B ارث بری کند.

class A {}    
sealed class B : A {}

شما همچنین می توانید از اصلاحگر sealed روی پراپرتی یا متدی که یک پراپرتی یا متد مجازی (virtual) را در کلاس پایه رونویسی (override) می کند، استفاده کنید. این کار به شما این امکان را می دهد که به کلاس ها اجازه دهید که از کلاس شما ارث بری کنند و از override کردن برخی متدها یا پراپرتی ها جلوگیری به عمل آورید.

مثال

در مثال زیر ، Z از Y ارث می برد اما Z نمی تواند تابع مجازی F را که در X اعلان شده و در Y مهروموم (sealed) شده را رونویسی (override) کند.

class X
{
    protected virtual void F() { Console.WriteLine("X.F"); }
    protected virtual void F2() { Console.WriteLine("X.F2"); }
}
class Y : X
{
        sealed protected override void F() { Console.WriteLine("Y.F"); }
        protected override void F2() { Console.WriteLine("X.F3");}
}
class Z : Y
{
    // Attempting to override F causes compiler error CS0239.
    // protected override void F() { Console.WriteLine("C.F"); }

    // Overriding F2 is allowed.
    protected override void F2() { Console.WriteLine("Z.F2"); }
}

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

کلمه کلیدی public

کلمه کلیدی public یک اصلاحگر سطح دسترسی برای نوع ها و اعضای نوع است. دسترسی public بیشترین سطح دسترسی مجاز است. هیچ محدودیتی در دستیابی به اعضای public (عمومی) وجود ندارد. مانند مثال:

class SampleClass
{
    public int x; // No access restrictions.
}

مثال

در مثال زیر، دو کلاس با نامهای PointTest و MainClass اعلان شده اند. اعضای عمومی x و y از کلاس PointTest مستقیما" توسط MainClass دستیابی می شوند.

class PointTest
{
    public int x; 
    public int y;
}

class MainClass4
{
    static void Main() 
    {
        PointTest p = new PointTest();
        // Direct access to public members:
        p.x = 10;
        p.y = 15;
        Console.WriteLine("x = {0}, y = {1}", p.x, p.y); 
    }
}
// Output: x = 10, y = 15

اگر سطح دسترسی public را به private یا protected تغییر دهید، پیغام خطای زیر را دریافت خواهید کرد:

'PointTest.y' is inaccessible due to its protection level.

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

کلیدواژه protected

کلمه کلیدی protected یک اصلاحگر سطح دسترسی عضو است. یک عضو protected از داخل کلاسش و توسط کلاس هایی که از این کلاس ارث بری می کنند قابل دسترسی است.

مثال

یک عضو protected از یک کلاس فقط زمانی از طریق کلاس های مشتق شده قابل دسترسی است که آن دسترسی از از طریق کلاس مشتق شده اتفاق بیافتد. برای مثال، قطعه کد زیر را در نظر بگیرید:

class A
{
    protected int x = 123;
}

class B : A
{
    static void Main()
    {
        A a = new A();
        B b = new B();

        // Error CS1540, because x can only be accessed by
        // classes derived from A.
        // a.x = 10; 

        // OK, because this class derives from A.
        b.x = 10;
    }
}

قسمت a.x=10 یک خطا تولید می کند زیرا این انتساب در داخل متد ایستای Main صورت گرفته که نمونه ای از کلاس B نیست.

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

کلمه کلیدی private

کلمه کلیدی private (خصوصی) یک اصلاحگر دسترسی عضو است. دسترسی private کمترین سطح دسترسی مجاز است. اعضای private فقط از داخل بدنه کلاس یا ساختاری که در آن اعلان شده اند در دسترس هستند. مانند مثال زیر:

class Employee
{
    private int i;
    double d;   // private access by default
}

نوع های تودرتوی داخل یک بدنه یکسان هم می توانند به آن اعضای خصوصی دسترسی داشته باشند.

مثال

در این مثال، کلاس Employee حاوی دو عضو داده ای خصوصی به نام های name و salary است. این اعضا به عنوان اعضای خصوصی، قابل دسترسی نیستند بجز توسط متد های عضو (member method). متدهای عمومی (public) به نام های GetName و Salary ، برای دسترسی کنترل شده به اعضای خصوصی ، اضافه شده اند. عضو name از طریق یک متد public دسترسی شده است و عضو salary از طریق یک پراپرتی عمومی فقط خواندنی ، دسترسی شده است.

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

اصلاحگر override

اصلاحگر override برای گسترش یا اصلاح پیاده سازی یک متد، پراپرتی، شاخصگر (indexer) یا رویداد ارث بری شده، لازم است.

مثال

در این مثال، کلاس Square باید یک پیاده سازی بازنویسی شده(override) از Area ارائه دهد، زیرا Area از کلاس چکیده ShapesClass ارث بری شده است:

abstract class ShapesClass
{
    abstract public int Area();
}
class Square : ShapesClass
{
    int side = 0;

    public Square(int n)
    {
        side = n;
    }
    // Area method is required to avoid
    // a compile-time error.
    public override int Area()
    {
        return side * side;
    }

    static void Main() 
    {
        Square sq = new Square(12);
        Console.WriteLine("Area of the square = {0}", sq.Area());
    }

    interface I
    {
        void M();
    }
    abstract class C : I
    {
        public abstract void M();
    }

}
// Output: Area of the square = 144

یک متد override یک پیاده سازی جدید از عضوی که از یک کلاس پایه ارث بری شده ارائه می دهد. متدی که با اعلان override بازنویسی شده به عنوان متد پایه ای بازنویسی شده شناخته می شود. متد پایه ای بازنویسی شده، باید نسبت به متد override امضای یکسانی داشته باشد.

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

اصلاحگر 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 مؤثر واقع نمی شود ، به این دلیل که با یک نام مشابه مخفی نشده است.

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

کلیدواژه namespace

کلیدواژه namespace برای اعلان حوزه (scope) استفاده می شود. این حوزه فضای نام به شما اجازه می دهد که کدتان را سازماندهی کنید و راهی برای ساختن نوع های منحصر بفرد را ارائه می دهد.

namespace SampleNamespace
{
    class SampleClass { }

    interface SampleInterface { }

    struct SampleStruct { }

    enum SampleEnum { a, b }

    delegate void SampleDelegate(int i);

    namespace SampleNamespace.Nested
    {
        class SampleClass2 { }
    }
}

ملاحضات

شما می توانید یک یا بیش از یکی از موارد زیر را در داخل یک namespace اعلان کنید:

  • یک namespace دیگر
  • class
  • interface (رابط)
  • struct (ساختار)
  • enum (نوع شمارشی)
  • delegate (وکیل/نماینده)

در هرصورت چه صریحا" در فایل کد منبع (Source file) سی شارپ ، namespace را اعلان کنید و چه اینکار را انجام ندهید، کامپایلر یک namespace اضافه می کند. در بعضی مواقع به عنوان فضای نامی سراسری به این namespace بی نام، رجوع می شود که در همه فایل ها موجود است. هر شناسه ای که در فضای نامی سراسری وجود دارد، برای استفاده در یک namespace نامدار قابل دسترسی است.

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

کلیدواژه class

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

class TestClass
{
    // Methods, properties, fields, events, delegates 
    // and nested classes go here.
}

ملاحظات

بر خلاف ++C ، در #C فقط یک ارث بری مجاز است. به بیانی دیگر، پیاده سازی یک کلاس فقط می تواند از یک کلاس پایه ای ، ارث بری شود. هرچند، یک کلاس می تواند بیش از یک رابط (interface) را پیاده سازی (implement) کند. جدول زیر مثال هایی از ارث بری کلاس و پیاده سازی رابط را نشان می دهد.

ارث بری مثال
بدون ارث بری
class ClassA { }
ارث بری یگانه
class DerivedClass: BaseClass { }
بدون ارث بری، پیاده سازی دو رابط
class ImplClass: IFace1, IFace2 { }
ارث بری یگانه، پیاده سازی یک رابط
class ImplDerivedClass: BaseClass, IFace1 { }

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