کلاسهای انتزاعی (Abstract Class)
کلاسهای مجرد (abstract) کلاسهایی هستند که کلاس پایه سایر کلاسها هستند. این نوع کلاسها میتوانند مانند کلاسهای عادی دارای سازنده باشند. شما نمیتوانید از کلاسهای انتزاعی نمونه ایجاد کنید چون که هدف اصلی از به کار بردن کلاسهای انتزاعی استفاده از آنها به عنوان کلاس پایه برای کلاسهای مشتق است. برای تعریف یک کلاس انتزاعی از کلمه کلیدی abstract استفاده میشود. به مثال زیر در مورد استفاده از کلاسهای انتزاعی توجه کنید :
1: using System; 2: 3: public abstract class Base 4: { 5: protected int number; 6: protected string name; 7: 8: public abstract int Number 9: { 10: get; 11: set; 12: } 13: 14: public string Name 15: { 16: get { return name; } 17: set { name = value; } 18: } 19: 20: public abstract void ShowMessage(); 21: 22: public Base(int number, string name) 23: { 24: this.number = number; 25: this.name = name; 26: } 27: } 28: 29: public class Derived : Base 30: { 31: public override void ShowMessage() 32: { 33: Console.WriteLine("Hello World!"); 34: } 35: 36: public override int Number 37: { 38: get 39: { 40: return number; 41: } 42: set 43: { 44: number = value; 45: } 46: } 47: 48: public Derived(int number, string name) 49: : base(number, name) 50: { 51: } 52: }
در داخل کلاس انتزاعی دو فیلد محافظت شده (protected) تعریف کردهایم که توسط خواص (property) برنامه مورد استفاده قرار میگیرند. یکی از property ها را به صورت انتزاعی (abstract) تعریف کردهایم (خط 8). به این نکته توجه کنید که برای تعریف این خاصیت کلمه کلیدی abstract را به کار بردهایم.
این property باید به وسیله کلاسهایی که از این کلاس ارث میبرند override شود ولی از آن جاییکه به صورت abstract تعریف شده است قسمتهای set و get فاقد بدنه هستند. میبینید که کلاسهای abstract میتوانند شامل property های معمولی مانند property، Name مثال بالا باشند.
یک متد abstract تعریف میکنیم. همانطور که مشاهده میکنید کلاسهای abstract میتوانند شامل property های معمولی مانند خاصیت Name (خطوط 20-16) باشند. در کلاس مشتق نیز از کلمه کلیدی abstract استفاده شده و کلاس باید این متد را override کند (به صورت دیگر پیاده سازی کند (خط 33)). کلاسهای abstract حداقل باید یک عضو abstract داشته باشند.
یک کلاس دیگر تعریف میکنید که از کلاس Base ارث بری کند. سپس با استفاده از کلمه کلیدی override یک خاصیت abstract و همچنین یک متد را به صورت دیگر پیاده سازی میکنیم (override کنیم)(خطوط 33 تا 48). همچنین یک سازنده تعریف میکنیم و با استفاده از کلمه کلیدی Base مقادیر پارامترها را به سازنده پایه ارسال میکنیم. نمیتوان از یک کلاس abstract نمونه ایجاد کرد ولی از کلاسهایی که از این نوع کلاسها مشتق میشوند، میتوان نمونه ایجاد کرد.
برای پیاده سازی قوانین در سی شارپ از اینتفیس اسفاده میشه اما اینترفیس فقی میتونی پارامتر ها را در اون تعریف کرد اما نمیتوان متد را در اون تعریف کرد اما در این روز میتوان هم پارمتر تعریف کرد و و هم توابع و اگه هم بخواییم از توابع با ورودی های متفاوت استفاده کنیم میتونیم از کلمه ویرتیکال قبل از مقدار برگشتی تابع استفاده کرد و در فراخوانی توابع اون ها را تغییر داد کاربرد این روش بیشتر مربوط میشه به کار بر روی پروزه های که گروهی انجام میشه برای اینکه بتوان پروژه را قانون مند کرد و هر کسی نیاد برای خ.دش به پارامتر تعریف کنه و متد خودش را به کار ببره از این روش استفاده میشه و خیلی هم کاربردی هست و در اخر این یکی از بهترین روشهایی هست که میتونی از تکار کد ها جلوگیری کنی به عبارتی میتونی این عبارت را به واقعیت تبدیل کرد که میگه خودت را تکرار نکن موفق باشید
سلام
من هم با نظر پوریا موافقم کاش کمی توضیح می دادید کاربردش چیه
ممنون
در مجموعه کامل سی شارپ نه تنها این بلکه اکثر مطالب گفته شده کاربردشون هم توضیح داده شده.
این مورد هم داخل مجموعه با مثال های متعدد و مختلف توضیح داده شده
من خیلی متوجه نشدم که این مورد کجا ممکنه به درد بخوره.
نوشته هایی که با بیان یک نیاز شروع میشن، معمولا گیرایی بالاتری برای مخاطب دارن. به نظرم بهتره ابتدای هر عنوان آموزشی، یک مثال از جایی که اون مطلب کاربرد داره آورده بشه و در ادامه، توضیح داده بشه که چطور می تونیم این کار را انجام بدیم. البته ناگفته نمونه که دیدم خیلی از جاها از همین روش استفاده می کنید. نکته ای بود که به ذهنم رسید بگم تا کیفیت آموزش ها بالاتر بره.
خیلی خیلی متشکرم از زحمات تون