Professional Documents
Culture Documents
System (I, J Set (A, B) (I A J B ) Show (.Writeline (I + + J) ) ) : (K
System (I, J Set (A, B) (I A J B ) Show (.Writeline (I + + J) ) ) : (K
. دس ایي لسوت ثِاداهِی هجحج اسثثشی هیپشداصین.دس لسوت لجل تب حذٍدی ثب اسثثشی آضٌب ضذیذ
using System;
class B
{
protected int i, j; // private to B, but accessible by D
public void Set(int a, int b)
{
i = a;
j = b;
}
public void Show()
{
Console.WriteLine(i + " " + j);
}
}
class D : B
{
int k; // private
ob.Set(2, 3);
ob.Show();
ob.Setk();
ob.Showk();
protected ثِصَست j اسثثشی کشدُ است ٍ ّوچٌیي ثِدلیل ایيکِ ٍ i B اص D دس ایي هثبل ،ثِدلیل ایيکِ کالس
تؼشیف ضذُاًذ ،هتذ )( SetKهیتَاًذ ثِ آىّب دستشسی داضتِ ثبضذ .تَجِ داضتِ ثبضذ اگش j ٍ iثِصَست privateتؼشیف
ضًَذ ،کالس Dثِ آىّب دستشسی ًخَاّذ داضت.
ایيکِ چٌذ هشحلِ اسثثشی اًجبم ضَد ،هْن ًیست .هبًٌذ ،private ٍ publicدستشسی protectedدس ایي هشاحل اسثثشی،
ثشای base class ثِػٌَاى یک derived class هیهبًذ .اص ایيسٌٍّ ،گبهیکِ یک protected ّوَاسُ ثشای یک ػضَ،
کِ تَسظ اٍلیي base class دس اٍلیي protected دیگش هَسد استفبدُ لشاس هیگیشد ،توبم اػضبی derived class یک
derived classاسثثشی ضذُاًذ ،دس دٍهیي ً derived classیض ثِصَست protectedاسثثشی هیضًَذ.
ثب ٍجَد ایيکِ دستشسی protectedثسیبس هفیذ است ،دس ّوِی هَلؼیتّب ًجبیذ اص آى استفبدُ کشد ٍ فمظ ثبیذ صهبًی اص
آى ثْشُ ثشد کِ هیخَاّین یک ػضَ دس سلسِهشاتت اسثثشی لبثل دستشس ٍ ،دس خبسج اص ایي سلسلِهشاتت ،غیش لبثل
دستشسی ثبضذ.
Constructorها و ارثبری
دس سلسلِهشاتت اسثثشیّ ،ن ّ base classب ٍ ّن ّ derived classب هیتَاًٌذ constructorخَدضبى سا داضتِ ثبضٌذ .دس
base class ایيجب ایي سَال ثٍِجَد هیآیذ کِ کذام constructorهسئَل سبختي ضیء derived classاست؟ آىکِ دس
لشاس داسد ،ثخص base class ای کِ دس constructor لشاس داسد؟ یب ّشدٍ؟ دس ٍالغ، derived class است یب آىکِ دس
سا هیسبصد .اگش derived class ٍالغ است ،لسوت derived class ای کِ دس constructor ی ک ض یء ٍ base class
derived تَجِ کٌیذ هتَجِ هیضَیذ کِ ایي کبس هٌغمی است صیشا ّ base classیچ دستشسی ٍ اعالػی اص ػٌبصش دسٍى
ً classذاسد ٍ اص ایيسٍ constructionآىّب ثبیذ جذاگبًِ ثبضذ .دس هثبلّبی لجلی اص default constructorکِ ثِصَست
اتَهبتیک تَسظ سیضبسح سبختِ هیضًَذ استفبدُ ضذُ است اهب دس ػول ثیطتش کالسّب constructor ،تؼشیف هیکٌٌذ.
;using System
. ثِ اسث ثشدُ است سا همذاسدّی هیکٌذA هتغیشّبیی کِ اص کالس،B دس کالسconstructor ،دس ایيجب
سًٍذ کبس هتفبٍتتش خَاّذ ثَد، تؼشیف ضذُ ثبضذconstructor ،derived class ٍ ّن دسbase class ٌّگبهیکِ ّن دس
دس ایي هَاسد ثبیستی اص کلوِی کلیذی.ّشدٍ ثبیستی اجشا ضًَذ derived class ٍ base class ّبی constructor صیشا
کبسثشد دٍم. استbase class دسconstructor کبسثشد اٍل آى ثشای صذا صدى. استفبدُ کٌیذ، کِ دٍ کبسثشد داسد،base
. لبثل هطبّذُ ًیستٌذderived class است کِ ثِ دلیل تطبثِ اسوی دسbase class آى ثشای دستشسی ثِ اػضبیی اص
اش تؼشیف ضذُ است سا اص عشیك گستشش دادى فشمbase class ای کِ دسconstructor هیتَاًذderived class یک
. صذا ثضًذ،base ٍ کلوِیکلیذیderived class دسconstructor
derived-constructor(parameter-list) : base(arg-list) {
// body of constructor
}
ثِ ًحَُی لشاس گشفتي. استbase class دسconstructor ّبی هَسد ًیبصargument هطخصکٌٌذُیarg-list ،دس ایيجب
: آضٌب ضَیذ ثِ هثبل صیش تَجِ کٌیذbase ثِهٌظَس ایيکِ ثب کبسثشد. ًیض تَجِ داضتِ ثبضیذcolon
using System;
class A
{
private int i, j;
b.ShowB();
}
}
ٍ ُاجشا ضذ A کالس constructor هَجت هیضَد تب b ٍ a ّوشاُ ثب پبساهتشّبی base ثب صذا صدى B() ،دس ایيجب
( هشثَط ثِ خَدشk) ِ دیگش خَدش ایي هتغیشّب سا همذاسدّی ًکشدُ ٍ تٌْب چیضی کB . سا همذاسدّی کٌذj ٍ i هتغیشّبی
هیتَاًذ تَسظ کلوِیکلیذی،تؼشیف ضذُ ثبضذ base class ثِ ّش ضکلی دس Constructor .است سا همذاسدّی هیکٌذ
. ّب تغبثك داضتِ ثبضذargument ای اجشا خَاّذ ضذ کِ ثبconstructor صذا صدُ ضَد ٍ آىbase
using System;
class A
{
private int i, j;
public A(int a)
{
i = j = a;
}
public void ShowA()
{
Console.Write(i + " " + j);
}
}
class B : A
{
private int k;
است .ثٌبثشایي argument دٍم آى ضبهل یک constructor ثَدُ کِ constructor ضبهل دٍ base class دس ایي هثبل،
کِ یک constructor آى A ثِ آى هیدّیذ ،دس argument استفبدُ هیکٌیذ ٍ یک base اص B ٌّگبهیکِ دس کالس
parameterداسد اجشا خَاّذ ضذ.
ثبالی base class هستمیوبً ثِ ًضدیکتشیي base استفبدُ هیکٌذ، base اص کلوِیکیذی derived class ٌّگبهیکِ یک
ثِ ًضدیکتشیي base هشثَط هیضَد .اص ایيسٌٍّ ،گبهیکِ اص سلسلِهشاتت اسثثشی استفبدُ هیکٌیذ، derived class
اجشا base class پیصفشض constructor استفبدُ ًکٌیذ، base دس ایي صًجیشُ ،سجَع خَاّذ کشد .اگش اص base class
خَاّذ ضذ.
است کِ ثِ دلیل base class آضٌب ضذیذ .کبسثشد دٍم آى ثشای دستشسی ثِ اػضبیی اص base تب ایيجب ثب اٍلیي کبسثشد
تطبثِ اسوی دس derived classلبثل هطبّذُ ًیستٌذ derived class .هیتَاًذ ػضَی سا تؼشیف کٌذ کِ هطبثِ ًبم یکی اص
دیذُ ًویضَد. derived class دس base class اش ثبضذٌّ .گبهیکِ چٌیي اتفبلی افتذ ،آى ػضَ base class اػضبی
دسحبلیکِ ایي هَسد اص لحبػ تکٌیکی دس سیضبسح خغب ضوشدُ ًویضَد ،کبهپبیلش یک پیغبم ّطذاس ثِ ضوب دادُ ٍ اص ایي
base کِ یکی اص اػضب دیذُ ًویضَد ،ضوب سا ثبخجش هیسبصد .اگش لصذ ضوب ایي ثبضذ تب ثبػج دیذُ ًطذى یکی اص اػضبی
استفبدُ کٌیذ. new دس تؼشیف آى ػضَ اص کلوِیکلیذی derived class ضَیذ ،ثِهٌظَس سفغ ّطذاس کبهپبیلش ،دس class
دلت داضتِ ثبضیذ کِ ایيعَس استفبدُ اص newثب آى حبلتی کِ اص آى ثشای سبختي ضیء استفبدُ هیکشدیذ ،هتفبٍت است.
base ایي خظ کذ ثِ کبهپبیلش هیگَیذ کِ ضوب هیداًیذ هتغیش جذیذی ثِ اسن iسبختِ ضذُ است ٍ ثبػج دیذُ ًطذى iدس
B سا هطبّذُ خَاّیذ کشد .اص آىجب کِ compiler سا اص کذ ثبال حزف کٌیذ ،پیغبم ّطذاس new خَاّذ ضذ .اگش class
هتغیش iخَدش سا تؼشیف هیکٌذ ٍ ثبػج دیذُ ًطذى iدس Aهیضَد ،پس اص اجشای هتذ )( ،Showهمذاس هتغیش iکِ هتؼلك
ثِ Bاست ًوبیص دادُ خَاّذ ضذ ًِ ،همذاس iدس هتغیش .A
دٍهیي استفبدُ اص baseتب حذٍدی ضیجِ ثِ thisاست ثب ایي تفبٍت کِ ّ baseویطِ ثِ base classسجَع هیکٌذً .حَُی
استفبدُ اص baseثِ ضکل صیش است:
base.member
;using System
class A
{
;public int i = 0
}
class B : A
{
new int i; // this i hides the i in A
)public B(int a, int b
{
base.i = a; // i in A
i = b; // i in B
}
)(public void Show
{
;)Console.WriteLine("i in base class: " + base.i
;)Console.WriteLine("i in derived class: " + i
}
}
class UncoverName
{
)(static void Main
{
;)B ob = new B(1, 2
;)(ob.Show
}
}
خشٍجی:
هیضَد ،ثب استفبدُ اص کلوِیکلیذی A ثبػج دیذُ ًطذى هتغیش iدس B ّوبىعَس کِ هیثیٌیذ ،ثب ٍجَد ایيکِ هتغیش iدس
baseتَاًستین دس کالس Bثِ آى دستشسی داضتِ ثبضین.
ایي هَسد دسثبسُی هتذّب ًیض صذق هیکٌذ .ثشای هثبل اگش دس کذ لجلّ ،شدٍ کالس هتذی ثِ اسن )( Showتؼشیف کٌٌذ ثب
استفبدُ اص baseهیتَاًیذ دس derived classثِ هتذ )( Showدس base classدستشسی داضتِ ثبضیذ:
:خشٍجی
new ثِ ًحَُی استفبدُ اص. صذا صدُ ضَدbase class دسShow() ثبػج ضذُ کِ هتذbase.Show() ،ّوبىعَس کِ هیثیٌیذ
B دس کالس Show() دس ایيجب ثبػج هیضَد ثِ کبهپبیلش ثفْوبًیذ کِ ضوب هیداًیذ هتذ new . دلت کٌیذ،دس ایي هثبل
. هیضَدA دس کالسShow() ثبػج دیذُ ًطذى