کلاسهای abstract یکی از ابزارهای مهم شی گرایی است .کلاسهایی که نمی توان از آنها متغیری ساخت . و بصورت کلی دارای ساختار زیر هستند .
Abstract class classname
{
بدنه کلاس
}
اما کلاس abstract چگونه است ؟
1-یک کلاس abstract شبیه یک کلاس معمولی است . متد ، فیلد و خصوصیت دارد با این تفاوت که نمی توانیم از آن نمونه سازی کنیم ، به عبارتی نمی توانیم متغیری از نوع کلاس abstract تعریف کرد .
2-یک کلاس abstract شبیه یک اینترفیس است ، اما با دیدی وسیعتر (مفصلا توضیح خواهم داد )
3 -یک کلاس abstract می تواند دارای متدهای abstract باشد که شبیه اینترفیس فقط اعلام می شوند و باید در زیر کلاسها بازنویسی شوند و جزییات آنها نوشته شود .
abstract class Location
{
public abstract Location(string name);
{
اگر دقت کنیم ، کلاس abstract حالتی بین کلاس معمولی و یک Interface است . که برای فهم کامل آن باید مقایسه ای با Interface انجام دهیم تا تفاوت این دو بیشتر برای ما مشخص شود .
1-یک کلاس معمولی فقط می تواند از یک کلاس abstract ارث بری کند . در حالی که همان کلاس معمولی می تواند از چندین Interface ارث بری کند ( وراثت چند گانه )
2-یک Interface فقط می تواند اعلان متدها و خصوصیتها را داشته باشد اما یک کلاس abstract علاوه بر انها می تواند متدها و خصوصیتهایی با کدهای کامل داشته باشد .
مثال :
abstract class Location
{
public Location(string name)
{
this.name = name;
}
public Location[] Exits;
private string name;
public string Name
{
get { return name; }
}
}
3-عناصر یعنی متدها و خصوصیتها و .. در کلاس abstract می توانند همانند یک کلاس معمولی دارای سطح دسترسی باشند . بر خلاف Interface
4-وقتی شما متدی را به کلاس abstract اضافه می کنید در صورتی که متد شما از نوع abstract نباشد ، اتوماتیک به تمام زیر کلاسها اعمال می شود ، اما در Interface اگر متدی اضافه کنید باید در تمام زیر کلاسها آن را اعمال کنید و جزییات آن را مشخص کنید .
5-کلاسهای abstract مانند یک کلاس معمولی می توانند فیلد و عناصر داشته باشند در حالی که Interface فاقد این خصوصیت است .
سلام مرسی ازین اطلاعاتی که اینجا در اختیار همه گذاشتین