چطور باگ ها رو در 3 مرحله ساده مرتفع کنیم.
- کشف
- نزدیک شدن
- بالا بردن :) ، مرتفع کردن یا رفع کردن.
چطور باگ ها رو در 3 مرحله ساده مرتفع کنیم.
Event ها یک کلاس یا شیئ را قادر می سازند تا چیزهای مورد علاقه خود را به کلاس ها یا اشیاء دیگر اطلاع دهند. به کلاسی که رویداد را می فرستد ( یا برپا می کند) ناشر می گویند (publisher) و به کلاس هایی که رویداد را دریافت می کنند ( یا استعمال می کنند- handle) ، متعهد ( subscriber ) می گویند.
در یک فرم اپلیکیشن یا وب اپلیکیشن نمونه ی سی شارپ، شما متعهد رویدادهای برپا شده ی کنترل هایی مثل دکمه ها یا لیست باکس ها می شوید. شما می توانید از محیط توسعه یکپارچه (IDE) ویژوال سی شارپ برای مرور رویدادهایی که کنترل ها توانایی برپایی آنها را دارند استفاده کرده و آنهایی را که قصد استعمالشان دارید را انتخاب کنید. IDE بصورت خودکار یک متد خالی (بدون پیاده سازی) استعمال کننده رویداد و همچنین کدهایی برای متعهد شدن به آن رویداد را اضافه می کند.
بررسی رویدادها
رویدادها دارای خصوصیات زیر می باشند:
کلاس ها و ساختارها (Struct) دو تا از زیربناهای اساسی سیستم نوع عمومی (common type system) در دات نت فریم وورک می باشند. هرکدام دراصل یک ساختار داده است که یک مجموعه از داده ها و رفتارهایی که باهم در ارتباط هستند را تحت یک واحد منطقی کپسوله (یعنی در یک واحد مشترک قرار دادن) قرار می دهد. داده ها و رفتارها ، در واقع "اعضای" کلاس و struct هستند و شامل متدها، پراپرتی ها، رویدادها و غیره می شوند؛ که هر یک از این موارد شرح داده خواهند شد.
اعلان یک کلاس یا ساختار مانند یک طرح اولیه (بلوپرینت) است که برای ساختن نمونه ها یا اشیاء در زمان اجرا بکار می رود. اگر شما یک کلاس یا ساختار به نام Person تعریف کنید، Person نام آن نوع است. چندین نمونه از Person را می توان تولید کرد، و هر نمونه می تواند مقادیر مختلفی در پراپرتی ها و فیلدهایش داشته باشد.
کلاس یک نوع مرجع است. وقتی یک شیئ از نوع کلاس ساخته می شود، متغیری که شیئ به آن انتساب داده شده است، تنها یک ارجاع به حافظه را در خود نگهداری می کند. وقتی که ارجاع شیئ به یک متغیر دیگر انتساب داده می شود، متغیر جدید به شیئ اصلی اشاره می کند. تغییراتی که در یک متغیر ایجاد می شود در متغیر دیگر هم منعکس می شود زیرا آنها هردو به داده هایی مشابه اشاره دارند.
یک زبان برنامه نویسی که برای ساختن برنامه های سازمانی ای که روی دات نت فریم وورک اجرا می شوند، طراحی شده. #C که تکاملی از C و ++C است، شیئ گرا بوده و *type safe است. به این دلیل که بصورت کدمدیریت شده کامپایل شده، از مزایای سرویس های زبان عمومی زمان اجرا ، از جمله همکاری بین زبانی، امنیت و GC (زباله روب) بهره مند شده است.
*type safe : در علم کامپیوتر، به یک زبان برنامه نویسی type safe می گویند، هرگاه آن زبان رفتاری را برای هنگامی که برنامه نویس با یک مقدار بعنوان یک "نوع" که متعلق به آن مقدار نیست مواجه می شود را تعریف کند. ایمنی نوع مستلزم این است که برنامه ها هیچ رفتار تعیین نشده ای نداشته باشند (یعنی معناشناسی آنها کامل باشد). بطور معکوس، یک زبان برنامه نویسی unsafe (مثل C) از عملیاتی مثل دسترسی به مکان های دلخواه از حافظه، که در ضوابط معناشناسی آن زبان تعریف نشده، پشتیبانی می کند.
رهنمون using دو کاربرد دارد:
کلمه کلیدی using همچنین برای ساختن "بیان using" استفاده می شود که کمک می کند مطمئن شویم اشیاء IDisposable مانند فایل ها و فونت ها بدرستی مدیریت می شوند. برای اطلاعات بیشتر بیان using را ببینید.
کلمه کلیدی this به نمونه فعلی کلاس رجوع می کند و همچنین به عنوان اصلاحگر اولین پارامتر یک متد الحاقی (Extension Method) کاربرد دارد.
نکته
این تاپیک فقط کاربرد کلیدواژه this با نمونه های کلاس را توضیح می دهد. در مورد متدهای الحاقی بطور خلاصه باید بگویم که : متدهای الحاقی به شما این امکان را می دهند که متد ها را به نوع های موجود "اضافه" کنیم ، بدون اینکه یک نسخه مشتق شده جدید از آن نوع بسازیم ، بدون نیاز به کامپایل مجدد و یا حتی ویرایش نوع اصلی. متدهای الحاقی ، نوع خاصی از متدهای ایستا هستند، اما بگونه ای فراخوانی می شوند که انگار متد نمونه آن نوع الحاقی می باشند. برای کد نوشته شده در #C هیچ تفاوت آشکاری بین فراخوانی یک متد الحاقی و متدهایی که واقعا" در داخل نوع اعلان شده اند وجود ندارد. مشهورترین متدهای الحاقی ، عملگرهای پرس و جوی استاندارد LINQ می باشند که قابلیت های پرس و جو را به نوع های IEnumerable و <IEnumerable<T موجود اضافه می کنند. برای استفاده از عملگرهای پرس و جوی استاندارد، اول آنها را با استفاده از رهنمون using System.Linq به داخل حوزه (scope) بیاورید. از جمله متدهای الحاقی LINQ می توان به GroupBy ، OrderBy و Average اشاره کرد که پس اضافه کردن رهنمون فوق الذکر به نوع شمارشی IEnumerable اضافه می شوند.
موارد زیر کاربردهای معمول کلمه کلیدی this است:
نوع object یک نام مستعار برای Object (به حرف بزرگ O دقت کنید) در دات نت فریم وورک است. در سیستم یکپارچه نوع #C، همه نوع ها، چه از پیش تعریف شده و چه کاربر-تعریف، چه نوع های مرجع و چه نوع های مقداری، مستقیما" و یا غیر مستقیم از Object ارث بری می کنند. شما می توانید مقادیر از هر نوعی را به متغیرهای از نوع object انتساب دهید. وقتی یک متغیر از نوع مقداری به نوع object تبدیل می شود، به این عمل اصطلاحا" boxing (بسته بندی) می گویند. به تبدیل نوع object به نوع های مقداری ، اصطلاحا" unboxing می گویند.
مثال
نمونه زیر نشان می دهد که متغیر های از نوع object می توانند مقادیر را از هر نوعی قبول کنند. همچنین چگونگی استفاده متغیرهای از نوع object از متدهای Object از دات نت فریم وورک را نشان می دهد.
class ObjectTest { public int i = 10; } class MainClass2 { static void Main() { object a; a = 1; // an example of boxing Console.WriteLine(a); Console.WriteLine(a.GetType()); Console.WriteLine(a.ToString()); a = new ObjectTest(); ObjectTest classRef; classRef = (ObjectTest)a; Console.WriteLine(classRef.i); } } /* Output 1 System.Int32 1 * 10 */
کلمات کلیدی، شناسه هایی از پیش تعریف شده و رزرو شده هستند که معانی خاصی برای کامپایلر دارند. شما نمی توانید از این کلمات رزرو شده به عنوان شناسه (مثلا اسم کلاس یا متغیر) در برنامه تان استفاده کنید، مگر اینکه قبل از چنین شناسه هایی از پسوند @ استفاده کنید. برای مثال if@ یک شناسه معتبر است ولی if معتبر نیست ، زیرا if یک کلمه کلیدی است.
جدول اول در این تاپیک، لیست کلیدواژه هایی را که شناسه هایی رزرو شده در هر قسمتی از برنامه #C هستند را آورده است. جدول دوم در این مطلب شامل لیست کلیدواژه های زمینه ای (وابسته به قراین و شرایط خاصی که آن کلمه کلیدی در آن قرار گرفته است) در سی شارپ است. کلمات کلیدی زمینه ای فقط در یک زمینه (context) محدود از برنامه، معنای ویژه ای دارند و از این کلمات می توان در بیرون از آن زمینه به عنوان شناسه استفاده کرد. بطور کلی، اگر کلمات کلیدی جدیدی به زبان #C اضافه شود، برای اجتناب از خرابی نسخه های قبلی برنامه های نوشته شده، آن کلمات جدید به لیست کلیدواژه های زمینه ای اضافه خواهد شد.
جدول در ادامه مطلب...
در #C ، کلمه کلیدی new را می توان بصورت عملگر (operator) ، اصلاحگر (modifier) و یا یک قید (constraint) مورد استفاده قرار داد.
برای ساختن شیئ ها و احضار متد سازنده (Constructor) کلاس مربوطه استفاده می شود.
برای پنهان کردن یک عضو ارثی از اعضای یک کلاس پایه ای مورد استفاده قرار می گیرد.
برای محدود کردن نوع هایی که ممکن است به عنوان آرگومان هایی برای پارامتر نوع در اعلان جنریک (generic) مورد استفاده قرار گیرند، کاربرد دارد.
نوع delegate ، امضای یک متد را تعریف می کند. وقتی شما یک وکیل (delegate) را نمونه سازی می کنید، می توانید آنرا به هر متدی با امضای سازگار با آن وکیل ، پیوند دهید. شما می توانید آن متد را از طریق نمونه ی delegate احضار (فراخوانی) کنید.
وکیل ها برای پاس دادن متدها بصورت آرگومان ، به متد های دیگر استفاده می شوند. مدیریت کننده های رویداد، چیزی جز متدهایی که از طرق delegate ها احضار شده اند، نیستند. شما یک متد سفارشی می سازید و کلاسی مثل windows control می تواند متد شما را در هنگام اتفاق افتادن یک رویداد (event) خاص، فراخوانی کند. مثال زیر طرز اعلان یک وکیل را نشان می دهد:
public delegate int PerformCalculation(int x, int y);
هر متدی از هر کلاس یا ساختار قابل دسترس که با امضای وکیل (شامل نوع برگشتی و پارامترهای ورودی) مطابقت داشته باشد، می تواند به به وکیل انتساب داده شود. متد می تواند static یا یک متد نمونه (instance method) باشد. این کار باعث می شود که بتوانیم با برنامه نویسی، فراخوانی های متد را تغییر دهیم، و همچنین کد جدیدی را در یک کلاس موجود، وارد کنیم. تا وقتی که امضای وکیل را می دانید، می توانید متد خودتان را به آن انتساب دهید.