کلاس abstract

کلاسهای 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  فاقد این خصوصیت است .