zkazemi
شنبه 17 مرداد 1388, 09:08 صبح
وراثت
در برنامهنويسي, منظور از وراثت, رابطه ميان کلاسهاست. دو نوع کلاس وجود دارد: کلاس پايه و کلاس مشتق شده.
يک کلاس مشتق شده, از کلاس پايه ارث ميبرد. هر کلاس مي تواند حداکثر از يک کلاس ارث ببرد. توجه کنيد که هرگز نميتوانيد صريحاً مشخص کنيد که آيا وراثت, از نوع public, private, و يا protected است. وراثت در C# همواره به طور ضمني public ميباشد. بخاطر داشته باشيد که کلاس System.Object کلاس ريشه براي تمام کلاسهاست و به عبارت ديگر تمام کلاسها به طور ضمني از اين کلاس ارث ميبرند. چنانچه يک کلاس را به صورت زير تعريف کنيد:
class Token
{
public Token (string name)
{
…
}
…
}
کامپايلر کد مذکور را به شکل زير تبديل ميکند (البته خودتان نيز در صورت تمايل ميتوانستيد کد مذکور را به اين شکل بنويسيد):
class Token: system.object
{
public Token (string name)
{
…
}
…
}
فراخواني سازندههاي کلاس پايه
سازنده کلاس مشتق شده بايد سازنده کلاس پايه خود را فرابخواند. براي اين کار بايد از کلمه کليدي base استفاده کنيد. هر کلاس حداکثر داراي يک کلاس پايه است:
Class IdentifierToken: Token
{
public IdentifierToken (string name): base (name)
{
…
}
…
}
چنانچه سازنده کلاس پايه را به طور صريح در سازنده کلاس مشتق شده فراخواني نکنيد, کامپايلر سعي ميکند سازنده پيش فرض کلاس پايه را در کلاس مشتق شده فراخواني کند. کامپايلر, کد زير را:
class Token
{
public Token (string name)
{
…
}
…
}
به شکل زير, مينويسد:
Class Token: System.Object
{
public Token (string name): base ()
{
…
}
…
}
اين کد کار ميکند زيرا System.Object يک سازنده پيش فرض و public دارد. البته همه کلاسها يک سازنده پيش فرض و public ندارند که در اين صورت چنانچه سازنده کلاس پايه را فراخواني نکنيد, با يک خطاي زمان کامپايل مواجه خواهيد شد. به عنوان مثال:
Class IdentifierToken: Token
{
public IdentifierToken (string name)
//error. base class Token does not have
// a public default constructor
{
…
}
…
}
در برنامهنويسي, منظور از وراثت, رابطه ميان کلاسهاست. دو نوع کلاس وجود دارد: کلاس پايه و کلاس مشتق شده.
يک کلاس مشتق شده, از کلاس پايه ارث ميبرد. هر کلاس مي تواند حداکثر از يک کلاس ارث ببرد. توجه کنيد که هرگز نميتوانيد صريحاً مشخص کنيد که آيا وراثت, از نوع public, private, و يا protected است. وراثت در C# همواره به طور ضمني public ميباشد. بخاطر داشته باشيد که کلاس System.Object کلاس ريشه براي تمام کلاسهاست و به عبارت ديگر تمام کلاسها به طور ضمني از اين کلاس ارث ميبرند. چنانچه يک کلاس را به صورت زير تعريف کنيد:
class Token
{
public Token (string name)
{
…
}
…
}
کامپايلر کد مذکور را به شکل زير تبديل ميکند (البته خودتان نيز در صورت تمايل ميتوانستيد کد مذکور را به اين شکل بنويسيد):
class Token: system.object
{
public Token (string name)
{
…
}
…
}
فراخواني سازندههاي کلاس پايه
سازنده کلاس مشتق شده بايد سازنده کلاس پايه خود را فرابخواند. براي اين کار بايد از کلمه کليدي base استفاده کنيد. هر کلاس حداکثر داراي يک کلاس پايه است:
Class IdentifierToken: Token
{
public IdentifierToken (string name): base (name)
{
…
}
…
}
چنانچه سازنده کلاس پايه را به طور صريح در سازنده کلاس مشتق شده فراخواني نکنيد, کامپايلر سعي ميکند سازنده پيش فرض کلاس پايه را در کلاس مشتق شده فراخواني کند. کامپايلر, کد زير را:
class Token
{
public Token (string name)
{
…
}
…
}
به شکل زير, مينويسد:
Class Token: System.Object
{
public Token (string name): base ()
{
…
}
…
}
اين کد کار ميکند زيرا System.Object يک سازنده پيش فرض و public دارد. البته همه کلاسها يک سازنده پيش فرض و public ندارند که در اين صورت چنانچه سازنده کلاس پايه را فراخواني نکنيد, با يک خطاي زمان کامپايل مواجه خواهيد شد. به عنوان مثال:
Class IdentifierToken: Token
{
public IdentifierToken (string name)
//error. base class Token does not have
// a public default constructor
{
…
}
…
}