کلاسهای مختلف ممکن است یک اینترفیس را به صورت مشترک پیاده سازی کنند و این در توسعه نرم افزار، رایج است. چیز دیگری که نیز رایج است این است که یک متد از اینترفیس، میتواند پیاده سازیهای یکسانی در کلاسهای مورد نظر داشته باشند. این میتواند نشان از این باشد که ما داریم مرتکب کار اشتباهی میشویم. چرا که ما نمیخواهیم کد را در کلاسهایمان تکرار کنیم، بلکه میخواهیم از یک پیاده سازی، استفاده مجدد داشته باشیم.
برای حل این مشکل، ما میتوانیم این پیاده سازی مشترک را داخل یک کلاس پایه بگنجانیم و سپس کلاسهای مورد نظرمان، این کلاس پایه را پیاده سازی کنند و سپس کلاس پایه، یک اینترفیس را پیاده سازی کند. این، مشکل ما را حل خواهد کرد، اما یک راه حل کامل به حساب نمی آید.
چرا؟
مشکل اینجاست که حالا ما میتوانیم یک نمونه از این کلاس پایه که چیزی غیر از پیاده سازی مشترک متد (یا متدها) را در خود قرار نمیدهد ایجاد کنیم. این اصلا منطقی نیست. یک کلاس که فقط شامل پیاده سازی مشترک است فقط باید یک هدف داشته باشد و آن هم این است که از آن فقط ارث بری شود.
به این دلیل است که در این مقاله، ما میخواهیم در مورد کلاسهای abstract صحبت کنیم.
این مقاله، سرفصلی از دوره آموزشی زیر میباشد:
- کلاسها و سازنده ها
- ویژگیها
- constant ،Static member ها و Extension Method ها
- Anonymous Type ها و Nullabel Type ها
- ساختارها
- شمارنده ها
- وراثت
- Interface ها
- کلاسهای Abstract
- Generic ها
- Queue, Stack, Hashtable
- Generic List و Dictionary
- Delegate ها
اگر می خواهید محتویات کامل این دوره را ببینید ، می توانید بر روی لینک سطح متوسطه #C کلیک کنید.
برای دانلود سورس، روی لینک سورس کلاسهای abstract در #C کلیک کنید.
ما این مقاله را به قسمتهای زیر تقسیم میکنیم:
ایجاد کلاسهای Abstract
برای ایجاد یک کلاس abstract، ما از کلمه abstract استفاده میکنیم. تنها هدف کلاس abstract این است که از آن ارث بری شود و نمیتواند نمونه سازی شود:
یک کلاس abstract شامل متدهای abstract است. یک متد abstract شامل پیاده سازی نیست، فقط شامل یک تعریف با کلمه abstract میباشد:
1 |
public abstract void Print(string text); |
برای پیاده سازی یک متد abstract در کلاسی که از یک کلاس abstract مشتق میشود باید از کلمه override استفاده کنیم:
1 2 3 4 |
public override void Print() { //method implementation } |
همانطور که که در تصویر قبل دیدیم، یک کلاس abstract نیاز به هیچ عضو abstract ندارد، بلکه مهمترین چیز این است که اگر یک کلاس، حداقل یک عضو abstract داشته باشد، در اینصورت، آن کلاس باید حتما یک کلاس abstract باشد. در غیر اینصورت، کامپایلر یک خطا گزارش میدهد:
کلاسهای Sealed
اگر ما بخواهیم مانع این شویم که از کلاس ما ارث بری شود، باید از کلمه sealed استفاده کنیم. اگر کسی بخواهد از کلاس sealed به عنوان یک کلاس پایه استفاده کند، کامپایلر یک خطا گزارش میدهد:
نتیجه گیری
در این مقاله، ما یاد گرفتیم که:
- چطور یک کلاس abstract ایجاد کنیم
- چطور اعضای abstract را استفاده کنیم و آنها را پیاده سازی کنیم
- یک کلاس sealed چیست و هدفش چه چیزی است
در مقاله بعدی، ما در مورد Generic ها در #C صحبت میکنیم.