اثر پروانه ای

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

اثر پروانه ای

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

اثر پروانه ای

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

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

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

۷۸ مطلب با کلمه‌ی کلیدی «کلیدواژه» ثبت شده است

  • ۱
  • ۰

کلمه کلیدی this

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

نکته

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


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

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

کلیدواژه throw

بیان throw برای ابلاغ اتفاق یک موقعیت غیرعادی (exception) در حین اجرای برنامه ، استفاده می شود.

ملاحظات

خطای پرتاب شده ، شیئی است که از کلاس System.Exception مشتق شده است. برای مثال:

class MyException : System.Exception {}
// ...
throw new MyException();

معمولا" بیان throw به همراه بیان های try-catch یا try-finally مورد استفاده قرار می گیرد.

public class ThrowTest2
{
    static int GetNumber(int index)
    {
       int[] nums = { 300, 600, 900 };
       if (index > nums.Length)
       {
           throw new IndexOutOfRangeException();
       }
       return nums[index];

    }
    static void Main() 
    {
       int result = GetNumber(3);
    }
}
    /*
        Output:
        The System.IndexOutOfRangeException exception occurs.
    */
  • غلامعلی حسینی بهجانی
  • ۱
  • ۱

کلمه کلیدی struct

نوع struct یک نوع مقداری است که بطور معمول برای کپسوله کردن گروهای کوچک از متغیرهای وابسته به هم مورد استفاده قرار می گیرد. برای مثال مختصات یک مستطیل یا مشخصات یک فقره کالا از صورت حساب. مثال زیر یک اعلان ساده struct را نشان می دهد:

public struct Book
{
    public decimal price;
    public string title;
    public string author;
}

ملاحظات

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

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

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

نوع string یک سری از کاراکترهای یونیکد شامل صفر یا بیش از صفر کاراکتر را نشان می دهد. string نام مستعاری برای نوع دات نتی String می باشد.

با اینکه string یک نوع مرجع است، عملگرهای تساوی (== و =!) برای مقایسه مقادیر اشیاء رشته ای (string) تعریف شده اند نه ارجاع ها. این کار آزمایش برابری رشته ها را قابل فهم تر می کند. برای مثال:

string a = "hello";
string b = "h";
// Append to contents of 'b'
b += "ello";
Console.WriteLine(a == b);
Console.WriteLine((object)a == (object)b);

مثال قبل True را نمایش داده سپس False به نمایش در می آید، زیرا محتویات رشته ها با هم برابرند، اما a و b به نمونه رشته یکسانی اشاره نمی کنند.

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

اصلاحگر static

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

مثال

کلاس زیر بصورت static اعلان شده و فقط حاوی متدهای static می باشد:

static class CompanyEmployee
{
    public static void DoSomething() { /*...*/ }
    public static void DoSomethingElse() { /*...*/  }
}

یک ثابت یا اعلان نوع بصورت ضمنی عضوی static است.

نمی توان از طریق یک نمونه (instance) به یک عضو ایستا رجوع کرد. در عوض ، می توان از طریق نام نوع به آن مراجعه کرد. برای مثال ، کلاس زیر را در نظر بگیرید:

public class MyBaseC
{
    public struct MyStruct
    {
        public static int x = 100;
    }
}

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

کلیدواژه stackalloc

در زمینه کدنویسی ناامن (unsafe code context) ، کلمه کلیدی stackalloc برای تخصیص یک بلوک حافظه در پشته (stack) بکار می رود.

int* fib = stackalloc int[100];

ملاحظات

مثال زیر سری فیبوناچی را که هر عدد حاصل جمع دو عدد قبل از خود در سری می باشد را تا 100 عدد ، تولید می کند . در کد زیر ، بلوکی از حافظه که اندازه آن برای نگهداری 100 عنصر از نوع int کافی است، در stack تخصیص داده شده نه در حافظه heap. آدرس این بلوک حافظه در اشاره گر fib ذخیره شده است (البته مثال زیر این کار را برای 20 عدد انجام می دهد که برای حفظ امانت عدد 100 را تغییر ندادم). این حافظه تحت تاثیر زباله جمع کن (Garbage Collector) قرار نمی گیرد و بنابراین مجبور نیستیم که با استفاده از کلمه کلیدی fixed ثابت شود. عمر این بلوک حافظه بستگی به عمر متدی دارد که این بلوک را تعریف کرده است. شما نمی توانید قبل از پایان متد این حافظه را آزاد کنید.

