آموزش سی شارپ - قسمت بیست و هفتم
کلاس های Abstract در سي شارپ
قبلا در مورد Inheritance و ارث بری در سی شارپ صحبت کردم. گفتیم که در سی شارپ شما می توانید از یک کلاس به ارث برید و در صورت نیاز رفتارهای آن را override یا hide نمائید. فرض کنید که در طراحی نرم افزار پرسنلی شرکت دارید. در این سازمان دو نوع کارمند وجود دارد. کارمند ساعتی و کارمند حقوق بگیر ماهیانه. کارمندان را چگونه طراحی می کنید؟
به نظر من می توانید یک کلاس به نام Employee ایجاد کنید و اطلاعات مشترک بین هر دو نوع کارمند را در این کلاس ایجاد کنین. من در این کلاس اطلاعات نام , نام خانوادگی, سن, کد کارمندی , حقوق و یک متد برای پرداخت حقوق ایجاد کردم. سپس دو کلاس MonthlyEmployee و HourlyEmployee را از کلاس Employee به ارث بردم. نکته ای که وجود دارد این است که در کلاس Employee به وجود Salary و PrintSalary نیاز دارم اما نمی دانم که برای موجودیتی به نام کارمند که در واقع وجود خارجی ندارد(چون در سازمان من همه کارمندان یا ساعتی هستند یا حقوق بگیر و شیء از جنس کارمند محض وجود ندارد) و اینکه من نمی دانم که حقوق این نوع کارمند چگونه پرداخت و محاسبه می شود و در واقع حقوق برای کارمند محض معنی ندارد و من صرفا این خاصیت و متد را برای override کردن در کلاس های فرزند ایجاد کرده ام.
در چنین مواردی شما می توانید متد ها و property هایی که در کلاس پایه تان امکان پیاده سازیشان وجود ندارد را به صورت abstract تعریف کنین. در واقع با این کار به کامپایلر سی شارپ می فهمانید که این خاصیت یا متد صرفا به جهت override شدن در کلاس های فزرند ایجاد شده است. برای اینکه یک عضو abstract تعریف کنین باید کلمه abstract را در تعریف آن آورده و بدنه آن متد یا Property را حذف نمائید:

دقت فرمائید که وقتی یک کلاس دارای عضو abstract باشد آن کلاس نیز باید abstract شود.

خصوصیات کلاس های abstract:
ادامه دارد...
به نظر من می توانید یک کلاس به نام Employee ایجاد کنید و اطلاعات مشترک بین هر دو نوع کارمند را در این کلاس ایجاد کنین. من در این کلاس اطلاعات نام , نام خانوادگی, سن, کد کارمندی , حقوق و یک متد برای پرداخت حقوق ایجاد کردم. سپس دو کلاس MonthlyEmployee و HourlyEmployee را از کلاس Employee به ارث بردم. نکته ای که وجود دارد این است که در کلاس Employee به وجود Salary و PrintSalary نیاز دارم اما نمی دانم که برای موجودیتی به نام کارمند که در واقع وجود خارجی ندارد(چون در سازمان من همه کارمندان یا ساعتی هستند یا حقوق بگیر و شیء از جنس کارمند محض وجود ندارد) و اینکه من نمی دانم که حقوق این نوع کارمند چگونه پرداخت و محاسبه می شود و در واقع حقوق برای کارمند محض معنی ندارد و من صرفا این خاصیت و متد را برای override کردن در کلاس های فرزند ایجاد کرده ام.
در چنین مواردی شما می توانید متد ها و property هایی که در کلاس پایه تان امکان پیاده سازیشان وجود ندارد را به صورت abstract تعریف کنین. در واقع با این کار به کامپایلر سی شارپ می فهمانید که این خاصیت یا متد صرفا به جهت override شدن در کلاس های فزرند ایجاد شده است. برای اینکه یک عضو abstract تعریف کنین باید کلمه abstract را در تعریف آن آورده و بدنه آن متد یا Property را حذف نمائید:


خصوصیات کلاس های abstract:
- وقتی کلاسی دارای یک عضو abstract باشد آن کلاس هم باید abstract شود.
- وقتی یک کلاس به صورت abstract ایجاد شد از آن کلاس نمی توان شیء جدید ساخت.
- وقتی از یک کلاس abstract به ارث می روید باید عضو های انتزاعی (abstract members) آن را override کنید.
- کلمه abstract برای یک عضو (Member) کارایی کلمه virtual را نیز داراست.
- وقتی از یک کلاس abstract به ارث می روید در صورتیکه حتی یکی از عضوهای abstract آن را override نکنید آن کلاس هم باید abstract شود.
- اگر از یک کلاس که یک کلاس abstract را پیاده سازی کرده به ارث برویم می توانیم دوباره اعضاء abstract آن را override کنیم.
- abstract کلاس ها می توانند دارای constructor باشند.
ادامه دارد...
+ نوشته شده در شنبه هشتم تیر ۱۳۸۷ ساعت 9:44 توسط مسعود طباطبايي | MasoudTB
|