Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

‫زنگ سیشارپ – قسمت سی و نهم‬

‫ًَضتِی هسؼَد دسٍیطیبى‬

‫لیٌک هستمین ایي هغلت دس ٍةتبسگت‬

.‫ دس ایي لسوت ثِاداهِی هجحج اسثثشی هیپشداصین‬.‫دس لسوت لجل تب حذٍدی ثب اسثثشی آضٌب ضذیذ‬

:‫ دس هثبل صیش تَجِ کٌیذ‬protected ‫ثِ ًحَیدستشسی ثِصَست‬

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

// D can access B's i and j


public void Setk()
{
k = i * j;
}
public void Showk()
{
Console.WriteLine(k);
}
}
class ProtectedDemo
{
static void Main()
{
D ob = new D();

ob.Set(2, 3);
ob.Show();

ob.Setk();
ob.Showk();

‫زنگ سیشارپ – قسمت سی و نهم‬ Page 1


‫}‬
‫}‬

‫‪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‬‬

‫زنگ سیشارپ – قسمت سی و نهم‬ ‫‪Page 2‬‬


class A
{
protected int ID { get; set; }
protected int Number { get; set; }
}
class B : A
{
protected string Name;

public B(int id, int number, string name)


{
ID = id;
Number = number;
Name = name;
}

public void Show()


{
Console.WriteLine(Name + ": " + ID + " - " + Number);
}
}
class IndehritDemo
{
static void Main()
{
B ob1 = new B(180, 1, "Filipe");
ob1.Show();

B ob2 = new B(190, 2, "Cevat");


ob2.Show();
}
}

.‫ ثِ اسث ثشدُ است سا همذاسدّی هیکٌذ‬A ‫ هتغیشّبیی کِ اص کالس‬،B ‫ دس کالس‬constructor ،‫دس ایيجب‬

‫ سًٍذ کبس هتفبٍتتش خَاّذ ثَد‬،‫ تؼشیف ضذُ ثبضذ‬constructor ،derived class ‫ ٍ ّن دس‬base class ‫ٌّگبهیکِ ّن دس‬
‫ دس ایي هَاسد ثبیستی اص کلوِی کلیذی‬.‫ّشدٍ ثبیستی اجشا ضًَذ‬ derived class ٍ base class ‫ّبی‬ constructor ‫صیشا‬
‫ کبسثشد دٍم‬.‫ است‬base class ‫ دس‬constructor ‫ کبسثشد اٍل آى ثشای صذا صدى‬.‫ استفبدُ کٌیذ‬،‫ کِ دٍ کبسثشد داسد‬،base
.‫ لبثل هطبّذُ ًیستٌذ‬derived class ‫ است کِ ثِ دلیل تطبثِ اسوی دس‬base class ‫آى ثشای دستشسی ثِ اػضبیی اص‬

base class ‫ های‬constructor ‫فراخوانی‬

‫ اش تؼشیف ضذُ است سا اص عشیك گستشش دادى فشم‬base class ‫ ای کِ دس‬constructor ‫ هیتَاًذ‬derived class ‫یک‬
.‫ صذا ثضًذ‬،base ‫ ٍ کلوِیکلیذی‬derived class ‫ دس‬constructor

‫زنگ سیشارپ – قسمت سی و نهم‬ Page 3


:‫فشم کلی تؼشیف گستشش یبفتِی آى ثِضکل صیش است‬

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;

public A(int a, int b)


{
i = a;
j = b;
}

public void ShowA()


{
Console.Write(i + " " + j);
}
}
class B : A
{
private int k;

public B(int a, int b, int c) : base(a, b)


{
k = c;
}

public void ShowB()


{
ShowA();
Console.WriteLine(" " + k);
}
}
class InheritanceDemo
{
static void Main()
{
B b = new B(2, 4, 6);

b.ShowB();
}
}

‫زنگ سیشارپ – قسمت سی و نهم‬ Page 4


:‫ تَجِ کٌیذ‬B ‫ دس کالس‬constructor ‫ثِ ًحَُی تؼشیف‬

public B(int a, int b, int c) : base(a, b) {

ٍ ُ‫اجشا ضذ‬ 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, int b)


{
i = a;
j = b;
}

public A(int a)
{
i = j = a;
}
public void ShowA()
{
Console.Write(i + " " + j);
}
}
class B : A
{
private int k;

public B(int a, int b, int c) : base(a, b) {


k = c;
}

public B(int a) : base(a)


{
k = 5;
}

public void ShowB()


{
ShowA();

‫زنگ سیشارپ – قسمت سی و نهم‬ Page 5


‫;)‪Console.WriteLine(" " + k‬‬
‫}‬
‫}‬
‫‪class InheritanceDemo‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫;)‪B b1 = new B(2, 4, 6‬‬
‫;)(‪b1.ShowB‬‬

‫;)‪B b2 = new B(1‬‬


‫;)(‪b2.ShowB‬‬
‫}‬
‫}‬

‫است‪ .‬ثٌبثشایي‬ ‫‪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‬ثب آى حبلتی کِ اص آى ثشای سبختي ضیء استفبدُ هیکشدیذ‪ ،‬هتفبٍت است‪.‬‬