استفاده از stackalloc فقط در اعلان های متغیرهای محلی معتبر است.

امنیت

کد unsafe از امنیت کمتری نسبت به کد safe برخوردار است. هرچند استفاده از stackalloc بصورت اتوماتیک امکانات تشخیص تجاوز از بافر (buffer overrun detection) زبان زمان اجرای عمومی (CLR) را فعال می کند. اگر یک تجاوز بافر تشخیص داده شود، با بیشترین سرعت ممکن پردازش خاتمه پیدا می کند تا شانس اجرای کدهای مخرب به حداقل برسد.

مثال

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

کلیدواژه sizeof

در نوع های مدیریت نشده، برای بدست آوردن اندازه آن نوع بر حسب بایت استفاده می شود. نوع های مدیریت نشده شامل نوع های توکار (built-in) که در جدولی که بعدا" می آید لیست شده اند و همچنین نوع های زیر هستند:

  • نوع های شمارشی (Enum types)
  • نوع های اشاره گر (Pointer types)
  • ساختارهای کاربر-تعریف که حاوی هیچ فیلد یا پراپرتی نوع مرجع نباشد

مثال زیر چگونگی بدست آوردن اندازه یک نوع int را نشان می دهد:

// Constant value 4:
int intSize = sizeof(int); 

ملاحظات

از نسخه 2.0 سی شارپ به بعد، اعمال sizeof روی نوع های توکار ، دیگر نیازی به استفاده از شیوه unsafe ندارد.

عملگر sizeof را نمی توان overload کرد. مقدار برگشتی توسط عملگر sizeof از نوع int است. جدول زیر مقادیر ثابتی که جایگزین عبارت sizeof با عملوندهای ورودی از نوع های خاص را نشان می دهد:

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

کلیدواژه short

کلمه کلیدی short یک نوع داده ای صحیح معرفی می کند که مقادیر را طبق شرایط زیر ذخیره می کند.

  • نوع : short
  • محدوده : 32,768- تا 32,767
  • اندازه : صحیح علامتدار 16-بیتی
  • نوع دات نتی: System.Int16

لیترال ها

شما می توانید یک متغیر short را بصورت زیر اعلان و مقدار دهی اولیه کنید:

short x = 32767;

در اعلان قبل، لیترال صحیح 32767 بطور ضمنی از int به short تبدیل شده است. اگر لیترال صحیح در محل ذخیره سازی short جا نشود، یک خطای کامپایل رخ می دهد.

وقتی از متدهای overload شده استفاده می کنید، باید از یک عملگر قالبریز (cast) استفاده کنید. برای مثال متدهای overload شده زیر را که از پارامترهای int و short استفاده می کنند، در نظر بگیرید:

public static void SampleMethod(int i) {}
public static void SampleMethod(short s) {}

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

کلمه کلیدی 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"); }
}

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

کلمه کلیدی sbyte

کلمه کلیدی sbyte نشاندهنده یک نوع صحیح است که مقادیر را طبق شرایط زیر ذخیره می کند.

  • نوع: sbyte
  • محدوده: 128- تا 127
  • اندازه: صحیح علامت دار 8-بیتی
  • نوع دات نتی: System.SByte

لیترال ها

شما می توانید متغیرهای sbyte را بصورت زیر اعلان و مقداردهی اولیه کنید.

sbyte sByte1 = 127;

در اعلان بالا ، لیترال صحیح 127 بطور ضمنی از int به sbyte تبدیل شده است. اگر لیترال صحیح از محدوده sbyte تجاوز کند، یک خطای کامپایل رخ می دهد.

درهنگام استفاده از متد های overload شده باید از عملگر قالبریز (cast) استفاده شود. برای مثال، متدهای overload شده زیر را که از پارامترهای sbyte و int استفاده می کنند را در نظر بگیرید:

public static void SampleMethod(int i) {}
public static void SampleMethod(sbyte b) {}

استفاده از قالبریز sbyte تضمین می کند که نوع درست فراخوانی خواهد شد. برای مثال:

// Calling the method with the int parameter:
SampleMethod(5);
// Calling the method with the sbyte parameter:
SampleMethod((sbyte)5);

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