در قسمت ششم آموزش شی گرایی در ادامه مبحث وراثت در شی گرایی در آموزش پنجم آموزش ها و مثال هایی دررابطه با مفاهیم Sealed Classes (آخرین نود وراثت) , Polymorphism by Overloading (چندریختی با overloading) و Partial Classes(کلاس های جزیی) آورده شده.
اینگونه کلاس ها را بهتر است برای اخرین نودهای وراثت تعیین شود در واقع این گونه کلاسها به صورت بسته هستند و هیچگونه ارث بری نمیتوانید از این کلاس ها بکنید. برای مشخص کردن این گونه کلاس ها نیز تنها کافیست عبارت sealed را قبل از نام Class قرار داد و بدنه آنرا پیاده سازی کرد و خواهید دید که هیچگونه ارث بری نمیتوان انجام داد و در صورت اینکار با خطا مواجه خواهید شد
مثال زیر کلاس SampleClasses را به صورت Sealed تعریف کرده
sealed class SampleClass { public void Test() { Console.WriteLine("Seald classes"); } }
حال به هیچ عنوان نمیتوان دستوری مانند زیر داشت
class Test2:SampleClass { }
*از ویژگی sealed میتوان برای عناصر درون کلاس مانند متدها نیز استفاده میشود. در این صورت اگر مثلا متدی درون یک کلاس sealed شود و کلاس دیگری از این کلاس ارث بری کند کلاس وارث نمیتواند از متد sealed کلاس پدر استفاده کند.
چندریختی بدین معنی است که برای مثال یک متد به چندین شکل و روش مختلف خروجی بدهد حال یکی از روش ها برای انجام چند ریختی استفاده از Overloading میباشد.
در آموزش قبل در مبحث سازنده ها ما عمل Overloading را به وسیله سازنده ها انجام دادیم حال اگر بخواهیم مثال دیگری در این رابطه بزنیم میتوانیم جمع را به چندین صورت مختلف انجام دهیم به صورت زیر
public int sum(int x, int y) { if (y == 0) { y = 10; return x + y; } else return x + y; } public int sum(int x) { return sum(x , 0); } public double sum(double x, double y) { return x + y; } }
مثال فوق همانگونه که مشخص است از چندریختی استفاده شده بدین صورت که تابع sum را ۳بار تکرار کرده ایم البته باید به این نکته توجه داشت که برای استفاده از خاصیت چند ریختی توابع حتما باید نوع یا تعداد پارامترهای توابع با هم تفاوت داشته باشد تا بتوانیم چندین تابع هم نام ایجاد کنیم پس کافیست که یا تعداد پارامترها یا نوعشان را متمایز در نظر بگیریم دقیقا همین قانونی که د مثال فوق ما رعایت کرده ایم همانگونه که میبینید یکی از توابع دو متغیر از نوع int و دیگری نیز دو متغیر از نوع double دارد پس چون نوع پارامترها متفاوت است مشکلی وجود نخواهد داشت و همچنین تابع دیگری که تنها یک پارامتر دارد که قانون تعداد را رعایت کرده.
حال در main برنامه یک شی از این کلاس ایجاد کرده و میتوان overloading را دید مانند زیر
همانگونه که مشاهده میکنید زمانی که نام تابع را نوشتیم لیستی نمایش داده میشود که مشخص میکند سه overloading برای این تابع تعیین شده که میتوان با فلش مضخصات هرکدام را نیز مشاهده کرد.
اینگونه کلاس ها کلاس های جزیی میباشند درواقع زمانی از اینگونه کلاس ها استفاده میکنیم که میخواهیم یک کلاس سنگین با تعداد زیادی متد و پروپرتی و … خب مسلما کار غیر معقول این است که یک فایل کلاس بسییار حجیم ایجاد کنیم که طبیعتا در آینده قطعا هنگام کار با کلاس برای مثال تغییر دادن قسمتی از آن با مشکل مواجه خواهیم شد.
برای جلوگیری از این مشکل از کلاس های partial استفاده میکنیم بدین معنی که قسمتهای مختلف کلاس را میتوان جداجدا در فایل های کلاس جدا قرار داد اما در انتها همه آنها مربوط به یک کلاس باشند و عملکرد یک کلاس را داشته باشند.
برای مشخص کردن کلاس partial تنها کافیست به هر تعداد فایل کلاس با نام های مختلف و دلخواه ایجاد کنید سپس درون پنجره کدنویسی نام کلاس هارا یکی کنید و عبارت partial را قبل از class تایپ کنید مانند زیر
در تصویر فوق همانگونه که مشخص است نام فایل کلاس Test_1(نام فایلها نمیتوانند مشابه باشند پس تنها درن کدنویسی نام کلاس را تغییر میدهیم که البته اینکار هم غیر مجاز است و تنها زمانی مجاز میشود که عبارت partial را نیز ذکر کرده باشید) میباشد اما درون پنجره کدنویسی نام کلاس به Testt تغییر کرده که این نام باید برای تمام فایل هایی که میخواهیم تبدیل به یک فایل شود یکی باشد. همانگونه که مشاهده میکنید فایلTest_1 برای فیلدها قرار داده شده.
تصویر زیر نیز فایل Test_2 میباشد که برای متدها در نظر گرفته شده
همانگونه که مشاهده میکنید نام این کلاس هم به Testt تغییر کرده اما نام فایل متفاوت از بقیه فایلها میباشد.
تصویر زیر نیز مربوط به کلاسی است که برای پروپرتی ها در نظر گرفته شده
حال اگر درون قسمت main برنامه شی از نوع کلاس Testt(توجه کنید که شی از نوع نام کلاسی تعریف میشود که برای همه کلاس ها یکی تعیین شده)ایجاد کنیم میتوانیم به تمام عناصری که در هر سه کلاس مشخص شده دسترسی پیدا کنیم. به صورت زیر