amjadi - ebook 7 - class - v1

14
بنام ایزد جان و خردسی برنامه نویc# ویسنده نترجم ، من امجدید امیّحمآورنده : م و گرد بخش هفتمClass [email protected]

Upload: mohammad-amin-amjadi

Post on 16-Apr-2017

263 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Amjadi - Ebook 7 - Class - v1

جان و خرد ایزدبنام

#cبرنامه نویسی و گردآورنده : محمّد امین امجدی، مترجم نویسنده

هفتمبخش Class

[email protected]

Page 2: Amjadi - Ebook 7 - Class - v1

C# 1برنامه نویسی هفتمبخش

خب ، تازه وارد مبحث اصلی برنامه نویسی شدیم ، فرض کنید بخواهیم برای یک فروشگاه یک برنامه بنویسیم ! )که البته به شما

تون راحت باشه ! (نمی دهند بنویسید ، خیال

در این فروشگاه ساده ای که می خواهیم بنویسیم ، باید نام کاال ، قیمت خرید ، قیمت فروش و تعداد فروخته شده را ذخیره نمائیم .

پس برای ذخیره اطالعات باید متغییر های زیر را تعریف کنیم :

using System; namespace Test_1 { class Program { static void Main(string[] args) { int Tedad = Convert.ToInt32(Console.ReadLine()); string[] Name = new string[Tedad]; double[] Kharid = new double[Tedad]; double[] Forush = new double[Tedad]; Int64[] TeFo = new Int64[Tedad]; } } }

اطالعات فروشگاه

• نام کاال ها

قیمت خرید هر کاال•

قیمت فروش هر کاال•

تعداد فروش رفته از هر کاال•

Tedadتعداد اجناس از هر نوع کاال

Nameنام کاالها

Kharidقیمت خرید هر کاال

Forushقیمت فروش هر کاال

TeFoتعداد فروش رفته هر کاال

Page 3: Amjadi - Ebook 7 - Class - v1

C# 2برنامه نویسی هفتمبخش

حال توجه داشته باشید که آرایه ها به شکل زیر هستند :

Tedad-1 Tedad-2 کاالیi 0 1 2 3 ام i

Name ام iنام کاالی

Kharid ام iقیمت خرید کاالی

Forush ام iقیمت فروش کاالی

TeFo ام iتعداد فروش کاالی

بوده . iام تمام آرایه ها مربوط به کاالی iپس دقت داشته باشید که خانه

می نویسیم : Mainباال حال می خواهیم ، اطالعات تمام کاالها را دریافت کنیم ، متد زیر را static void ReadKala(string[] N, double[] Kh , double[] F , Int64[] TF) { for(int i = 0 ; i < N.Length ; i++) { N[i] = Console.ReadLine(); Kh[i] = Convert.ToDouble(Console.ReadLine()); F[i] = Convert.ToDouble(Console.ReadLine()); TF[i] = Convert.ToInt64(Console.ReadLine()); } }

است و مستقل از هرچیزی)در اینجا( ، و آرگومان های ورودی آن هیچ ربطی به staticتوجه داشته باشید که این یک متد

. و سایر متدهای دیگر ندارد Mainمتغییرهای داخل

کد زیر را اضافه می کنیم : Mainحال می خواهیم از این متد استفاده کنیم ، داخل ReadKala(Name, Kharid, Forush, TeFo);

پاس نموده ایم : ReadKalaرا به آرگومان ها ورودی متد Mainتوجه داشته باشید که متغییرهای داخل static void ReadKala(string[] N, double[] Kh , double[] F , Int64[] TF)

ReadKala(Name, Kharid, Forush, TeFo);

Page 4: Amjadi - Ebook 7 - Class - v1

C# 3برنامه نویسی هفتمبخش

تعداد فروش ،متدی بنویسیم که تعداد کل کاالهای فروخته شده در فروشگاه را محاسبه نماید ، کافی است که متدحال می خواهیم

تمام کاالها را گرفته و همگی را با هم جمع نماید : static Int64 TedadeForush(Int64[] TF) { Int64 r = 0; for (int i = 0; i < TF.Length; i++) { r += TF[i]; } return r; }

می نویسیم : Mainو حال داخل Console.WriteLine(TedadeForush(TeFo));

محاسبه نمود ؟حال برای فروشنده می خواهیم مقدار سود را محاسبه نمائیم ؛ خب چگونه باید سود را

ابتدا برای هر کاال سود فروش را برای فروش فقط یک جنس از آن کاال محاسبه نموده و سپس حاصل را در تعداد اجناس فروخته

شده از آن کاال نموده که این می شود سودفروش از یک کاال ، سپس مجموع سود تمام کاالها را بدست می آوریم که می شود

سود فروشنده . static Int64 Soud(double[] Kh, double[] F, Int64[] TF) { Int64 r = 0; for (int i = 0; i < Kh.Length; i++) { r = (Int64)(F[i] - Kh[i]) * TF[i]; } return r; }

می نویسیم : Mainل که داخConsole.WriteLine(Soud(Kharid, Forush, TeFo));

نوشته ، و بر قسمت قسمت آن مسلط شده و آنرا اجرا نموده . VisualStudioخب ، حاال شما این کد را بصورت کامل در

ی خیلی بیشتری اند و ...حال فرض کنید قرار باشد چندین فروشگاه داشته باشیم ، و کاالها هم دارای ویژگی های خیل

آیا بنظرتان این روش کدنویسی خوانا و .... است ؟

داشته باشیم که هر کاالیی خود دارای نام ، قیمت Kalaو ... داریم ، تایپی به نام int ،doubleفرض کنید که ما همان طور که

خرید ، قیمت فروش و تعداد فروش باشد ، وای چی می شود ، نه ؟!

کاال

نام•

قیمت خرید•

قیمت فروش•

تعداد فروش•

Page 5: Amjadi - Ebook 7 - Class - v1

C# 4برنامه نویسی هفتمبخش

تعریف می کنیم : Kalaیک کالس به نام Mainبرای تعریف کاال ، باالی خب ، class Kala { public string Name; public double Kharid; public double Forush; public Int64 TeFo; }

ک تایپ محسوب می شود ؛ خب حاال می خواهیم مثالً کاالیی به نام مَلَس را تعریف کنیم که قیمت خرید یا ی Kalaاز حاال به بعد

تا آدم بیکار و خوش میرن میخرند ! : 4تومن می باشد که 522تومان بوده و قیمت فروش آن 52تولید آن Kala k = new Kala(); k.Name = "Malas !"; k.Kharid = 25; k.Forush = 250; k.TeFo = 4;

حاال می خواهیم همان برنامه قبال را که کال با آرایه ها نوشته بودیم با استفاده از کاال بنویسیم ، خب برای یک فروشگاه عالوه بر

: ها ، نه ؟ ؛ پس می نویسیمنخود و کیشمیش به چی نیاز داریم ؟! به یک آرایه از کاال static void Main(string[] args) { int Tedad = Convert.ToInt32(Console.ReadLine()); Kala[] k = new Kala[Tedad]; ReadKala(k); Console.WriteLine(TedadeForush(k)); Console.WriteLine(Soud(k)); }

می نویسیم : Mainو امّا متدهای قبلی را هم بازنویسی می کنیم ، بدین شکل که هرکدام یک آرایه از کاالها می گیرند ، باالی static void ReadKala(Kala[] Ka) { for (int i = 0; i < Ka.Length; i++) { //********** new Ka[i] : ******************** //******* Don't Forget Ka[i] = new Kala(); //Read Ka[i] Ka[i].Name = Console.ReadLine(); Ka[i].Kharid = Convert.ToDouble(Console.ReadLine()); Ka[i].Forush = Convert.ToDouble(Console.ReadLine()); Ka[i].TeFo = Convert.ToInt64(Console.ReadLine()); } }

توجه داشته باشید کهKa یک آرایه ازKala ها بوده ، پسka[i] خود یک کاال می باشد ، و هر شی ای که از نوعclass

کنیم . newداریم و بخواهیم با آن کار کنیم ، باید ابتدا حتماً آن را static Int64 TedadeForush(Kala[] Ka) { Int64 r = 0; for (int i = 0; i < Ka.Length; i++) { r += Ka[i].TeFo; } return r; }

Page 6: Amjadi - Ebook 7 - Class - v1

C# 5برنامه نویسی هفتمبخش

static Int64 Soud(Kala[] ka) { Int64 r = 0; for (int i = 0; i < ka.Length; i++) { r = (Int64)(ka[i].Forush - ka[i].Kharid) * ka[i].TeFo; } return r; }

نکات :

کار کنیم :نمائیم و سپس با آن newتعریف می کنیم ، باید حتما آنرا classوقتی که یک متغییر از نوع یک .1

Kala k = new Kala(); کنیم : newباید ابتدا آن آرایه را داریم ، ای classوقتی که یک آرایه از نوع .5

Kala[] k = new Kala[Tedad]; هستند ، پس باید براساس نکته قبلی )نکته یک( ، تک تک آن ها را kalaآرایه خود یک و باز هر کدام از خانه های

new : نمود

for (int i = 0; i < k.Length; i++ ) { k[i] = new Kala();

} استفاده ()نمودن شی ای از نوع کالسمان از newو به هنگام []نمودن آرایه از newتوجه داشته باشید که به هنگام .3

نموده .

فیلد :

نوشته شده و محل ذخیره سازی اطالعات بوده . classفیلد ها ، همانند متغییرها هستند که در

محسوب می شوند . Kalaفیلدهای کالس TeFoو Name ،Kharid ،Forushدر مثال فوق

(را در درس شی گرا خواهید آموختقسمت های قرمز شده ) سطوح دسترسی :

طوح ای س( می توانند داررویدادهاو عملگرها ، پراپرتی ، ایندکسر ، متد ، مخرب اعضا و عناصر کالس )فیلد ، سازنده ،

باشند . protectedو private ،public دسترسی

دسترسی داریم و در خارج از تعریف شود ، فقط و فقط داخل خود کالس به آن privateاگر عضوی از کالس بصورت

و ....( به آنها دسترسی نخواهیم داشت . Mainکالس )در سایر کالس ها و

خواهد بود . privateاگر برای عضوی از کالس سطح دسترسی را مشخص ننمائیم ، سطح دسترسی آن

. یف شده باشدتعر public بایداگر بخواهیم عضوی از کالس همه جا شناخته شده و در دسترس باشد ،

( publicو private ،protected ،internalح دسترسی است ) وخود کالس نیز دارای سط

Page 7: Amjadi - Ebook 7 - Class - v1

C# 6برنامه نویسی هفتمبخش

Static وnon-static :

باشند . non-staticیا staticاعضا و عناصر کالس می توانند

کالس استفاده نمود : ، مربوط به خود کالس بوده و برای دسترسی به آنها باید از خود staticاعضا و عناصر class MyMath { public readonly static double PI = 3.14; } static void Main(string[] args) { Console.WriteLine(MyMath.PI);

} ابتدا نام کالس وسپس Main، داخل MyMathاز کالس static ،PIهمان طور که می بینید ، برای دسترسی به فیلد

نام فیلد را نوشته .

Readonly (اده می شودی بودن استفنفقط خواند: برای در شی گرا هم گفته نمی شود) مربوط به درس پیشرفته نمی باشد

م ، مربوط به شی ای از نوع کالس بوده را نسبت ندهی static، که در هنگام تعریف به آنها non-staticاعضا و عناصر

و برای استفاده از آنها باید از شی ای از نوع کالس استفاده نمائیم : class MyMath { public readonly double PI = 3.14; } static void Main(string[] args) { MyMath m = new MyMath(); Console.WriteLine(m.PI); }

یا هرجای Main( می باشد ، برای اینکه از آن در static)غیر non-staticکه MyMathاز کالس PIدر کد فوق ، فیلد

پس ود استفاده نموده( ، نام شی و سدیگری در خارج از کالس استفاده نمائیم ، باید ابتدا یک شی را تعریف نموده)یا از شی موج

باید نام فیلد )هر عضوی که استاتیک نباشد( را نوشته .

سازنده :

، که با این کار در واقع داریم سازنده کالس را فراخوانی نموده newبرای استفاده از هر شی ای نوع کالسمان باید ابتدا آنرا

لدها را انجام می دهیم .می کنیم و تخصیص حافظه و مقداردهی اولیه به فی

سازنده همانند متد است که خروجی ندارد و باید حتما هم نام کالس باشد .

( . !به سازنده ای که هیچ آرگومان ورودی ای ندارد ، سازنده پیش فرض می گوئیم )البته دقیقا این لفظ درست نیست

ازنده پیش فرض استفاده نمود .زمانی که برای کالس خود هیچ سازنده ای ننوشته ایم ، باید از س

اگر برای کالسمان سازنده ای بنویسیم نمی توان از سازنده پیش فرض استفاده نمود و سازنده پیش فرض)بدون آرگومان

ورودی( را خودمان باید بنویسیم .

ا نوع آرگومان هایمی توانیم همانند متدهای هم نام ، چندین سازنده برای کالسمان بنویسیم منوط به آنکه در تعداد ی

ورودی با یکدیگر متفاوت باشند .

Page 8: Amjadi - Ebook 7 - Class - v1

C# 7برنامه نویسی هفتمبخش

کالس خود چندین سازنده می نویسیم : برای

public Kala() { TeFo = 0; } public Kala(string Name , double Kharid , double Forush) { this.Name = Name; this.Kharid = Kharid; this.Forush = Forush; TeFo = 0; } public Kala(string Name , double Kharid , double Forush , Int64 TeFo) { this.Name = Name; this.Kharid = Kharid; this.Forush = Forush; this.TeFo = TeFo;

}

newو فراخونی هر کدام از سازنده ها ، کافی است که متغییری از نوع کالسمان تعریف کنیم و سپس به هنگام Mainبرای نوشتن

کردن آرگومان های مناسب را به آن بدهیم ، بسته به اینکه چه تعداد و از چه نوعی آرگومان به سازنده پاس می کنیم ، سازنده

:نی می شود مناسب فراخوا

static void Main(string[] args) { Kala k1 = new Kala(); Kala k2 = new Kala("Golabi", 200, 3500); Kala k3 = new Kala("CheeToz Motoriiieee !", 325, 1500, 1000000); }

آن مقداردهی و برابر TeFoکاالیی است که فقط k1را ایجاد نموده ، k1، 1همان طور که مشاهده می شود با استفاده از سازنده

تومان و قیمت 522کاالیی است با نام گالبی ، قیمت خرید یا تولید k2را ایجاد نموده ، k2، 5نده صفر شده ؛ با استفاده از ساز

کاالیی است به نام چی توز موتوری ، و k3را ایجاد نموده که k3، 3تومان و تعداد فروش صفر ؛ همچنین با سازنده 3222فروش

که یه مشت آدم بیکار می خرند ؛ پس دلیل گرانی ها و تورم هم مشخص 1000000و تعداد فروش تومان 352با قیمت تولید)خرید(

کنید و به کشور خویش خدمت کنید ! شد ، به همین راحتی می توانید بروید از دست چی توز شکایت

سازنده یک

دوسازنده

سهسازنده

فراخوانی سازنده یک

فراخوانی سازنده یک

فراخوانی سازنده سه

Page 9: Amjadi - Ebook 7 - Class - v1

C# 8برنامه نویسی هفتمبخش

. سایر مباحث تکمیلی سازنده را در درس شی گرا خواهید خواند

this :

this در حال کدنویسی در آن که الت کلی باید گفت به شی جاری از نوع کالسمان کلمه رزرو شده ای است که در ح

هستیم ، اشاره می کند .

به عنوان شی جاری از نوع کالسمان : .1

هر وقت که یک متد ، سازنده یا ایندکسر می نویسیم که آرگومان های ورودی آنها هم نام با فیلد یا عضو دیگری از

فیلد یا عضو از کالسمان دیگر دسترسی نداریم ، بلکه به آرگومان ورودی سازنده،متد نوع کالسمان می باشد ، به آن

یا ایندکسر دسترسی داریم ؛ برای اینکه بتوان به عضو یا عنصری که هم نام با آرگومان ورودی سازنده،متد یا ایندکسر

و سپس نام عضو مورد نظر را نوشته : .thisاست ، دسترسی داشت ابتدا class Kala { فیلدها // public string Name; public double Kharid; public double Forush; public Int64 TeFo; public Kala() { TeFo = 0; } public Kala(string Name , double Kharid , double Forush) { this.Name = Name; this.Kharid = Kharid; this.Forush = Forush; TeFo = 0; } public Kala(string Name , double Kharid , double Forush , Int64 TeFo) { this.Name = Name; this.Kharid = Kharid; this.Forush = Forush; this.TeFo = TeFo; }

}

شاهده می شود ، جاهایی که بین آرگومان ورودی سازنده و نام فیلد کالس تداخل وجود دارد ، برای طور که مهمان

استفاده شده است . thisدسترسی به فیلد کالس از

فراخوانی ایندکسر )ایندکسر بعدا مورد بررسی قرار خواهد گرفت(برای .5

نمود ؛ مثال ً :می توان داخل کالس ، ایندکسر خود کالس را فراخوانی this[i] = new Kala(); Kala f = this[i];

)در درس شی گرا گفته می شود( کالس توسط یک سازنده دیگرفراخوانی سازنده .3

. استفاده نمود thisنوشتن ایندکسر : برای نوشتن ایندکسر باید ازکلمه رزرو شده .4

Page 10: Amjadi - Ebook 7 - Class - v1

C# 9برنامه نویسی هفتمبخش

:می گیرد هستیمدر حال نوشتن آن پاس کردن شی جاری به یک متد ، که یک شی از نوع کالسی که .2

public void F1(Kala t) {/* Code */} public void F2() {

F1(this); }

( :Propertyپراپرتی )

آیا به نظر شما این درست که مثال قیمت فروش یک کاال منفی باشد ) اینکه مثال بروید یک کاال را بخرید و به جای سوال :

به شما پول هم بدهند ( ؟؟ تنها جوابی که داریم این است که اگه بشه چی میشه ، ولی خب نه نمیشه .اینکه هزینه ای بپردازید

فیلدهای کالس را کنترل نمود ؟حال این سوال پیش می آید که چطور و چگونه می توان

تی وارد کرد ، داده نادرستنها جواب این است که شما که برنامه را نوشته اید بشینید پشت سرکاربر و در صورتی که کاربر

یه پشت گردنی مهمونش کنید ! نه بابا نیازی به این همه زحمت شما نیست !

راه حلی که وجود دارد )جدا از هزاران راه حلی که از ذهنتان تراوش می شود و باید جلوی آنها را بگیرید! ( ، استفاده از

Property می باشد ، که فیلد خود راprivate دین صورت داخل نموده و بMain یا هرجایی خارج از کالس به آن دسترسی

( همان مقدار فیلد را getباشد و موقع خواندن مقدار آن ) publicتعریف می کنیم که Property نباشد ، و یک واسط به عنوان

نسبت داده تا ذخیره شود ، مثال ً :به فیلد در صورتی که مقدار جدید معتبر بود آن را Propertyبرگرداند و موقع مقدار دادن به

ت(اضافه شده اس _)معموال نام مورد نظر را به پراپرتی نسبت داده و نام فیلد را برابر همان نام که به ابتدای آن یک

:نکات

.یا هر دو باشد setیا getباید دارای قسمت پراپرتی .1

فراخوانی می شود . setو اگر به آن مقدار بدهیم قسمت getمقدار پراپرتی را بخوانیم ، قسمت اگر .5

استفاده valueمی توان ازکلمه رزرو شده setاست و هیچ آرگومان ورودی ندارد ، و فقط در قسمت ()بدون پراپرتی .3

نمود که حاوی مقداری است که داریم به پراپرتی نسبت می دهیم .

باشد doubleمی شود باید returnمقداری که getمی شود ، در قسمت تعریف doubleپراپرتی مثال از نوع که وقتی .4

بوده( . doubleاز نوع valueاست ) doubleقرار داد از نوع valueو همچنین مقداری که در

اجرا شود و همیشه دارای مقدار خروجی باشد . returnیک باید حتما getقسمت در .2

static void Main() { Kala k1 = new Kala(); k1.Forush = 1500; // Call Forush Property :: Set :: vale = 1500 double f = k1.Forush; // Call Forush Property :: get }

double _Forush; public double Forush { get { return _Forush; } set { if (value > 0) _Forush = value; } }

private double _Forush; public double Forush { get { return _Forush; } set { if (value > 0) _Forush = value; } }

Page 11: Amjadi - Ebook 7 - Class - v1

C# 11برنامه نویسی هفتمبخش

و هم در getیک فیلد خاص و یکسان کار می کنیم ، مثالً در مثال فوق هم در قسمت با setو get در قسمت معموالً .6

و با هر در آن نوشت کار می کنیم ؛ ولی هیچ الزامی ندارد و می توان هر کد دلخواهی Forush_با فیلد setقسمت

پراپرتی همیشه یک getیا کال با مقادیر ثبات کار نمود که مثالً در قسمت و یک یا چند فیلد( کار نمودصفر ، فیلدی )

را برگرداند .مقدار ثابت

( ، IsFullدر صف و پشته برای پربودن ) پراپرتی می نویسیم ، مثالًبرای هر مشخص و ویژگی ای از کالسمان یک معموالً .7

( که جز مشخصه ها و Length( و طول صف)Count( ، تعداد عناصری که داخل صف هستند )IsEnptyخالی بودن)

ویژگی های کالسمان است ، پراپرتی می نویسیم .

:ایندکسر

.تعریف می شوند []بوده و دارای آرگومان ورودی نیز می باشد که داخل this، که نام آن یک پراپرتی است ایندکسر

[]و سپس جلوی آن م کالسناباید ابتدا باشد static، اگر ایندکسر برای فراخوانی ایندکسر ایندکسر :فراخوانی

ای از نوع کالسمان نام شیباید بجای نام کالس از باشد non-staticگر و ارا نوشته آرگومان های ورودی []را نوشته و داخل

استفاده نموده )نام متغییری که از نوع کالسمان می باشد ( .

.خارج از کالس ایدکسر می نویسیم وقتی که در کالسمان آرایه داریم ، برای دسترسی به عناصر آن آرایه در معموالً

نوشتن چند ایندکسر باید در تعداد یا نوع است ، برای thisآنجا که ایندکسر دارای آرگومان ورودی است و نام آن از

می توان نوشت : Kala؛ مثال برای کالس رودی با یکدگیر فرق داشته باشند آرگومان های و public double this[bool Kharid] { get { if (Kharid)//Kharid = true return this.Kharid; return Forush;//Kharid = fasle } set { if (Kharid)//Kharid = true this.Kharid = value; else//Kharid = fasle Forush = value; } }

اریم تداخل پیش می د Kharidی که به نام می باشد )توجه : با فیلد Kharidای بنام ایندکسر دارای آرگومان ورودی این

داریم با this.Kharidبنویسیم داریم از آرگومان ورودی ایندکسر استفاده می کنیم و هرجا Kharidپس هر جا بنویسیم ،آید

را مقدار دهی می کند و یا برمی گرداند واگر Kharidباشد ، مقدار فیلد trueفیلد کالس کار می کنیم( ، اگر مقدار این آرگومان

: Main، وامّا مقدار دهی می کند به آن را بر می گرداند یا Forushباشد مقدار فیلد fasleمقدار این آرگومان static void Main() { Kala k1 = new Kala("Adams", 12, 250,465); k1[true] = 15;//set k1.Kharid : 15 double Fo = k1[false];//get k1.Forush }

Page 12: Amjadi - Ebook 7 - Class - v1

C# 11برنامه نویسی هفتمبخش

آن را نیز بنویسید : Mainرا بررسی کنید که چکار می کند و زیر ایندکسر public double this[Int64 Tedad] { get { if (Tedad <= 0) return (Forush - Kharid) * TeFo; return (Forush - Kharid) * Tedad; } }

اما کالس فروشگاه و ایندکسر آن :و class Shop { Kala[] Data; int _Count; public Shop(int Size) { Data = new Kala[Size]; _Count = 0; } public Kala this[int i] { get { if (i < 0 || i >= _Count) throw new Exception("Bache Dast Nazan !"); return Data[i]; } set { if (i < 0 || i >= _Count) throw new Exception("Bache Dast Nazan !"); Data[i] = value; } } }

: Mainاین شما و این هم آقا/خانم حاالو static void Main() { int Kheyli = 100000; Shop BaghalieSareKouche = new Shop(Kheyli); int BastaniIndex = 5; double YeGheroun = 150; double Geruoon = 1500; Kala k1 = new Kala("Bastani", YeGheroun, Geruoon); BaghalieSareKouche[BastaniIndex] = k1; }

Page 13: Amjadi - Ebook 7 - Class - v1

C# 12برنامه نویسی هفتمبخش

:متد

می توان در خود کالس نیز متد نوشت ، که اگر متد بودیم ، نوشته Mainمثال های قبل که متد نوشتیم ، متدها را باالی در

static باشد از طریق خود نام کالس به آن دسترسی داریم ، و اگرnon-static سمان به آن باشد از طریق شی ای از نوع کال

:دسترسی خواهیم داشت

class Kala { public string Name; public double Kharid; public double Forush; public Int64 TeFo; public Kala(string Name, double Kharid, double Forush, Int64 TeFo) { this.Name = Name; this.Kharid = Kharid; this.Forush = Forush; this.TeFo = TeFo; } public static double Soud(Kala k) { return (k.Forush - k.Kharid) * k.TeFo; } } static void Main() { Kala k1 = new Kala("Danet", 120, 100, 250); double s = Kala.Soud(k1); }

class Kala { public string Name; public double Kharid; public double Forush; public Int64 TeFo; public Kala(string Name, double Kharid, double Forush, Int64 TeFo) { this.Name = Name; this.Kharid = Kharid; this.Forush = Forush; this.TeFo = TeFo; } public double Soud() { return (Forush - Kharid) * TeFo; } } static void Main() { Kala k1 = new Kala("Danet", 120, 100, 250); double s = k1.Soud(); }

static وnon-static :فیلد قبال بررسی شده است (سازنده و ، پراپرتی ، ایندکسرمتد ررسی دقیق تر ب( :

،از طریق نام کالس به آن ها دسترسی داریم .باشند staticاعضا اگر این

د ، از طریق شی ای از نوع کالس به آن ها دسترسی داریم .نباش non-staticاین اعضا اگر

دسترسی خواهیم داشت . staticط به اعضای باشند ، در فقط و فق staticاین اعضا اگر

اهیم داشت .که مربوط به شی جاری است ، دسترسی نخو this، به باشند staticاین اعضا اگر

( this)من جمله non-static به اعضا و عناصر و هم staticعناصر باشند ، هم به اعضا و non-staticاین اعضا اگر

دسترسی خواهیم داشت .

بنویسیم ، non-static، و بخواهیم آن را بصورت )متد ، ایندکسر و سازنده( باشد staticعضوی داشته باشیم که اگر

thisاز باید یکی از آرگومان های ورودی آن را حذف نموده ، و داخل بدنه عضو به جای اسم آن آرگومان که حذف شده است ،

نیز ننوشت .را .thisاستفاده نموده و در صورتی که هیچ تداخلی وجود نداشته باشد می توان

بنویسیم ، باید آرگومانی از نوع خود کالس به آرگومان staticباشد و بخواهیم آن را بصورت non-staticعضوی اگر

کالس non-staticداریم نام آرگومان اضافه شده را بنویسیم و هرجا که داریم از اعضای thisهای آن اضافه نموده و هرجا که

نام آرگومان اضافه شده )به همراه دانت).( ( قبل از اسم آنها اضافه نمود .استفاده می کنیم ، باید

Page 14: Amjadi - Ebook 7 - Class - v1

C# 13برنامه نویسی هفتمبخش

. نیز تعریف شود که در درس شی گرا خواهید خواند .و .. staticکالس نیز می تواند بصورت خود

.خوانید نوشته ام را نیز با دقت برا که سر کالس تلفنی مثال دفترچه را مرور کنید و همچنین گفته اند صف ها را که استاد مثال

خود را ابتدا با سرگروه خود در میان خواهشمندم که با دقت مطالب را خوانده و اشکاالتهمین ها بود ، اصلی پایان ترم مباحث

بنده اطالع دهید . گذاشته و در صورت داشتن هر سوال و اشکال دیگری به

ه باین فایل اشکالی دیدید و یا مطلبی که گفته نشده است و یا هر پیشنهاد دیگری جهت بهبود آن دارید ، صورتی که دردر لطفا

بنده اطالع دهید .

و موید باشیدموفق

امین امجدیمحمّد