‫ثِ هثبل صیش تَجِ کٌیذ‪:‬‬

‫زنگ سیشارپ – قسمت سی و نهم‬ ‫‪Page 6‬‬


‫;‪using System‬‬
‫‪class A‬‬
‫{‬
‫;‪public int i = 0‬‬
‫}‬
‫‪class B : A‬‬
‫{‬
‫‪new int i; // this i hides the i in A‬‬
‫)‪public B(int b‬‬
‫{‬
‫‪i = b; // i in B‬‬
‫}‬
‫)(‪public void Show‬‬
‫{‬
‫;)‪Console.WriteLine("i in derived class: " + i‬‬
‫}‬
‫}‬
‫‪class NameHiding‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫;)‪B ob = new B(2‬‬
‫;)(‪ob.Show‬‬
‫}‬
‫}‬

‫ثِ ًحَُی استفبدُی ‪ new‬تَجِ کٌیذ‪:‬‬

‫‪new int i; // this i hides the i in A‬‬

‫‪base‬‬ ‫ایي خظ کذ ثِ کبهپبیلش هیگَیذ کِ ضوب هیداًیذ هتغیش جذیذی ثِ اسن ‪ i‬سبختِ ضذُ است ٍ ثبػج دیذُ ًطذى ‪ i‬دس‬
‫‪B‬‬ ‫سا هطبّذُ خَاّیذ کشد‪ .‬اص آىجب کِ‬ ‫‪compiler‬‬ ‫سا اص کذ ثبال حزف کٌیذ‪ ،‬پیغبم ّطذاس‬ ‫‪new‬‬ ‫خَاّذ ضذ‪ .‬اگش‬ ‫‪class‬‬

‫هتغیش ‪ i‬خَدش سا تؼشیف هیکٌذ ٍ ثبػج دیذُ ًطذى ‪ i‬دس ‪ A‬هیضَد‪ ،‬پس اص اجشای هتذ )(‪ ،Show‬همذاس هتغیش ‪ i‬کِ هتؼلك‬
‫ثِ ‪ B‬است ًوبیص دادُ خَاّذ ضذ‪ ًِ ،‬همذاس ‪ i‬دس هتغیش ‪.A‬‬

‫استفاده از ‪ base‬برای دسترسی به اعضایی که دیده نمیشوند‬

‫دٍهیي استفبدُ اص ‪ base‬تب حذٍدی ضیجِ ثِ ‪ this‬است ثب ایي تفبٍت کِ ‪ّ base‬ویطِ ثِ ‪ base class‬سجَع هیکٌذ‪ً .‬حَُی‬
‫استفبدُ اص ‪ base‬ثِ ضکل صیش است‪:‬‬

‫‪base.member‬‬

‫زنگ سیشارپ – قسمت سی و نهم‬ ‫‪Page 7‬‬


‫ثشای هَالؼی است کِ یک‬ ‫‪base‬‬ ‫ّن هیتَاًذ هتغیش ٍ ّن هیتَاًذ هتذ ثبضذ‪ .‬ایي ًحَُی استفبدُ اص‬ ‫‪member‬‬ ‫دس ایيجب‪،‬‬
‫ػضَ دس ‪ base class‬ثِ دلیل تطبثِ اسوی دس ‪ derived class‬دیذُ ًویضَد‪.‬‬

‫ثِ هثبل صیش تَجِ کٌیذ‪:‬‬

‫;‪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‬دستشسی داضتِ ثبضیذ‪:‬‬

‫زنگ سیشارپ – قسمت سی و نهم‬ ‫‪Page 8‬‬


using System;
class A {
public int i = 0;
public void Show()
{
Console.WriteLine("i in base class: " + i);
}
}
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
}

new public void Show()


{
base.Show(); // this calls Show() in A

// this displays the i in B


Console.WriteLine("i in derived class: " + i);
}
}
class UncoverName
{
static void Main()
{
B ob = new B(1, 2);
ob.Show();
}
}

:‫خشٍجی‬

new ‫ ثِ ًحَُی استفبدُ اص‬.‫ صذا صدُ ضَد‬base class ‫ دس‬Show() ‫ ثبػج ضذُ کِ هتذ‬base.Show() ،‫ّوبىعَس کِ هیثیٌیذ‬
B ‫دس کالس‬ Show() ‫دس ایيجب ثبػج هیضَد ثِ کبهپبیلش ثفْوبًیذ کِ ضوب هیداًیذ هتذ‬ new .‫ دلت کٌیذ‬،‫دس ایي هثبل‬
.‫ هیضَد‬A ‫ دس کالس‬Show() ‫ثبػج دیذُ ًطذى‬

.‫کلیِ حمَق هبدی ٍ هؼٌَی ثشای ٍةسبیت ٍةتبسگت هحفَػ است‬


.‫استفبدُ اص ایي هغلت دس سبیش ٍةسبیتّب ٍ ًطشیبت چبپی تٌْب ثب رکش ٍ دسج لیٌک هٌجغ هجبص است‬

‫زنگ سیشارپ – قسمت سی و نهم‬ Page 9

You might also like