03 CSharpBook
03 CSharpBook
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
بسم هللا الرحمن الرحیم
2
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
تقدیم به نائب امام عصر ،آیت الله خامنه ای
تقدیم به همه جویندگان علم که توان و امکان شرکت در کالس های حضوری
ما را ندارند.
3
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
فهرست
قرار دادن پنجره در کناره های برنامه (محیط ویژوال استودیو) 21 ...................................................
4
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
پنجره 11 ..................................................................................... Solution Explorer
} 12 ..............................................................................................................
5
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
نوع داده ی 40 ................................................................................................. Byte
6
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
دسترسی پیدا کردن به متغیر 774 .....................................................................................
مقدمه 704............................................................................................................
} { 704 ...............................................................................................................
7
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
724 .....................................................................................Pre and post increment
8
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
وارد کردن کالس 747 .................................................................................................
نوع مقدار ( )value typesو نوع ارجاع (818 ................................................... )reference type
9
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
معرفی متدها 022 ....................................................................................................
10
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
سربارگذاری سازنده (040............................................................. )constructor overloading
مقدمه 024............................................................................................................
مقدمه 241........................................................................................................
11
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
معرفی دیگر فضاهای نامی 044 .......................................................................................
12
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
ثابت ها 121 ......................................................................................................
کمینه ی دو مقدار404................................................................................................
13
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
424 ................................................................................................. Arc Tangent
14
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
آرگومان های 111 ....................................................................................... Boolean
15
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
ساختار شرطی 220 ................................................................................... Case switch
16
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
رفتن به یک لیبل 111 .............................................................................................
17
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
مقدمه
موسسه آموزشی تحلیل داده ،با حضور جمعی از متخصصین مجرب در زمینه برنامه نویسی در نظر دارد،مطالب آموزشی خود را در قالب کتاب
های آموزشی و فیلم ،به صورت رایگان در دسترس عموم قرار دهد تا حتی آن دسته از عزیزانی که بنا به دالیل مالی،مسافت جغرافیایی و یا
نداشتن وقت کافی ،امکان شرکت در دوره های حضوری برای آنها میسر نیست،از یادگیری بی بهره نمانند.
عالوه بر این عالقه مندان می توانند ،با ثبت نام در انجمن سایت تحلیل داده،سواالت خود را مطرح نموده و مدرسین آموزشگاه و اعضای
انجمن در اسرع وقت،پاسخ های خود را ،حتی االمکان به صورت فیلم ،در دسترس عموم قرار دهند.
لذ ا از کلیه فعاالن در این زمینه دعوت می شود ،در این حرکت جمعی در کنار ما باشند و با حضور فعال خود در انجمن،گام موثری در بهبود سطح
توجه :
برای دانلود سورس کد مثال های کتاب ،اینجا را کلیک کنید.
18
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
مقدمه ای بر MS Visual Studio
، C#که سی شارپ تلفظ می شود ،یک زبان برنامه نویسی برای دستور دادن به کامپیوتر می باشد .این دستورات را می توان از طریق برنامه
ی ساده ای مثل NotePadهم نوشت .شیوه ی دیگر برای نوشتن دستور ،استفاده از محیط برنامه نویسی می باشد که با مجهز بودن به ابزار
گوناگون عملیات گوناگونی همچون کار با پروژه ها ،ایجاد فایل های ضروری و توزیع برنامه ی کاربردی تکمیل شده را بسیار سهل و آسان می
کند.
محبوب ترین محیط برنامه نویسی برای نوشتن دستورات Microsoft Visual Studio ،C#می باشد .چنانچه ،هدف اصلی شما یادگیری این
زبان برنامه نویسی است ،می توانید از Microsoft Visual C# 2010 Expressکمک بگیرید.
برای یادگیری این دروس ،می توایند از Microsoft Visual Studio 2010یا Microsoft Visual C# 2010 Expressاستفاده کنید .برای
دانلود ،Microsoft Visual C# 2010 Expressکافی است به سایت مایکروسافت مراجعه کرده و روی لینک Visual Studio Express
کلیک کنید.
به منظور راه اندازی برنامه ی ،Visual C# 2010 Expressروی گزینه های زیر کلیک کنید Start -> (All) Programs -> Microsoft :
19
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
رابط (کاربری) The Microsoft Visual Studio
باالترین قسمت رابط برنامه ی Microsoft Visual Studioمنوی اصلی را نشان می دهد که به دسته هایی همچون Fileو Editتقسیم
شده .منو اصلی همان کارایی فهرست گزینه ی یک برنامه ی کاربردی ساده را دارد.
نوارابزارها ()Toolbars
زیر (قسمت) منوی اصلی بخشی است به نام نوارابزار ( .)toolbarمعموالً ،هنگامی که برنامه باال می آید ،نوارابزار استاندارد ( Standard
)toolbarرا به عنوان پیش فرض خود نمایش می دهد .تعدادی نوارابزار اضافه بر سازمان هم در نتیجه ی گزینه هایی که شما انتخاب می
20
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
در بخش main menuروی View -> Toolbarsکلیک کرده ،سپس toolbarمورد نظر را انتخاب کنید.
دلخواه دیگر راست کلیک کنید .فهرستی نمایان می شود که می توان در آن نوارابزار دلخواه را انتخاب کرد.
فهرست ها و نوارابزارهای Microsoft Visual Studioرا می توان مطابق میل تنظیم ( )customizeکرد .می توان با اضافه کردن یک
menu itemبه فهرست گزینه ،آن را مطابق میل تنظیم کرد یا با اضافه کردن تنها یک دکمه به نوارابزار ،آن را (سفارشی) تغییر داد .برای
شروع ،روی هر گزینه ای (در main menuیا )toolbarراست کلیک کرده ،سپس گزینه ی customizeرا انتخاب کنید .می خواهیم آیتمی
21
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
برای این کار مراحل زیر را دنبال کنید.
در قسمت ،Toolbars combo boxآن نوارابزاری که میزبان دکمه ی مورد نظر خواهد بود را انتخاب کنید .برای مثال ،نوارابزار .Standard
در لیست ،Controlsروی دکمه ی بعدی کلیک کنید .در این مثالStart / Continue ،
22
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
روی Add Commandکلیک کنید.
در لیست ،Categoriesدسته ای را انتخاب کنید که دکمه ی موردنظر شما را دارد .برای مثالDebug ،
حال ،آیتم منو یا دکمه ی مورد نظر را از لیست Commandsانتخاب کنید .در این مثال ،منظور Start Without Debuggingمی باشد.
23
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
سپس ،روی گزینه ی okکلیک کنید.
24
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
اکنون می توانید روی گزینه ی closeکلیک کنید.
25
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
صفحه شروع ()the Start page
،Start pageبدنه ی اصلی برنامه ی Microsoft Visual C# Express/Microsoft Visual Studioمحسوب می شود .هنگام باال آمدن
برنامه ،تبی را (در باالترین قسمت) مشاهده می کنید که Start pageنام دارد .بخش سمت چپ برنامه دو برچسب دارد :به نام های
New Project...و .Open Project...آن دسته از پروژه هایی که قبالً به وجود آمده و مورد استفاده قرار گرفته اند ،تحت Open Project
به نمایش گذاشته می شوند .هنگامی که در حال کار با پروژه ی خاصی هستید Start page ،در پس زمینه فعال است و توسط یک تب نشان
سپس( ،در ،)main menuگزینه ی View -> Start Pageرا انتخاب کنید.
پس از باال آمدن برنامه ،تعدادی پنجره در اختیار شما قرار می گیرد .پنجره های مزبور مرتب مورد استفاده ی کاربران قرار می گیرند .چنانچه
پنجره ای مناسب کار شما نیست ،می توانید به راحتی آن را از صفحه حذف کنید .برای بستن پنجره نیز همان طور که می دانید باید روی گزینه
تمامی پنجره های انتخابی در فهرست View Menuبه نمایش گذاشته شده.بنابراین ،می توانید پنجره ی دلخواه را از فهرست نام برده
انتخاب کنید.
هنگام کار با پروژه ،از پنجره هایی استفاده می کنیم که هریک کاربردی جداگانه دارند .برخی از پنجره ها با تنها یک آیکون نشان داده می
شوند و بدنه ی اصلی آن ها نمایش داده نمی شود .به منظور مشاهده چنین پنجره ای ،کافی است مکان نمای موس را روی آن قرار دهید .این
26
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
پس از باز کردن پنجره ،نوارعنوان ( )title barای با سه دکمه پدیدار می شود .یکی از دکمه های نام برده Auto hideمی باشد.
27
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
چنانچه پس از باز کردن پنجره متوجه شدید که دیگر به آن نیازی نیست ،می توانید با برداشتن مکان نمای موس از روی آن ،پنجره را محو
کنید .پنجره ی نام برده به حالت پیشین خود باز می گردد .اما ،چنانچه مایلید پنجره ای (حتی پس از برداشتن مکان نمای موس از روی آن) باز
به صورت پیش فرض ،برنامه برخی از پنجره ها را در سمت چپ و برخی دیگر را در سمت راست صفحه قرار می دهد .همچنین ،می توان آرایش
و ترتیب پنجره ها را مطابق میل تغییر داد .برای این منظور ،روی نوارعنوان ( )title barپنجره کلیک کرده و آن را در جهت موقعیت مورد نظر
خود بکشید .همان طور که در تصویر مشاهده می کنید ،برنامه پنج موقعیت مختلف را به تصویر می کشد.
28
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
قرار دادن پنجره در کناره های برنامه (محیط ویژوال استودیو)
برای قرار دادن پنجره در کناره های برنامه ،باید کلیک چپ را روی نوارعنوان پنجره نگه داشته و آن را به ناحیه ی موردنظر بکشید .حال،
مستطیلی آبی رنگ ظاهر می شود که ناحیه ی مورد نظر را نشان می دهد .برای قرار دادن پنجره در دورترین ناحیه ی سمت راست یا چپ،
29
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
یا
30
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
برای قرار دادن پنجره در باالترین یا پایین ترین قسمت صفحه نیز مانند دستورالعمل ذکر شده عمل کنید.
برای داشتن دو پنجره در یک صفحه ،باید پنجره ی جدید را در باال یا پایین پنجره ی موجود قرار دهید .ابتدا ،باید پنجره ای به عنوان پنجره ی
مرجع یا اصلی داشته باشید،سپس پنجره ی دیگری را به پنجره ی موجود اضافه کنید.
31
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
به این تبدیل می شوید.
32
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
پنجره های شناور
بیشتر پنجره ها در یک طرف صفحه قرار می گیرند .با این وجود ،می توان پنجره ای را روی پنجره های دیگر قرار داد .به چنین پنجره ای شناور
می گویند .برای این منظور ،روی نوارعنوان پنجره کلیک چپ را نگه داشته و بکشید ،سپس آن را در جایی وسط صفحه رها کنید.
پنجره ی شناور گزینه ای دارد به نام دکمه ی ( Maximizeبزرگنمایی) .اگر روی این دکمه کلیک کنید ،پنجره تمام صفحه نمایش را اشغال می
کند .این کار را می توانید با دوبار کلیک روی نوارعنوان نیز انجام دهید.
33
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
چنانچه پنجره ای شناور است و شما مایلید آن را در جای مشخصی از صفحه (مثالً سمت راست) ضمیمه /متصل کنید ،باید روی نوارعنوان
چناچه ،پنجره ای به ناحیه ی خاصی از صفحه متصل است و می خواهید آن را شناور کنید ،روی نوارعنوان کلیک راست کرده و گزینه ی Floatرا
انتخاب کنید.
34
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
قرار دادن چند پنجره در یک ناحیه
می توان در یک طرف ص فحه ،چند پنجره را باهم گنجاند .ابتدا ،پنجره ی پایه (اصلی) را بزرگ نمایی کرده و آن را به ناحیه ی مورد نظر متصل
کنید .سپس ،نوارعنوان پنجره را گرفته و آن را به سمت ناحیه ی مقصد بکشید ،تا این که قسمت پایین پنجره ی اصلی دو بخش
35
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
به منظور حذف پنجره ،تب آن را بیرون بکشید.
36
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
برای قرار دادن پنجره در سمت راست یا چپ پنجره ی موجود ،ابتدا پنجره ی فرعی را به محل پنجره ی اصلی (موجود) بکشید .سپس ،کادر
این
37
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
به صورت زیر در می آید.
38
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
پنجره های تب دار ()Tabbed Windows
می توانید کاری کنید که پنجره تب خود را در باالترین قسمت Code editorنشان دهد .این کار را می توان به دو صورت انجام داد.
39
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
40
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
می توان ابتدا راست کلیک کرد و بعد گزینه ی Dock as Tabbed Documentرا انتخاب کرد.
دار ،گرامر ،فرمول ها و قوانین خاص تشکیل شده که برای ساختن جمالت و مفاهیم معنادار باید از آن قوانین پیروی کرد.
زبان های برنامه نویسی متعددی وجود دارند .برخالف زبان انسان ها ،زبان های برنامه نویسی کامپیوتر بسته به اهداف یا نقش هایی که ایفا
سخت افزارها عبارتند از مجموعه قطع اتی که دستور را از زبان برنامه نویسی دریافت می کنند .برخی زبان های برنامه نویسی برای بخش
(سخت افزاری) خاصی تعبیه شده اند و یا محیط خاصی را هدف دستورات خود قرار می دهند .چنین محیطی ،از سیستم عامل خاصی استفاده
می کند که از یک وسیله (مثل موبایل) به وسیله ی دیگر (کامپیوتر) قابل انتقال نمی باشد .برخی زبان های برنامه نویسی هم بخش یا قطعه
برخی زبان ها برای رفع یک مسئله ی خاص طراحی شده اند و توانایی انجام وظایف معمول (زبان های دیگر) را ندارند .برای مثال ،زبان هایی
وجود دارند که فقط قادر ب ه نشان دادن محتویات وب هستند و از آن ها نمی توان برای انجام محاسبات ریاضی و هندسی بهره گرفت .برخی
برنامه ها طوری تعبیه شده اند که تنها با مقدارهای ( )valueخاصی مثل ( trueیا )falseکار می کنند .تعدادی زبان برنامه نویسی هم داریم
C#از آن دسته زبان هایی است که عالوه بر اجرای دستورات ،به حل مسائل نیز می پردازد .این زبان بر روی تمام سیستم عامل ها از جمله
ویندوز قابل اجرا است C# .از جمله زبان هایی است که در Microsoft.NET Frameworkبه کار می رودMicrosoft.NET Framework .
کتابخانه ای از اشیاء است که به کمک آن می توان در کامپیوتر چیزهایی را به وجود آورد یا ترسیم کرد.
پروژه ی کامپیوتری عبارتند از گروهی فایل و شئ که دستورهای مورد نظر را برای انجام عملکرد های معین تعبیه می کند .پروژه ی C#متشکل
از چند فایل است که دستورهای برنامه را دربردارند .یک پروژه ی ساده ی C#دربردارنده ی یک فایل است که تمام دستورات مورد نیاز
برنامه را حمل می کند .این در حالی است که پروژه های ی پیشرفته C#حاوی بیش از یک فایل است.
زبان برنامه نویسی C#به منظور طراحی و نوشتن برنامه های کاربردی DOSبه کار می رود .برای طراحی چنین برنامه ای باید دستورات مورد
42
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
برای راه اندازی برنامه ،Microsoft Visual C# 2010 Expressدستورالعمل زیر را دنبال کنید Start -> (All) Programs -> :
Microsoft Visual Studio 2010 Express -> Microsoft Visual C# 2010 Express
به منظور ایجاد برنامه ی کاربردی جدید ( ،)appدر فهرست گزینه ی اصلی ( )main menuروی گزینه ی File -> New Project...کلیک
کنید.
43
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
روی گزینه ی okکلیک کنید.
هدف از نوشتن برنامه ،دادن دستور (اجرای عملکرد خاص) به کامپیوتر است .البته ،این برنامه را با زبان عادی ( مثالً انگلیسی) و جمالت
معنی دار می نویسیم .به عبارت دیگر ،یک دستور معمولی از متن ساده استفاده می کند ( که شامل حروف الفبا ،ارقام و عالمت های ناخوانا
می باشد).
می توان این دستورات را با کمک برنامه های ویرایشگر متن ( )text editorاز قبیل wordpad ،Microsoft word ،Notepadو
wordperfectنیز نوشت .در برنامه نویسی ،قوانین و دستور هایی وجود دارد که پیروی از آن ها الزامی است .به دستورات مزبور کد هم
گفته می شود.
44
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
در برنامه های Microsoft Visual C# Expressو ،Microsoft Visual Studio Professionalویرایشگر متنی وجود دارد که از آن با نام
code editorیاد می شود .چناچه ،پروژه ی خود را با فرمت console applicationبنویسید ،فایل پیش فرضی به وجود می آید که می توان
آن را تنظیم ( )customizeکرد .اما اگر برنامه ی خود را به عنوان پروژه ای خالی آغاز کنید ،الزم است خود یک فایل به آن اضافه کنید .برای
Main menuرا باز کرده و روی گزینه های Project -> Add New Item...کلیک کنید.
حال ،در قسمت ،solution explorerروی اسم پروژه ی مورد نظر راست کلیک کرده و مکان نمای موس را روی گزینه ی Addقرار دهید،
هریک از دستورهای مذکور ،پنجره ی محاوره Add new itemرا نشان می دهد .حال ،در لیست میانی ،روی گزینه ی Code Fileکلیک کنید.
می توانید اسم فایل مذکور را بپذیرید یا آن را مطابق میل تغییر دهید .پس از کلیک روی گزینه ی ،okپنجره ی سیاهی نمایان می گردد .به
همین شیوه ،می توانید هر تعداد فایل که مایلید به پروژه اضافه کنید.
ایجاد فایل
به منظور افزودن فایل جدید به کد مورد نظر ،به فهرست گزینه ی اصلی ( )main menuمراجعه کرده و روی Project -> Add New
Item...کلیک کنید.
در صورت استفاده از ،visual studioباید آیتم های ( visual C#در لیست سمت چپ) را بزرگ نمایی کرده و روی codeکلیک کنید.
45
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
اکنون ،گزینه ی Addرا انتخاب کنید.
به منظور ایجاد ساده ترین نوع برنامه ی کاربردی ،C#کافی است تنها یک کد پایه ( )basicبنویسید .کد مذکور به این صورت است.
class Exercise
{
)static void Main(string[] args
{
;)"System.Console.WriteLine("Hello world
}
}
کد نام برده بخش های مختلفی دارد که در مباحث بعدی به هریک از آن ها مفصل پرداخته می شود.
کلید واژه ی classدر درس 3معرفی می شود.
46
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
واژه ی Exerciseتنها یک اسم است .درباره ی اسم ها و تمام قوانین مربوط به آن در درس بعدی بحث می کنیم.
این کد را تا حد امکان ساده معرفی کرده ایم .تک تک کلمات و عملگرها در این کد وظیفه ی خاصی را انجام می دهد ولی می توان آن ها را به
نوشتن کد اصلی
class Order
{
)static void Main(string[] args
{
;)"System.Console.WriteLine("Georgetown Dry Cleaning Services
;)(System.Console.ReadKey
}
}
47
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
توضیحات
خط یا پاراگرافی از متن که جزء کد محسوب نمی گردد .در زبان C#دو نوع commentوجود دارد .برای نشان دادن /قرار دادن comment
در (خطی از) متن ،خط مورد نظر را با عالمت //آغاز کنید .هر چه در سمت راست این عالمت قرار بگیرد ،نادیده گرفته می شود .به مثال زیر
توجه کنید.
Commentمذکور در تنها یک خط قابل استفاده است .می توان commentرا با عالمت * /نیز آغاز کرد .این نوع commentبه عالمت */
ختم می شود .هر چه بین این دو عالمت * /و */قرار گیرد ،خوانده نمی شود .با این روش می توان comment ،را در چند خط (بیش از یک خط)
به کار برد .به منظور قرار دادن (افزودن) commentدر خط ،ابتدا روی خط مورد نظر کلیک کنید .حال ،در (قسمت) ،Standard toolbar
گزینه ی Comment Out the Selected Linesرا انتخاب کنید .برای افزودن commentبه خط های مجاور ،روی متن خط های نام برده
راست کلیک کرده ،سپس روی گزینه ی Comment Out the Selected Linesکلیک کنید .به منظور حذف commentها ،ابتدا روی متن
آن کلیک کنید .سپس ،گزینه ی Uncomment the Selected Linesرا از Standard toolbarانتخاب کنید.
ایجاد توضیحات
به منظور ایجاد ،commentفایل مورد نظر را به صورت زیر تغییر دهید.
48
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
مدیریت فایل ها
در برنامه های Microsoft Visual C# 2010 Expressو ،Microsoft Visual Studioپروژه هایی که متشکل از چند فایل هستند ،با
ورچسب های معینی (واقع در قسمت باالی )code editorنمایش داده می شوند.
فایل های نام برده در main menuویندوز نیز قابل مشاهده است.
Solution explorerپنجره ای است که فهرستی از فایل های تشکیل دهنده ی پروژه را به نمایش می گذارد .برای دسترسی به پنجره ی
به main menuمراجعه کرده ،سپس روی گزینه ی View -> Solution Explorerکلیک کنید.
Standard toolbarرا باز کرده ،و گزینه ی Solution Explorerرا انتخاب کنید.
چنانچه Solution Explorer ،در صفحه قابل رویت است ،روی تبِ آن کلیک کنید.
این پنجره از چهار جز شکیل می شود .درست مانند پنجره های دیگر ،بخشی دارد به نام نوارتیتر ( )title barکه در سمت چپ آن سه گزینه
وجود دارد.
با کلیک روی دکمه ی موقعیت پنجره ( ،)window positionفهرستی پدیدار می گردد.
49
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
در صورتی که پنجره ی موردنظر به کناره ی صفحه متصل باشد ،گزینه ی floatفعال می باشد .چنانچه پنجره از قبل در حالت شناور قرار دارد،
گزینه ی floatفعال نمی باشد .پس از کلیک روی گزینه ی floatپنجره ی (متصل به کناره ی صفحه) شناور می شود .پی در پی ،می توانید با
گرفتن و کشیدن titlebarبه وسط صفحه ،آن را از حالت متصل ( )dockedخارج کنید.
به منظور متصل کردن پنجره به کناره ی صفحه titlebar ،را بکشید .زیر سرتیتر ( ،)titlebarفهرستی وجود دارد که به آن نوارابزار ()toolbar
می گویند
گزینه ی Properties
گزینه ی show all files؛ تمام فایل های مخفی ( )hiddenرا نمایش می دهد.
سومین بخش solution explorerبدنه ی اصلی آن است که در آن فایل ها ،فولدرها و منابع تشکیل دهنده ی پروژه به نمایش گذاشته می
شود .به منظور بزرگنمایی گره ( ،)nodeروی اسم آن دوبار کلیک کنید ( یا روی دکمه ی آن کلیک کنید) .برای کوچک کردن گره ،روی آن دوبار
کلیک کنید.
50
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
ریشه ی ( )rootلیست ،در واقع اسم solutionاست .زیر ،rootاسم پروژه ی جاری قرار دارد .در صورتی که solution ،دارای چند پروژه
باشد ،اسم هر یک از پروژه ها زیر solutionنمایش داده می شود .درون پروژه ها :فایل ها ،فولدرها و منابع وجود دارد .اولین آیتم زیر اسم
پروژه Referencesاست .پس از گره ( Referencesارجاعات) ،با اسم کالس ها (ی تشکیل دهنده ی پروژه) مواجه می شویم.
Properties Windows
پنجره ی ، propertiesتمام جزئیات فایل ها و منابع سیستم عامل ویندوز که در پروژه به کار برده شده را نمایش می دهد .برای نمایش آن
چنانچه ،پنجره ی Propertiesنمایان نباشد ،به main menuمراجعه کرده سپس روی View -> Properties windowکلیک کنید.
حال ،اگر پنجره ی ،Propertiesدر صفحه ی نمایش قابل رویت است ،روی تب آن کلیک کنید.
به منظور مشاهده ی ویژگی های سیستم عامل پروژه یا فایل موردنظر(در ،)solution explorerروی شی دلخواه کلیک کنید.
با کلیک روی ،solutionپنجره ی Propertiesاسم و مسیر (مکان قرارگیری فایل) آن را نمایش می دهد .چنانچه ،گزینه ی projectرا انتخاب
اگر روی فایل کلیک کنید ،پنجره ی Propertiesاسم و مسیر فایل نام برده را به نمایش می گذارد.
پنجره ی Propertiesبسته به آیتم انتخابی شما (در )solution explorerقسمت های ( )fieldمختلفی را نشان می دهد .می توان برخی
تنظیمات را در پنجره ی Propertiesدستکاری کرد .چنانچه ،قسمت ( )fieldای غیر فعال شود ،بدین معنا است که دیگر نمی توان آن را
اصالح کرد.
در برنامه های ویرایش گر متن مثل ،Notepadبخشی وجود دارد به نام .open fileچناچه سعی دارید فایل c#را با آن باز کنید ،ابتدا الزم
است که در ،combo boxنوع فایل را به )*( All filesتغییر دهید .سپس ،محل قرارگیری فایل را پیدا کرده و روی openکلیک کنید.
چنانچه فایل مذکور عضوی از پروژه جاری است برای باز کردن آن مراحل زیر را دنبال کنید.
51
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
به main menuمراجعه کرده ،روی Windowو اسم فایل موردنظر کلیک کنید.
در صورت استفاده از Microsoft Visual C# 2010 Expressو ،Microsoft Visual Studioبرای باز کردن فایل در ،main menuروی
گزینه های click File -> Open File...کلیک کنید یا به Standard toolbarمراجعه کرده و روی Open Fileکلیک کنید.
در نتیجه ی هریک از عملیات باال open fileظاهر می گردد .حال ،فایل را از فولدر مرتبط پیدا کرده و روی آن کلیک کنید .اگر visual studio
امکانات باز کردن فایل را داشته باشد آن را داخل رابط ( )interfaceخود نمایش می دهد .ولی اگر نتواند آن را باز کند ،در کامپیوتر به دنبال
برنامه ای که قادر به باز کردن فایل مزبور است می گردد .برای مثال ،اگر سعی کنید فایل ویدئویی را با visual studioباز کنید ،برنامه ی
درباره ی نحوه ی ایجاد برنامه ی کاربردی کنسول ( )console appمطالبی گفته شد .به کمک visual studioمی توان برنامه های کاربردی
متفاوتی ایجاد کرد .به همین دلیل ،باید ابتدابرای انتخاب گزینه دلخواه پنجره ی محاوره ی New Projectرا باز کنید.
Code Snippet
visual studioدارای skeleton codeهای فراوانی است که می توان تنظیم کرد ( )customizeو به کار برد .کد اصلی ()primary code
را برای شما می نویسد و تمام رفتار های پیش فرض مورد نظر را به آن اضافه می کند .پس از این که skeleton codeعملیات باال را انجام
داد ،می توانید هر بخشی را مایلید حذف کرده یا تغییر دهید .به منظور دسترسی به skeleton codeهای نام برده ،روی قسمتی از فایل که
می خواهید آن ( )skeleton codeرا اضافه کنید راست کلیک کرده ،سپس گزینه ی insert snippetرا انتخاب کنید.
52
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
در فهرستی که نمایان می گردد ،روی visual c#کلیک کنید.
53
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
روی کد دلخواه دوبار کلیک کنید.
چنانچه ،از قبل تعدادی کد نوشته اید و مایلید که آن ها را اصالح کنید یا کدهای دیگری به آن اضافه کنید code editor ،گروهی skeleton
codeدر اختیار شما قرار می دهد .برای این منظور ،روی کد دلخواه (کدی که می خواهید اصالح کنید) راست کلیک کرده ،سپس گزینه ی
surround withرا انتخاب کنید .اکنون ،لیستی پدیدار می شود که گزینه ی موردنظر شما در آن درج شده.
رنگ کدها
کدها به صورت اساسی در محیطی گسترده با پس زمینه ای سفید نوشته می شوند .در این محیط است که شما با استفاده از صفحه کلید ،کد
موردنظر را با کاراترهای خوانا و معمول درج می کنید code editor .به منظور تمیز دادن خط ها و کلمات متن از رنگ های مختلف استفاده می
کند.
می توان این رنگ ها را تنظیم کرد .برای این منظور main menu ،را باز کرده و گزینه ی Tools -> Options..را انتخاب کنید .در پنجره ی
،optionsقسمت ،Environmentروی گزینه ی fonts and colorsکلیک کنید .برای تنظیم رنگ دسته ( )categoryی موردنظر ،در قسمت
54
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
،Display Itemsدسته ی دلخواه را انتخاب کنید .حال ،می توانید رنگ انتخابی را در لیست پایین افتادنی item foregroundتنظیم کنید.
چنانچه مایلید پس زمینه ی کلمات دسته ی مورد نظر رنگی شود ،به قسمت item backgroundمراجعه کنید.
در هر دومورد ،فهرست ثابتی از رنگ های معین پدیدار می شود .اگر مایلید رنگ جدیدی به این لیست اضافه شود ،روی دکمه ی custom
کلیک کنید .حال ،پنجره ی محاوره colorنمایش داده می شود که می توان در آن رنگ دلخواه را به وجود آورده و اضافه کرد.
توگذاری ()Indentation
ویژه گی دیگر که به خوانایی هر چه بیشتر برنامه ی شما کمک می کند توگذاری ( )indentationاست indentation .در واقع به گروه بندی
خط های کد مورد نظر بر مبنای دسته ی مرتبط گفته می شود .به منظور تعیین حد و مرز ( )delimitکدها ،باید آن ها را به اندازه ی دو جای
خالی یا یک تَب ( )tabتو بگذارید .توگذاری ( )indentationباید مراتب افزایشی داشته باشد .به عبارت دیگر ،خطی که زیر مجموعه ی خط
برای مدیریت indentationکد main menu ،را باز کرده و روی گزینه ی Tools -> Options...کلیک کنید .در لیست سمت چپ C# ،را باز
کرده و بعد از بزرگ نمایی گزینه ی ،Formattingروی indentationکلیک کنید .حال ،می توان گزینه های سمت راست را تنظیم کرد.
55
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
پس از ایجاد تغییرات مورد نظر ،روی گزینه ی okکلیک کنید.
اگر برنامه ی دلخواه خود را با ( text editorویرایش گر متن) ایجاد می کنید ،باید فایل های آن را در فولدری ذخیره کنید .در نسخه های قبلی
2221( visual studioو ،) 2222کاربر مجبور بود خود به صورت رسمی یک پروژه ایجاد کند و بعد آن را ذخیره کند .بعد ها مایکروسافت
دریافت که خیلی از پروژه هایی که برنامه نویسان به وجود می اورند ،جنبه ی آزمایشی دارد .بنابراین ،امکان جدیدی به برنامه اضافه کرد که
به کاربر اجازه می دهد یک پروژه به صورت موقت ایجاد کند و تصمیم بگیرد که آن را saveکند یا نه .این کار ،پروژه را در رسانه ی داده
پس از طی کردن تمام مراحل نصب ،visual studio 2010در Documentsفولدری به نام Visual Studio 2010به وجود می آید .فولدر
doctmentsرا با نام های دایرکتوری شخصی ( )personal derictoryیا personal driveنیز می شناسند .در فولدر Visual Studio
subfolder ،2010دیگری به projectsبه وجود می آید .در این دایرکتوری است که پروژه های شما به صورت پیش فرض ذخیره می شوند.
56
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Save allکلیک کنید .پی در پی ،می توانید main به منظور ذخیره سازی پروژه ،به Standard toolbarمراجعه کرده ،و روی دکمه ی
menuرا باز کرده و گزینه ی File -> Save Allرا انتخاب کنید .چناچه ،پروژه ،قبالً ذخیره شده ولی می خواهید آن را تحت اسم دیگری ذخیره
کنید باید این دستور را دنبال کنید File -> Save project name As... :
بازکردن پروژه
Solution
Solutionبه منظور هماهنگ سازی (ایجاد هماهنگی بین) بخش/جنبه های مختلف یک برنامه ( )appبه کار می رود.هر پروژه ،تنها یک بخش
از برنامه ی کاربردی مورد نظر را تشکیل می دهد .عالوه بر کدی که می نویسید ،الزم است آیتم های دیگری نیز به برنامه اضافه کنید.
توجه داشته باشید که اسم پروژه و solutionیکسان می باشد .می توانید اسامی آن ها را در solution explorerمشاهده کنید.
57
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Solutionو پروژه ممکن است اسامی متفاوت داشته باشند.به منظور تغییر اسم ( ،solutionدر ،)solution explorerروی اولین گره
( )nodeکلیک کنید .سپس) ،در پنجره ی ،)Propertiesروی Nameکلیک کرده و اسم دلخواه را وارد کنید.
الزم به ذکر است که اسم مزبور به طور کامل موقتی است .اگر می خواهید solutionرا به صورت دائم ذخیره کنید ،دو روش پیش روی شما
وجود دارد.
در صورتی که solutionرا برای اولین بار ذخیره می کنید ،پنجره ی Save Projectپدیدار می گردد .به صورت پیش فرضMicrosoft ،
،Visual Studioدایرکتوری شخصی شما را به عنوان مسیر ذخیره سازی فایل انتخاب می کند .به این مسیر locationمی گویند .در
locationنام برده Microsoft Visual Studio ،فولدری به وجود می آورد به عنوان solutionپروژه مورد نظر .حال solution ،باید در فولدر
مختص به خود قرار گیرد .همان طور که پیش توضیح دادیم Microsoft Visual Studio ،از اسم پروژه برای solutionنیز استفاده می
58
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
کند.برای جلوگیری از این رخداد ،می توانید رشته ( )stringرا در کادر متن ( Solution Name )textboxتغییر دهید .به خاطر داشته باشید
که اسم دلخواه را باید در کادرمتن Nameوارد کنید .به مثال زیر توجه کنید.
زمانی که (برای اولین ) پروژه ای را ذخیره می کنید Microsoft Visual C# ،به صورت پیش فرض فولدری برای آن در مسیر My
Documents\Visual Studio 2008\Projects folderبه وجود می آورد .هم چنین از اسم solutionبرای نام گذاری فولدر استفاده می
کند .تعدادی فایل جدید ایجاد کرده و آن ها را در فولدر تازه به وجود آمده ذخیره می کند .سپس ،داخل فولدر subfolder ،solution
جدیدی با نام پروژه ی مورد نظر ایجاد می کند .جدا از ( subfolderای که اسم آن Projectاست) ،فولدر دیگری به نام debugبه وجود می
آید .همچنین فولدر دیگری به اسم ،Debugدر subfolderاسم پروژه به وجود می آورد.
چناچه ،پروژه ی مورد نظر از قبل ذخیره شده باشد ،ولی مایلید که اسم solutionرا عوض کنید ،به main menuمراجعه کرده و روی File -
> Save solution-name.sln As..کلیک کنید .این کار منجر به باال آمدن کادر Save asمی شود که در آن اسم solutionآماده ی تغییر
ساختن پروژه
پس از ایجاد پروژه و نوشتن کد ،برای مشاهده ی نتیجه ،ابتدا باید به ساختن برنامه ( )appبپردازید .این کار یک فایل اجرایی
زبان ،C#به منظور برنامه نویسی (ساختن برنامه ی جدید) امکانی به نام ( compilerمترجم) را در اختیار کاربر قرار می دهدcompiler .
یک برنامه ی کامپیوتری است که خود از زیربرنامه ( )subprogramهای داخلی متعدد دیگری تشکیل شده .اولین و مهم ترین این زیربرنامه
ها ) parserتجزیه کننده) خوانده می شود .وظیفه ی parserاسکن یا پوییدن فایلی است که (خود بخشی از) برنامه را دربردارد .دستور
نحوی ( ،)syntaxکلیدواژه ها و تمامی کلمات ناشناس توسط parserبررسی می شوند .اگر parserدر جستجو ی خود مشکل یا خطایی را
پیدا کند ،یا همان جا متوقف می شود و یا لیستی از تمام مشکالتی که به آن ها برخورده تهیه می کند ،سپس لیست مذکور را برای شما به
59
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
نمایش می گذارد .گاهی تنها به خطی اشاره می کند (تنها شما را به خطی ارجاع می دهد) که مشکل در آن یافت شده و گاهی نیز به خطی
ارجاع می دهد که مشکل اثر خودش را در آن جا نشان داده ولی خود مشکل در جای دیگری یافت می شود .البته ،نحوه ی حل مشکالت فوق را
اگر parserدر اسکن خود با مشکلی مواجه نشد (یا پس از اینکه مشکل مزبور را برطرف کردید) ،برنامه ی نام برده ( )parserنتایج بدست
آمده را به compilerارسال می کند .حال compiler ،برنامه ی دیگری به نام linkerرا فرا می خواند linker .کلیه ی فایل های برنامه را
بررسی می کند (چه یک فایل داشته باشد چه چند فایل ) .سپس linker ،تعدادی از فایل های ارسال شده توسط ( C# compilerتنها آن
دسته فایل هایی که برنامه برای فعالیت ،نیاز مبرم به آن ها دارد و نه کلیه ی فایل ها یی که Net Framework.فراهم می کند) را با فایل
های شما ادغام کرده تا دستورات شما را درست دریافت کند و نتایج دلخواه شما را ارائه دهد .در صورتی که مشکل جدی ای وجود نداشته
باشد compiler ،برنامه ی مورد نظر را می سازد .به خاطر داشته باشید که این بدین معنا نیست که اصالً هیچ مشکلی وجود ندارد ،بلکه
compilerمشکلی پیدا نکرده و هنوز احتمال این وجود دارد که نتیجه ی حاصل مورد دلخواه شما نباشد.
باید در نظر داشته باشید که تمام برنامه های باال ( )debugger ،parser ،linkerهمه گی زیر مجموعه ی برنامه ی بزرگتری به نام compiler
هستند .از این به بعد ،از compilerبه عنوان برنامه ای یاد می شود که زبان (انگلیسی) را به زبان کامپیوتر ترجمه می کند.
Compilerای که برنامه ی Microsoft.NET Frameworkارائه می دهد cscگفته می شود .مشابه خیلی از برنامه های دیگر،
compilerپسوند exe.را دارد Csc .اسم استانداردی برای compilerنمی باشد .به این معنا که C# compilerاسم دیگری دارد :
به منظور نوشتن برنامه از طریق پنجره ی فرمان ( ،)command promptاز csc.exe compilerاستفاده می کنیم .پس از دانلود NET .
Frameworkاز سایت رسمی مایکروسافت ،باید آن را روی رایانه ی خود نصب کنید .برنامه ی مورد نظر ما csc.exeاست .مسیر نصب این
باید مسیر csc.exeرا به مسیر Environment Variablesاضافه کنید .برای شروع،می توان از ابزاری همچون windows explorerکمک
مسیر مورد نظر را از باالترین combo boxانتخاب کرده و آن را در قسمت clipboardکپی کنید .پنجره ی control panelرا باز کرده و روی
60
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
حال ،در قسمت ،system and securityروی گزینه ی systemکلیک کنید.
پس از نمایان شدن پنجره ی ،systemگزینه ی change settingرا انتخاب کنید .اکنون ،تب Advancedرا باز کرده و روی
در بخش ،System Variablesروی Pathدو بار کلیک کنید ،یا یک بار روی آن کلیک کرده سپس Editرا انتخاب کنید.
61
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
دکمه ی Endرا فشار داده ،عالمت ";" را تایپ کنید .حال ،مقدار ( )valueای را که از clipboardکپی کرده بودید را در این قسمت پیاده
کنید (.)paste
62
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
سه بار روی okکلیک کنید.
پنجره ی فرمان ( )command promptرا باز کنید .حال ،برای وارد شدن به درایو اصلی ( CD\ ،)root driveرا تایپ کرده و دکمه ی Enter
را فشار دهید CD\ .را تایپ کرده و دکمه ی spaceرا فشار دهید و به دنبال آن فولدر (یا )subfolderهایی که فایل در آن قرار دارد را در
این قسمت درج کنید .سپس دکمه ی Enterرا فشار دهید .برای ترجمه ( csc ،)compileرا به دنبال اسم فایل و پسوندش (با تایپ
فایلی که در نتیجه ی این عملیات تولید می شود پسوند exe.را دارد .به صورت پیش فرض ،اسم این فایل با فایلی که ابتدای کار استفاده
کردید یکی است .برای دریافت برنامه ی اجرایی ( )executableای با نام دلخواه ،پس از کاراکتر /out: ،cscرا تایپ کرده و به دنبال آن اسم
دلخواه ،به عالوه ی پسوند ،exe.فاصله ( ،)spaceاسم فایلی که ابتدای کار ایجاد کرده بودید به همراه پسوند آن را وارد کنید .فرمول باال
NameOfExecutateنشانگر اسم دلخواه executableشما می باشد.چنانچه اسم مورد نظر تنها یک کلمه است ،می توانید به راحتی آن را
تایپ کنید .ولی اگر اسم متشکل از چند کلمه است ،باید آن را داخل عالمت " قرار دهید.
اگر برای تولید برنامه ی مورد نظر از text editorاستفاده می کنید و تعداد فایل هایی که ایجاد کرده اید زیاد است ،باید هنگام انجام فرایند
ترجمه ( ،)compilingبه تک تک فایل ها ارجاع دهید ( .)referenceبرای این منظور ،الزم است که اسم هر فایل را به همراه پسوند مربوطه
63
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
اجرای پروژه
پس از ساختن پروژه ،شما و کاربرانتان می توانید آن را اجرا کنید .به منظور اجرای پروژه( ،از طریق ،)command promptاسم فایل را به
در صورتی که با visual studioکار می کنید ،برای اجرای برنامه ،به main menuمراجعه کرده و روی گزینه های Debug -> Start
Debuggingکلیک کنید.
اجرای برنامه
به منظور اجرای برنامه main menu ،را باز کرده و گزینه ی Debug -> Start Debuggingرا انتخاب کنید.
متغییرها ()Variables
64
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
مبنع ذخیره سازی
کامپیوتر یک وسیله ی الکترونیکی است که به حل مشکل خاصی می پردازد یا وظیفه ی مشخصی را انجام می دهد .برای مثال ،یک دستگاه
تناسب اندام به شخص کمک می کند ،هیکل خود را رو فرم نگه دارد یا یک دوربین دیجیتال از چیزهای مختلف عکس می گیرد.
وسایل الکترونیکی به منظور حل مسائل عمومی نیز به کار می روند .برای مثال ،از رایانه ی شخصی برای انجام کارهای عمومی مثل محاسبات،
پردازش کلمه ،یا ذخیره سازی بانک های اطالعاتی استفاده می شود.
برای انجام وظایف مختلف ،کامپیوتر باید مقدارهای ( )valueمشخصی دریافت کند .این کار ممکن است توسط شخصی صورت بگیرد که دستوری
را از صفحه کلید تایپ می کند (به عنوان مثال از دستگاه تناسب اندام ،تلفن همراه ،یا کامپیوتر شخصی) .در برخی از موارد ،مقادیر موردنظر
به منظور مدیریت این ارتباطات ،کامپیوتر از صفحه ی تختی به نام motherboardاستفاده می کند .خیلی از بخش های کامپیوتر به این تخته
ی اصلی متصل هستند و از آن دستور دریافت می کنند .بخش دیگری وجود دارد که وظیفه ی اصلی آن پردازش و انجام محاسبات است که به
حال ،مقادیری که کامپیوتر دریافت می کند باید در قسمتی به نام memیا yیا حافظه ذخیره شود .رایانه از دو نوع حافظه برای این منظور
استفاده می کند .حافظه ی موقت و حافظه ی پایدار .از حافظه ی موقت برای ذخیره کردن اطالعاتی استفاده می شود که حالت موقتی داشته و
پس از گذشت زمان مشخصی پاک می شوند .برای مثال ،حافظه ی نام برده اطالعات را هنگامی که رایانه روشن است در خود حفظ می کند و آن
را تا زمانی که کامپیوتر روشن است نگه می دارد ولی به محض خاموش شدن رایانه اطالعات مزبور پاک می شوند.
حافظه ای که اطالعات و مقادیر به صورت موقت در آن ذخیره می شود random access memیا yیا RAMنامیده می شود.
فرض کنید ،حافظه ی کامپیوتر یک سینی کیک است متشکل از چند بخش ،که هریک حامل چیزی است.
توجه داشته باشید که حافظه بزرگ تر است یک کیک است و از میلیون ها جای خالی تشکیل شده.برنامه نویس مدام به compilerدستور می
دهد که مقادیر را به صورت موقتی در RAMذخیره کند .اگرچه اندازه ی حافظه ی موقت چندان بزرگ نیست ،باید به خاطر داشته باشید جای
زیادی برای ذخیره ی اطالعات الزم دارد .در واقع ،این تنها برنامه ی شما نیست که از RAMاستفاده می کند .برای مثال ،هنگامی که رایانه ی
خود را راه اندازی می کنید ،سیستم عامل ( )windowsو دیگر برنامه ها ی آن RAMرا اشغال می کنند.
هنگامی که برنامه ای را اجرا می کنید compiler ،بخشی از RAMرا به آن برنامه اختصاص می دهد.
65
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
به این خاطر که برنامه های زیادی از RAMاستفاده می کنند ،به منظور ذخیره سازی مقادیر در آن ،باید اطالعاتی در اختیار آن قرار دهید .باید
مقدار حافظه ای را که به آن نیاز دارید مشخص کرده و اسم معینی برای آن قسمت خاص از حافظه که valueها در آن ذخیره می شود انتخاب
معرفی متغییرها
Microsoft Visual Studio 2010 یا Microsoft Visual C# 2010 Express ی .8برنامه
.2به منظور ایجاد برنامه ی کاربردی ( )appجدید ،در Start Pageروی گزینه ی New Projectکلیک کنید.
.6به نظور ایجاد فایل ویژه ی کد مورد نظر ،به main menuمراجعه کرده و projectرا انتخاب کنید.
class Order
{
)static void Main(string[] args
{
;)"System.Console.WriteLine("Georgetown Dry Cleaning Services
;)(System.Console.ReadKey
}
}
66
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
نام گذاری متغییر ها
کلماتی وجود دارند که از آن ها نباید.متغییرها باید نام مشخصی داشته باشند و برای ایجاد نام برای آن ها باید از قوانین خاصی پیروی کرد
این کلیدواژه ها در زیر فهرست.تحت هیچ شرایطی به عنوان نام متغییر استفاده کرد زیرا خود برنامه کلیدواژهای مزبور را به کار می برد
.شده
(methods)
(generic)
(foreach) (variable)
(generic)
به این خاطر که. استفاده از آن ها به شما توصیه نمی شود، نیستندC# واژه های دیگری هستند که با وجود این که جز کلیدواژه های برنامه ی
contextual ( از واژه های داده شده به عنوان کلیدواژه های متنی.) در کد شودconflict( به کار بردن آن ها ممکن است منجر به بروز اختالل
)(generic
get join
همان طور که پیش تر ذکر شد ،اسم گذاری برای هر چیزی در برنامه نویسی قوانین خاص خود را دارد.قوانین استانداردی هست که توسط C#
تعریف می شوند ولی شما می توانید قوانینی را بر مبنای سلیقه ی خود نیز به وجود بیاورید .قوانینی که برای تعیین اسم متغییر باید پیروی
در ،C#نام ممکن است از تنها یک عالمت ( _ ) ساخته شود .با این وجود ،توصیه می شود از این کار خودداری کنید زیرا خواندن کدی
از به کار بردن این عالمت ها در نام متغییر خودداری کنید}، {، ;، ]، [، >، <، @، \، #، +، )، (، *، &، ?، %، $، /، "، !،| .
در صورتی که نامی متشکل از بیش ازیک کاراکتر باشد ،باید با حرف یا _ شروع شود.
پس از آغاز کاراکتر با _ یا حرف ،نام می تواند از ترکیبی از حروف ،ارقام ( ،1 ،4 ،2 ،3 ،1 ،1 ،2 ،8 ،2یا ،) 9و /یا _ تشکیل شود.
عالوه بر قوانین باال ،برنامه نویس می تواند قوانین خود را تعریف کند .ولی در تعریف همین قوانین باید محدودیت های ذکر شده در نظر
گرفته شود.
اگر نامی در تنها یک کلمه خالصه شود ،اکثر برنامه نویسان از حروف کوچک استفاده می کنند.
68
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
زمانی که نام متغییر متشکل از چند کلمه است ،بیشتر برنامه نویسان از camel notationاستفاده می کنند که در آن اولین کلمه با
حروف کوچک نوشته می شود و اولین حرف کلمات بعدی همگی با حروف بزرگ نوشته می شوند.
زبان C#به کوچک بزرگی حروف حساس است ،یعنی کلمات Case ،caseو CASEبا هم کامل متفاوت اند .برای مثال main ،همیشه
Mainنوشته می شود.
برنامه های زبان C#نتایج خود را در پنجره ی DOSبه نمایش می گذارند .به مثال زیر توجه کنید.
)(System.Console.Write پرانتز داخل را آن توانید می فوق، ی پنجره در معینی مقدار دادن نشان برای
class Exercise
{
)(static void Main
{
;)System.Console.WriteLine(248
;)System.Console.Write(1
}
}
69
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
اگر داخل پرانتز )( System.Console.WriteLineرا خالی بگذارید ،خطی تهی نمایش داده می شود.
برنامه ی کامپیوتر عبارتند از مجموعه ای دستور که برای رایانه انجام کار مشخص ،زمان اجرای آن و نحوه ی پیاده سازی آن را معیین می کند .این
برنامه نویس است که دستورها را می نویسد .همان طور که پیش تر نیز بیان شد ،می توان دستورات مزبور را در برنامه ی text editیا ،البته
بر مبنای قوانین استاندارد زبان C#ولی با زبان شناس مانند انگلیسی نوشت .برای مثال ،می توان دستوری نوشت که از کامپیوتر درخواست
می کند عددی را در حافظه ذخیره کند .تمام دستوراتی که می نویسید باید به کامپیوتر منتقل شود.
مستحضر هستید که اشخاص دستورهای مختلفی می نویسند .همچنین C# ،تنها زبان برنامه نویسی نیست ،و برنامه نویسان سرتاسر دنیا از
زبان های مختلف برای دادن دستور به رایانه استفاده می کنند .کامپیوتر برای درک تمام این زبان ها و تفسیر تمام دستورهایی که از این برنامه
ها ارسال می شود ،از زبان مختص به خود استفاده می کند که تمام برنامه ها باید آن را بشناسند و از آن پیروی کنند .زبان های داده شده آن
جور که باید از مسئله ی فوق پیروی نمی کنند .برای مثال C# ،ک ه از زبان انگلیسی استفاده می کند ،دستورات خود را به برنامه ی میانجی /
واسط ای به نام Assemblerتحویل می دهد assembler.دستورات را به نسخه ی فشرده تر تبدیل می کند که با وجود استفاده از لغات
جدید ،آن هم به زبان انگلیسی می باشد .کامپیوتر دوباره نسخه ی فشرده را به ورژنی ساده تر تبدیل می کند و در اختیار رایانه قرار می دهد.
زبان ساده شده ای که کامپیوتر استفاده می کند ،متشکل از ترکیبی از 8ها و 2ها می باشد ،یعنی assemblerباید دستورات c#را به 2و 8
با سیستم هایی که از ده رقم 1 ،4 ،6 ،5 ،4 ،1 ،2 ،8 ،2و 1استفاده می کنند آشنایی دارید .ترکیبی از این ده عدد می تواند هر رقمی که شما
دوست دارید بسازد .به این خاطر که زبان کامپیوتر از 82رقم استفاده می کند به آن سیستم decimalیا دهگانی می گویند.
همان طور که پیش تر ذکر شد ،زبان کامپیوتر از ترکیب دو مقدار 2و 8استفاده می کند .به چنین سیستمی ،سیستم دوتایی یا binaryمی
گویند 1001،10 ،1 .یا 1010110111نمونه هایی از این سیستم می باشند .هر مقداری که به کامپیوتر داده می شود باید ترکیبی از 2و 8
همان طور که تصور می کنید نمایش دادن یک رقم بزرگ کار بسیار دشواری است .یک روش برای این منظور ،از 82عدد سیستم دهگانی و 6
حرف از الفبای انگلیسی استفاده می کند ، D، E، C، B،A .و Fیا e، d، c، b،aو .fبه این معنا که سیستم فوق از 86کاراکتر برای ایجاد یک
70
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
رقم استفاده می کند .به همین دلیل است که به آن سیستم hexadecimalیا مبنای 86می گویند .برای این که فرایند تشخیص یک رقم مبنای
86از کلمه آسان شود ،رقم داده شده باید با 0xآغاز شود.نمونه های آن به این صورت است.0x962AAED3 ،0xED8 ،x22 .
یک از ویژه گی های رقم این است که مشخص می کند آیا از 2کوچکتر است ،با آن برابر است یا از آن بزرگتر است .عددی که کوچکتر از صفر
است منفی محسوب می شود .چنین رقمی به دنبال عالمت – می آید .چنانچه ،عددی از صفر بزرگتر بود مثبت تلقی می گردد .چنین رقمی به
دنبال عالمت +می آید .به ارقامی که یکی از این دو عالمت را به یدک می کشند signedیا عالمت دار می گویند .هر عددی هم که هیچ یک از
این دو عالمت را نداشته باشد unsignedیا مثبت اتالق می گردد .برای مثال ،عدد 2بدون عالمت یا unsignedاست.
تعریف متغییرها
همان طور که پیش تر ذکر شد ،برای ذخیره سازی مقدار ( )valueمعینی در حافظه ابتدا باید مقدار حافظه ی مورد نیاز را مشخص کنید ،سپس
باید برای آن اسم انتخاب کنید .مقدار حافظه ی مورد نیاز را ( data typeنوع داده) می گویند .مقدارهای متفاوت ،مقدار حافظه ی متفاوت می
طلبد .این را هم گفتیم که رایانه مقدار را 2و 8می بیند .آن قسمت حافظه که تنها یک 2یا 8در خود جای می دهد bitخوانده می شود.
هنگامی که آن شی خالی است bit ،مقدار 2را نشان می دهد و زمانی که پر است ،مقدار .8
تعریف متغییر
با به کاربردن ترکیبی از bitها ،به compilerپیغام می دهید که به متغییر نیاز دارید .از چنین فرایندی به عنوان ()declaring a variable
تعریف متغییر یاد می شود .همان طور که قبل توضیح داده شد ،مقدار حافظه ای که به آن نیاز دارید data typeگفته می شود .بنابراین،
71
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
هنگام تعریف متغییرباید نوع داده ی ( )data typeدلخواه را مشخص کنید .در ،C#نوع داده ( )data typeبا یک کلیدواژه نمایش داده می
شود.
اگر نوع مقداری که مایلید در حافظه ذخیره شود را می دانید ،از فرمول زیر پیروی کنید.
;DataTypeVariableName
اگر نمی خواهید نوع مقدار را مشخص کنید ،گزینه های دیگری برای شما فراهم است.
همان طور که از اسم آن پیدا است ،مقدار دهی اولیه عبارتند از ذخیره سازی مقدار اولیه در جای (مشخص آن( .بیش تعریف شده به منظور
نوع داده ،به دنبال آن اسم متغییر ،عالمت = ،مقدار دلخواه ولی مناسب را تایپ کنید.
class Exercise
{
)(static void Main
{
;DataTypeVariableName = DesiredValue
}
}
با این روش ،شما می توانید متغییر را در ابتدای کار با مشخص کردن اسم و نوع داده تعریف کنید و در انتهای آن عالمت نقطه ویرگول
قرار دهید .سپس ،در خطی دیگر ،اسم متغییر را تایپ کرده و به دنبال آن عالمت = ،و مقدار مورد نظر را وارد کنید.
class Exercise
{
)(static void Main
{
;DataTypeVariableName
;VariableName = DesiredValue
72
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
}
}
ابتدا کلیدواژه ی varرا تایپ کرده و به دنبال آن ،اسم متغییر ،عالمت = و مقدار معین را درج کنید.
class Exercise
{
)(static void Main
{
;varVariableName = DesiredValue
}
}
این بار باید تمام مراحل را یکجا انجام دهید .در این مورد ،نمی توان ابتدا اسم متغییر را با قرار دادن varو نقطه ویرگول (;) تعریف
کرده و بعد (در خطی دیگر) مقدار دهی اولیه متغییر را انجام دهید .با این کار ،پیغام خطا دریافت می کنید.
class Exercise
{
)(static void Main
{
;varVariableName
دو گزینه ی پیش روی دیگر نیز ،استفاده از کلیدواژه های objectیا dynamicمی باشد.
پس از تعریف و مقدار دهی اولیه ی متغییر compiler ،مقدار آن متغییر را حافظه ای که برای آن اختصاص یافته ذخیره می شود .حال ،می توان
می توان با اضافه کردن عالمت سوال (؟) به نوع داده ( )data typeمتغیر موردنظر ،متغیر را طوری تعریف کنید که مقدار تهی ()null value
داشته باشد .برای این منظور زبان C#کلیدواژه ی nullرا در اختیار شما قرار می دهد.
class Exercise
{
73
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
)(public static void Main
{
;DataType?VariableName= null
// You can use the variable
}
}
class Exercise
{
)(public static void Main
{
;DataType?VariableName
;VariableName= null
// You can use the variable
}
}
آنچه اهمیت دارد آن است که مقدار پیش از به کاربردن متغیر به آن اختصاص داده شود.
Byte
اگرچه یک bitقابل دسترس و استفاده است ،باید به خاطر داشت که نمی توان در آن مقدار ذخیره کرد به این معنا که نمی توان از compiler
خواست که مقدار 8را در یک bitذخیره کند .این امر به این خاطر است که ،حتی کوچکترین مقدار C#نیز به بیش از یک bitبرای ذخیره شدن
نیاز دارد .ترکیبی کوچکتر از چهار bitوجود ندارد (در برخی زبان ها یا پیاده سازی زبان assemblyبه ترکیب چهار nibble ،bitگفته می
شود).
با ایجاد ترکیبات چهارتایی از پر ( )8و تهی ( ،)2همگی 82ترکیب به دست می آید.
در این ترکیبات چهارتایی bit ،ها 2 ،8 ،2و 1شمرده می شوند bit .ای که در راست ترین کناره یا موقعیت قرار دارد ( bit ،)2رده پایین خوانده
آخرین bitیا bitای که در چپ ترین موقعیت قرار دارد ( bit ،)1رده باال خوانده می شود (.)HIBIT
74
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
اگر بخواهیم ترکیبات چهار bitای را با سیستم دودویی ( )binaryنمایش دهیم به این نتایج دست می یابیم ،2822 ،2288 ،2282 ،2228 ،2222
،8888 ،8882 ،8828 ،8822 ،8288 ،8282 ،8228 ،8222 ،2888 ،2882 ،2828که همگی 82ترکیب به دست می آید .با فرمت دهدهی ( )decimalترکیبات باال
این نتایج را به دست می دهد ،81 ،81 ،82 ،88 ،82 ،1 ،1 ،4 ،2 ،3 ،1 ،1 ،2 ،8 ،2 :و .83حال ،با فرمت ( hexadecimalمبنای )82
75
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
14 1110 0xE
البته ،باید در نظر داشته باشید که با ترکیبات چهارتایی هیچ کاری نمی توان کرد .زیرا ترکیبات بیان شده بسیار کوچک هستند و گنجایش
ذخیره هیچ چیز را ندارد .به دو دلیل درباره ی آن بحث کردیم :اول اینکه ،باید بدانید که عدد 82از کجا سر رشته می گیرد .دوم اینکه ،پیش
ترکیبی از 1بیت
یک byteترکیبی از bit 1است که کنار هم قرار گرفته .اولین bit ( bitای که در راست ترین قسمت قرار گرفته ) 2و آخرین ( bitچپ ترین
4 ) bitمی باشد.
76
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
2کم اهمیت ترین bitاست که به آن LOBITنیز می گویند 4 .مهم ترین bitمحسوب می شود و نام دیگر آن HIBITاست.
ترکیبات 1تایی با سیستم ،22228222 ،22222888 ،22222882 ،22222828 ،22222822 ،22222288 ،22222282 ،22222228 ،22222222 :binary
22228888 ،22228882 ،22228828 ،22228822 ،22228288 ،22228282 ،22228228تا .88888888نمایش دادن یک عدد بزرگ با فرمت دودویی ،خواندن
آن را سخت می کند .روش مناسب تر ،دسته بندی آن ها در گروه های چهارتایی است به این صورت 8288 2822 = 28228288
به منظور ارزیابی تعداد ترکیبات در فرمت دهدهی ( ،)decimalعدد ( 2که نشانگر decimalاست) ،را به توان bitموردنظر (،1 ،1 ،2 ،8 ،2
27 + 26 + 25 + 24 + 23 + 22 + 21 + 20
= 255
بنابراین 233 ،ترکیب احتمالی bit 1ای داریم .ترکیبات باال را می توان با فرمت hexadecimalنیز حساب کرد ، 0xA،...،0x2،x12 :
77
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Minimum 0 0x0 0000
حداقل مقدار حافظه اختصاص داده شده (توسط )intel computerبه منظور ذخیره سازی byteمی باشد .همان طور که مستحضر هستید،
یک byteمتشکل از bit 1متوالی و کنارهم قرار گرفته است .مقدار حافظه ای که به اندازه ی یک byteدر اختیار شما قرار داده می شود ،تنها
گنجایش ذخیره کردن یک نشانه (که بر روی صفحه کلید درج شده است) را دارد .این نشانه ها ،که به آن ها کاراکتر هم گفته می شود،
توسط ،ASCIIکد استاندارد آمریکایی به منظور تبادل اطالعات تعبیه شده اند .اما باید در نظر داشت که ASCIIاز تنها 821عدد ( decimal
بر مبنای فرمت bit 4ای ) استفاده می کند (از 2تا .)824
کلیه ی کاراکترهایی که در صفحه کلید مشاهده می کنید ،به عنوان یک مقدار عددی نمایش داده می شود ،اما هریک از این نشانه ها چه
عدد ،چه حرف و چه عالمت همگی کاراکتر محسوب می شوند .برای نمایش دادن هر کاراکتری در صفحه ی نمایش ،می توان آن را با )(Write
یا )( ،WriteLineارسال کرد ( )passو کاراکتر مورد نظر را در عالمت (' ') قرار داد.
class Exercise
{
)(public static void Main
{
;)'System.Console.WriteLine('n
}
}
فایل موردنظر با نام Exercise.csدر فولدر Variablesدر درایو \ C:ذخیره گشت .پس از ترجمه ( )compileو اجرا شدن ،حرف nدر
78
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
کاراکترها
در الفبای زبان انگلیسی ،حرف به یکی از نشانه های زیر گفته می شود ، y، x، w، v، u، t، s، r، q، p، o، n، m، l، k، j، i، h، g، f، e، d، c، b،a :
Y، X، W، V، U، T، S، R، Q، P، O، N، M، L، K، J، I، H، G، F، E، D، C، B، A،zو .Zجدا از این کاراکترهای خوانا ،به عالمت های ذیل نیز
رقم ( )digitمی گویند .1 ،1 ،4 ،2 ،3 ،1 ،1 ،2 ،8 ،2 :عالمت های دیگری وجود دارند که به آن ها نیزکاراکتر می گویند * & ^ % $ # @ ! ~ ` :
زبان C#هر چیزی را که بتوان به صورت نشانه ای به نمایش گذاشت را یک کاراکتر به حساب می آورد .به منظور تعریف متغیری که مقدارش
یک کاراکتر می باشد ،می توان از کلیدواژه ی varاستفاده کرد و متغیر را با کاراکتری درون عالمت ' ' مقدار دهی اولیه ( )initializeکرد .به
class Exercise
{
)(public static void Main
{
;'var gender = 'F
;)" System.Console.Write("Student Gender:
;)System.Console.WriteLine(gender
}
}
79
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
همچنین ،می توان از کلیدواژه ی charاستفاده کرد .توجه خود را به مثال زیر جلب کنید.
class Exercise
{
)(public static void Main
{
;'char gender = 'M
;)" System.Console.Write("Student Gender:
;)System.Console.WriteLine(gender
;)(System.Console.ReadKey
}
}
نکته
تمام زبان هایی که بر مبنای Cفعالیت می کنند نوع داده ی charرا پشتیبانی می کنند.
Escape sequenceکاراکتری ویژه است که در صفحه نمایش قابل رویت نمی باشد .برای نمونه می توان از این کاراکتر برای شروع نوشتن
دستور در خط بعدی استفاده کرد (به برنامه فهماند که این خط به اتمام رسیده و خط دیگری باید شروع شود) .کاراکتر مزبور با این عالمت /
80
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
نشان داده می شود که به دنبال آن ممکن است یک کاراکتر یا نشانه ی دیگر قرار گیرد .برای مثال escape sequence ،ای که در خط بعدی
کاراکتر escape sequenceممکن است داخل ' ' قرار داده شود .'\n' :هم چنین این کاراکتر را می توان داخل " ".قرار داد "\n". :
نکته
81
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
برای استفاده از ،Escape sequenceهمچنین می توان یک متغیر charمعرفی کرده ،آن را با کاراکتر escape sequenceدلخواه
یک byteعددی بی عالمت ( )unsigned numberاست که مقدار آن از 2تا 233متغیر می باشد ،به این خاطر هیچ چیز در یک byteقابلیت
ذخیره شدن ندارد .برای معرفی متغیری که دربردارنده ی یک عدد طبیعی کوچک است ،می توان از کلیدواژه ی byteاستفاده کرد مانند مثال
زیر
byte Age
می توان متغیر byteرا در حین معرفی متغیر یا پس از انجام فرایند (معرفی) مقدار دهی اولیه کرد .مثال زیر نوع داده ی byteرا به کاربرده.
class Exercise
{
)(public static void Main
{
;byte age = 14
;)" System.Console.Write("Student Age:
;)System.Console.WriteLine(age
;age = 12
;)" System.Console.Write("Student Age:
;)System.Console.WriteLine(age
}
}
82
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
می توان از کلیدواژه، همچنین. دریافت می کنیدerror زیرا در آن صورت، استفاده نکنیدbyte برای متغیر233 به هیچ وجه از مقداری باالی
. به این مثال توجه کنید. سپس آن را با عددی کوچک مقداردهی اولیه کرد، برای معرفی متغیر استفاده کردvar ی
class Exercise
{
public static void Main()
{
var age = 14;
System.Console.Write("Student Age: ");
System.Console.WriteLine(age);
age = 12;
System.Console.Write("Student Age: ");
System.Console.WriteLine(age);
System.Console.ReadKey();
}
}
، ابتدا.) مقداردهی اولیه کرد82 (مبنایhexadecimal می توان متغیر انتگرال را با مقدار،)decimal number( به جای عدد دهدهی
. به مثال زیر توجه کنید. پایین تر است233 ) از مقدارdecimal equivalent( اطمینان کسب کنید که معادل دهدهی
class Exercise
{
public static void Main()
{
var number = 0xFE;
System.Console.Write("Number: ");
System.Console.WriteLine(number);
System.Console.ReadKey();
}
}
.نتیجه ی زیر حاصل می گردد
Number: 254
Press any key to continue…
class Order
{
static void Main()
{
byte? shirts = null;
byte? pants = null;
83
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
shirts = 4;
pants = 1;
System.Console.WriteLine("-/- Georgetown Cleaning Services -/-");
System.Console.WriteLine("========================");
System.Console.WriteLine("Item Type Qty");
System.Console.WriteLine("------------------------");
System.Console.Write("Shirts ");
System.Console.WriteLine(shirts);
System.Console.Write("Pants ");
System.Console.WriteLine(pants);
System.Console.WriteLine("========================");
System.Console.ReadKey();
}
}
محصول زیر به دست. را انتخاب کنیدDebug -> Start Debugging سپس گزینه ی، مراجعه کردهmain menu به منظور اجرای برنامه به
.می آید
عالمت دارByte
byte این مقدار در یک، را در خود نگه دارد824 تا-821 زمانی عالمت دار معرفی می شود که بتواند مقداری مثبت یا منفی از،byte ِیک عدد
. نمونه ی آن را در زیر مشاهده می کنید. استفاده کنیدsbyte از کلیدواژه ی، به منظور معرفی متغیری برای مقدار گفته شده.ذخیره می شود
class Exercise
{
static void Main()
{
sbyte roomTemperature = -88;
System.Console.Write("When we entered, the room temperature was ");
System.Console.WriteLine(roomTemperature);
}
}
.که نتیجه ی زیر از آن به دست می آید
یک واژه متشکل از bit 82متوالی است bit .ها از راست به چپ شمرده می شوند (از .)2
راست ترین bitیک واژه 2می باشد که به آن کم اهمیت ترین bitیا bitسطح پایین و یا LOBITمی گویند .چپ ترین ،83 ،bitمهم ترین bit
یا bitسطح باال و یا HIBITخوانده می شود bit .های دیگر بسته به موقعیتی که در آن قرار گرفته اند تعریف می شوند 1 ،2 ،8 :و غیره.
نظر به این که یک واژه از دو byteتشکیل شده ،گروه 8 bitسمت راست همان LOBYTEخوانده می شود و دیگر گروه 8 bitای که در سمت
نمایش یک واژه با فرمت (قالب) دودویی ( )binaryبه این صورت است .0000000000000000 :برای خواناتر کردن آن ،می توان bitها را
در گروه های چهارتایی قرار داد به این صورت .0000 0000 0000 0000 :بنابراین ،کمترین مقدار دودویی که واژه قادر به نمایش دادن آن
است به این شکل خواهد بود .0000 0000 0000 0000 :کمترین مقدار دهدهی ( )decimalیک واژه معادل 2می باشد .کمترین مقدار
مبنای )hexadecimal( 82که می توان در یک واژه ذخیره کرد برابر با 0x0000000000000000می باشد که البته به این اشکال نیز
نمایش داده می شود 0x00000000 :یا 0x0000و یا .0x0تمام این ارقام یک مقدار را به دست می دهند و آن 0x0است.
حداکثر مقدار دودویی ( )binaryکه یک واژه می تواند نشان دهد معادل 1111 1111 1111 1111 :می باشد .برای به دست آوردن
حداکثر مقدار دهدهی ( )decimalیک واژه ،می توانید از فرمول پایه 2استفاده کنید و به جای هر bitعدد 8را قرار دهید.
1*215+1*214+1*213 + 1*212 + 1*211 + 1*210 + 1*29 + 1*28 + 1*27 + 1*26 + 1*25 + 1*24 + 1*23 + 1*22 + 1*21 +
1*20
= 32768 + 16384 + 8192 + 4096 + 2048 + 1024 + 512 + 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1
= 65535
85
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
برای به دست آوردن حداکثر مقدار یا رقم مبنای )hexadecimal( 82که در یک واژه قابلیت ذخیره شدن را داشته باشد ،تمام گروه های 4
= 0xffff
= 0xFFFF
= 0Xffff
= 0XFFFF
short integers
یک واژه ( ،)wordکه متشکل از 16 bitهمجوار یا 2 byteمی باشد ،می تواند یک عدد طبیعی ( )natural numberرا در خود جای دهد.
همان طور که قبالً ذکر شد ،بیشترین مقدار عددی ( )numeric valueکه در یک واژه می توان ذخیره کرد 65535است .به منظور تعریف
متغیری برای این مقدار ،می توان کلیدواژه ی varرا به کاربرد و متغیر نام برده را با مقداری از -32768تا 32767مقداردهی اولیه کرد .به
class Exercise
{
)(static void Main
{
var schoolEffective = 1400; // Number of Students
;)" System.Console.Write("School Effective:
;)System.Console.WriteLine(schoolEffective
}
}
86
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
نتیجه ی زیر حاصل می گردد.
(به این خاطر که byteتنها گنجایش کاراکترها و ارقام کوچک را دارد) ،هر زمان قصد داشتید عددی را در برنامه ی خود به کار ببرید ،توجه
عدد طبیعی ( )natural numberرا integerنیز می گویند .کوچکترین ( )integerرا تنها با کمک کلیدواژه ی shortمی توان در یک واژه
ذخیره کرد .به دلیل این که short integerبه صورت پیش فرض عالمت دار می باشد ،می تواند مقداری که از -32768تا 32767متغیر
است را در خود ذخیره کند .در زیر نمونه ی برنامه ای که دو short integerرا به کار می برد مشاهده می کنید.
class Exercise
{
)(static void Main
{
;short numberOfPages
;short temperature
;numberOfPages = 842
;temperature = -1544
;)" System.Console.Write("Number of Pages of the book:
;)System.Console.WriteLine(numberOfPages
;)" System.Console.Write("Temperature to reach during the experiment:
;)System.Console.Write(temperature
;)"System.Console.WriteLine(" degrees\n
}
}
(به دلیل این که short integerها می توانند ارقام ( )numberبزرگتر از byteعالمت دار را در خود جای دهند) ،هر مقداری که برای byte
عالمت دار تعریف می کنید را می توان برای متغیر shortهم تعریف کرد.
87
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
های بدون عالمتShort integer
چنین متغیری را می توان با. یاد می شودunsigned short integer از متغیری که دربردارنده ی اعداد مثبت و نسبتاً کوچکی است با نام
قرار دارند را در برگیرد65535 تا2 ها ی بدون عالمت می توانند اعدادی که در بردshort integer . تعریف کردvar یاushort کلیدواژه های
مثال های آن را در زیر مشاهده می کنید.) جای می گیرندbit 82 (به همین دلیل است که در تنها
class Exercise
{
static void Main()
{
// These variables must hold only positive integers
ushort numberOfTracks;
ushort musicCategory;
numberOfTracks = 16;
musicCategory = 2;
System.Console.Write("This music album contains ");
System.Console.Write(numberOfTracks);
System.Console.WriteLine(" tracks");
System.Console.Write("Music Category: ");
System.Console.Write(musicCategory);
System.Console.WriteLine();
}
}
class Order
{
static void Main()
{
byte? shirts = null;
byte? pants = null;
ushort? otherItems = null;
shirts = 4;
pants = 1;
otherItems = 3;
88
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;)"System.Console.WriteLine("-/- Georgetown Cleaning Services -/-
;)"========================"(System.Console.WriteLine
;)"System.Console.WriteLine("Item Type Qty
;)"System.Console.WriteLine("------------------------
;)" System.Console.Write("Shirts
;)System.Console.WriteLine(shirts
;)" System.Console.Write("Pants
;)System.Console.WriteLine(pants
;)" System.Console.Write("Other Items
;)System.Console.WriteLine(otherItems
;)"========================"(System.Console.WriteLine
;)(System.Console.ReadKey
}
}
به منظور اجرای برنامه ،به main menuمراجعه کرده و روی Debug -> Start Debuggingکلیک کنید .نتیجه ی زیر حاصل می گردد.
هنگامی که از شما پرسیده شد ،می خواهید SAVEکنید یا نه NO ،را بزنید.
( Double-wordگروه دوکلمه) عبارتند از گروهی متشکل از دو واژه ی متوالی .به عبارت دیگر ،گروه دوکلمه ترکیبی از 4 byteیا 32 bitمی
باشد bit .ها که از راست به چپ شمرده می شوند ،از 2آغاز شده و به 18ختم می شوند .راست ترین ،bit 0 ،bitکم اهمیت ترین bitیا
LOBITتلقی می گردد و چپ ترین ،bit 31 ،bitمهم ترین bitیا HIBITخوانده می شود .بقیه ی bitها ،بسته به موقعیتی که در آن قرار
89
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
گروه 8 bitاول ( از 2تا ،)4که byteسمت راست حساب می شود LOBYTE ،خوانده می شود .گروه 8 bitآخر ( از 21تا ) 18که byte
سمت چپ محسوب می شود HIBYTE ،اطالق می گردد byte .های دیگر نیز بسته موقعیتی که در آن قرار گرفته اند ،تعریف می شوند .حال،
گروه 16 bitای سمت راست یا همان واژه ی سمت راست LOWORD ،خوانده می شود .گروه 16 bitای سمت چپ ،واژه ی سمت چپ،
HIWORDگفته می شود.
حداقل عدد دودوئی ( )minimum binary numberکه می توان با یک گروه دوکلمه ای ( )double-wordنشان داد 2می باشد .حداقل
مقدار اعشاری ( )minimum decimal valueیک گروه دوکلمه معادل 2می باشد .برای بدست آوردن بیشینه ی مقدار اعشاری
( )maximum decimal valueیک واژه ،می توان از فرمول پایه ی )base 2 formula( 2استفاده کرد و به هر ،bitمقدار ( 8 )valueداد.
90
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
1*231+1*230+1*229 + 1*228 + 1*227 + 1*226 + 1*225 + 1*224 + 1*223 + 1*222 + 1*221 + 1*220 + 1*219 + 1*218 +
1*217 + 1*216 + 1*215 + 1*214 + 1*213 + 1*212 + 1*211 + 1*210 + 1*29 + 1*28 + 1*27 + 1*26 + 1*25 + 1*24 + 1*23
768 ،536 + 32،072 + 65،144 + 131،288 + 262،576 + 524،048،152 + 1،097،304 + 2،194،608 + 4،388،216 + 8،777،16
024 + 512 + 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1،048 + 1،096 + 2،192 + 4،384 + 8،+ 16
708،578،286،= 4
کم ترین مقدار مبنای hexadecimal( 82یا شانزده شانزدهی) که می توان در یک گروه دوکلمه ای جای داد (ذخیره کرد)
0x00000000000000000000000000000000می باشد که در آخر برابر است با .0x0به منظور به دست آوردن حداکثر (بیشینه)
عدد مبنای 82که می توان با یک واژه نشان داد ،باید هر گروه 4 bitای را با (یک) fیا Fجایگزین کرد.
به منظور تعریف متغییری که قادر است مقادیر بزرگ را در خود جای دهد ،می توان از کلیدواژه ی varاستفاده کرده و متغییر را با value
class Exercise
{
)(static void Main
{
;var population = 72394475
;)" System.Console.Write("Country Population:
;)System.Console.WriteLine(population
}
91
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
}
نتیجه ی زیر به دست می آید.
برای ایجاد برنامه ی کاربردی جدید ( ،)applicationبه main menuمراجعه کرده و روی گزینه ی File -> New Project...کلیک کنید.
به منظور ایجاد فایل برای کد مورد نظر ،فهرست گزینه ی اصلی ( )main menuرا باز کرده و روی Project -> Add New Item...کلیک
کنید.
در لیست میانی گزینه ای است به نام ،Code Fileآن را کلیک کنید.
در داکیومنت خالی که در اختیار شما قرار می گیرد ،دستورات زیر را تایپ کنید.
class Order
{
)(static void Main
{
;byte? shirts = null
;byte? pants = null
;ushort? otherItems = null
;shirts = 4
;pants = 0
;otherItems = 3
;)"System.Console.WriteLine("-/- Georgetown Cleaning Services -/-
;)"========================"(System.Console.WriteLine
;)"System.Console.WriteLine("------------------------
92
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;)"System.Console.WriteLine("Item Type Qty
;)"System.Console.WriteLine("------------------------
;)" System.Console.Write("Shirts
;)System.Console.WriteLine(shirts
;)" System.Console.Write("Pants
;)System.Console.WriteLine(pants
;)" System.Console.Write("Other Items
;)System.Console.WriteLine(otherItems
;)"========================"(System.Console.WriteLine
;)(System.Console.ReadKey
}
}
Signed integers
گنجایش ذخیره ی اطالعات یک گروه دوکمله ای ،معادل با دو برابر حجم داده ای است که می توان در یک واژه ذخیره کرد .به عبارت دیگر،
ظرفیت ذخیره سازی آن برابر است با 32 bitیا 4 byteو یا .295،967،294،4بنابراین ،از گروه دوکلمه ای برای ذخیره ی اعداد بزرگی
برای به کار بردن متغیری که قادر است اعداد بسیار بزرگ را در خود جای دهد ،جدا از کلیدواژه ی ،varمی توان آن را با کلیدواژه ی intمعرفی
کرد .متغیری که به عنوان intمعرفی می گردد ،قادر است مقادیری که از 648 ،483،147،2تا 647 ،484،147،2متغیر است ،مثبت یا منفی،
را در خود ذخیره کند ( که همگی در bit 32جای می گیرد) .به مثال های زیر توجه کنید.
class Exercise
{
)(static void Main
{
;int coordX
;int coordY
;coordX = 12
;coordY = -8
;)" System.Console.Write("Cartesian Coordinate System:
;)"(System.Console.Write("P
;)System.Console.Write(coordX
;)" System.Console.Write(",
;)System.Console.Write(coordY
;)"System.Console.WriteLine(")\n
}
}
پس از اجرا ،نتیجه ی زیر به دست می آید.
93
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
)Cartesian Coordinate System: P(12، -8
زمانی که متغیر integerای را با کلیدواژه ی varتعریف کرده ،سپس آن را با مقداری کم تر از 647،484،147،2مقداردهی اولیه می کنید،
compilerخودکار تصمیم می گیرد که حافظه ی مورد نیاز برای ذخیره ی متغیر مزبور 32 bitمی باشد.
هنگام مقداردهی اولیه ی متغیر انتگرال ( ،)integral variableبه جای عدد اعشاری ( ،)decimal numberمی توان از مقدار مبنای 82
( )hexadecimal valueاستفاده کرد (که معادل دهدهی ( )decimalآن کم تر از 647،484،147،2است) .نمونه ی آن را در زیر مشاهده
می کنید.
class Exercise
{
)(static void Main
{
;var number = 0xF0488EA
;)" System.Console.Write("Number:
;)System.Console.WriteLine(number
}
}
94
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Number: 251955434
Press any key to continue...
استفاده کرد (این کلیدواژه نشانگرuint می توان برای تعریف آن از کلیدواژه ی،چنانچه متغیری تنها دربردارنده ی اعداد طبیعی مثبت باشد
تا0 ای استفاده می شود که مقدار آن از32 bit مثبتinteger به منظور شناساییuint از کلیدواژه ی.) بدون عالمت می باشدintger
. نمونه های آن را در زیر مشاهده می کنید. متغیر است295،967،294،4
class Exercise
{
static void Main()
{
uint dayOfBirth;
uint monthOfBirth;
uint yearOfBirth;
dayOfBirth = 8;
monthOfBirth = 11;
yearOfBirth = 1996;
System.Console.WriteLine("Red Oak High School");
System.Console.Write("Student Date of Birth: ");
System.Console.Write(monthOfBirth);
System.Console.Write("/");
System.Console.Write(dayOfBirth);
System.Console.Write("/");
System.Console.Write(yearOfBirth);
System.Console.ReadKey();
}
}
. فایل را به این ترتیب تغییر دهید،به منظور استفاده از متغیرهای بدون عالمت
class Order
{
static void Main()
{
byte? shirts = null;
byte? pants = null;
95
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
ushort? otherItems = null;
uint? orderDay = null;
uint? orderMonth = null;
uint? orderYear = null;
shirts = 4;
pants = 0;
otherItems = 3;
orderDay = 15;
orderMonth = 7;
orderYear = 2002;
System.Console.WriteLine("-/- Georgetown Cleaning Services -/-");
System.Console.WriteLine("========================");
System.Console.Write("Order Date: ");
System.Console.Write(orderMonth);
System.Console.Write('/');
System.Console.Write(orderDay);
System.Console.Write('/');
System.Console.WriteLine(orderYear);
System.Console.WriteLine("------------------------");
System.Console.WriteLine("Item Type Qty");
System.Console.WriteLine("------------------------");
System.Console.Write("Shirts ");
System.Console.WriteLine(shirts);
System.Console.Write("Pants ");
System.Console.WriteLine(pants);
System.Console.Write("Other Items ");
System.Console.WriteLine(otherItems);
System.Console.WriteLine("========================");
System.Console.ReadKey();
}
}
. نتیجه ی زیر را به دست می دهد. برنامه را اجرا کنید.2
96
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
چهارکلمه ای ()Quad – word
برای ذخیره سازی ارقام بزرگی که در گروه دو کلمه ای جا نمی شوند ،می توان از ترکیب 64 bitای استفاده کرد .از این ترکیب با عنوان گروه
چهار کلمه ای ( ،)quad-coreنیز یاد می شود .گروه چهار کلمه ای آن قدر بزرگ است که ارقامی که در محدوده ی ،854 ،036 ،372 ،223 ،-9
808 ،775تا 807 ،775 ،854 ،036 ،372 ،223 ،9قرار می گیرد را می تواند در خود ذخیره کند.
چنانچه ،متغیر integerای را به وسیله ی کلیدواژه ی varتعریف کنید و آن را با valueای که از 647 ،484 ،147 ،2تا ،036،372 ،223 ،9
807 ،775 ،854متغیر است مقداردهی اولیه کنید compiler ،آن را در مقدار حافظه ی 21 bitذخیره می کند.
Long integers
برای تعریف متغیری که گنجایش نگه داری ارقام بسیار بزرگ را داشته باشد ( و تا 64 bitحافظه نیاز داشته باشد) ،باید از کلید واژه های
همان طور که پیش تر نیز گفته شد ،چنانچه متغیری را با valueای کم تر از 647 ،484 ،147 ،2مقداردهی اولیه کنید compiler ،تنها 32
bitحافظه به آن اختصاص می دهد .حال ،چنانچه variableموردنظر را با valueای متغیر از 647 ،484 ،147 ،2تا ،036 ،372 ،223 ،9
97
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
807 ،775 ،854مقدار دهی اولیه کنید compiler ،برای آن 64 bitحافظه کنار می گذارد .چنانچه مقدار مورد نظر از ،036 ،372 ،223 ،9
به عبارت دیگر ،باید مقدارهایی که به متغیر های انتگرال ( )integral variableاختصاص می دهید را به 64 bitمحدود کنید .به مثال زیر
توجه کنید.
class Exercise
{
)(static void Main
{
;var countryArea = 5638648
;)" System.Console.Write("Country Area:
;)System.Console.Write(countryArea
;)"System.Console.Write("km2\n
;)(System.Console.ReadKey
}
}
نتیجه ی زیر به دست می آید.
استفاده کرد .برای مثال ،می توان از کلیدواژه ی longبرای تعریف متغیری استفاده کرد در رینج عددی یکسان با نوع داده های int ،shortیا
uintقرار دارد .پس اگر متغیری را به عنوان longمعرفی کرده ولی از آن برای اعداد کوچکی که به 64 bitنیاز ندارند استفاده کنید،
compilerخود میزان حافظه ی الزم برای ذخیره ی مقدارهای متغیر را محاسبه کرده وبه آن اختصاص می دهد .سرانجام ،آن مقدار حافظه ای
که در دسترس قرارمی گیرد به اندازه ی 64 bitنخواهد بود .اما چنانچه اصرار دارید compiler ،حتماً همان 64 bitرا اختصاص دهد (رزرو
کند) ،حین تخصیص مقدار به متغیر ،پسوند Lرا به آن اضافه کنید .به مثال زیر توجه کنید.
class Exercise
{
)(static void Main
{
;long countryArea
;countryArea = 5638648L
;)" System.Console.Write("Country Area:
;)System.Console.Write(countryArea
;)"System.Console.Write("km2\n
;)(System.Console.ReadKey
}
}
پس به خاطر داشته باشید که نوع داده های uint ،int ،shortیا ushortهمگی در یک متغیر longجای می گیرند.
می توان برای ذخیره سازی integerهای مثبت و منفی از ترکیب 64 bitای استفاده کرد .در برخی موارد ،برای ذخیره سازی اعدادی که فقط
مثبت هستند ولی بزرگ ،به متغیر نیاز پیدا می کنید .به منظور معرفی چنین متغیری ،می توان از نوع داده ی ulongکمک گرفت .متغیری که
به عنوان ulongتعریف می شود ،می تواند اعدادی را که از 0تا 615 ،551 ،709 ،073 ،744 ،446 ،18متغیر است را در 64 bitجای دهد.
عدد حقیقی ،عددی است که یک بخش اعشاری ( )decimal partرا نشان می دهد .یک عدد می تواند به وسیله ی یک عالمت به دو بخش
تقسیم شده باشد ،که از آن عالمت با نام عالمت اعشار ( )decimal separator/symbolیاد می شود .البته ،این عالمت از کشوری به کشور
دیگر یا زبانی به زبان دیگر متفاوت است .برای مثال ،در زبان انگلیسی آمریکایی این عالمت به صورت نقطه ( ).نمایش داده می شود.
99
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
در هر دو طرف این عالمت اعداد مقدار یک رقم را مشخص می کنند .اعدادی که در سمت راست این عالمت قرار می گیرند ،در واقع میزان
Integerهایی که تاکنون با آن ها برخورد داشتیم ،مقدارهای اعشاری ( )decimalرا نشان نمی دادند C# .برای این منظور ،مقدارهای شناور
( )floating valuesرا برای برنامه نویس فراهم می کند .به منظور تعریف اصلی ترین مقدار شناور ،از کلیدواژه ی floatاستفاده می کنیم.
متغیری که با floatمعرفی می شود ،قادر است اعداد حقیقی ای که در رنج ±1.5 xÂÂ10−45تا ±3.4 xÂÂ1038قرار می
class Exercise
{
)(static void Main
{
100
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;float distance
}
}
چنانچه متغیری بزرگتر از ظرفیت floatبود (به اندازه ای بزرگ بود که floatقادر به نشان دادن آن نیست) و همچنین به دقت اعشار بیشتری
نیاز داشت ،باید متغیر نام برده را با کلید واژه های varیا doubleمعرفی کرد .به مثال زیر توجه کنید.
class Exercise
{
)(static void Main
{
;var number = 62834.9023
;)" System.Console.Write("Number:
;)System.Console.WriteLine(number
;)(System.Console.ReadKey
}
}
نتیجه ی زیر حاصل می گردد.
Number: 62834.9023
Press any key to continue...
متغیری که با کلیدواژه ی doubleمعرفی می شود ،ارقامی که در رنج ±5.0 x 10−324تا ±1.7 x ÂÂ10308قرار می گیرند را
با 83یا 82رقم اعشار و در 64 bitذخیره می کند .نوع داده ی doubleنتایج دقیق تری را نسبت به floatیا varبه دست می دهد ،به
خصوص در ارتباط با ذخیره سازی اعداد با رقم اعشار طوالنی .اما چنانچه اصرار دارید ،حتماً از کلیدواژه ی floatبرای معرفی متغیر استفاده
شود ،هنگام تخصیص مقدار به متغیر نام برده ،پسوند fیا Fرا به مقدار اضافه کنید.
class Exercise
{
)(static void Main
{
;float distance
;distance = 248.38F
;)" = System.Console.Write("Distance
;)System.Console.Write(distance
;)"System.Console.WriteLine("km\n
;)(System.Console.ReadKey
}
}
نتییجه زیر حاصل می گردد.
101
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Distance = 248.38km
را بهF یاf باید پسوند،) معرفی می شود (و مایلید که مقدار یک رقم اعشار داشته باشدvar هنگامی که متغیری با،به خاطر داشته باشید
مثال
class Exercise
{
static void Main()
{
var number = 62834.9023F;
System.Console.Write("Number: ");
System.Console.WriteLine(number);
System.Console.ReadKey();
}
}
مثال. را به آن ضمیمه کنیدD یاd باید پسوند،) با دو رقم اعشار شناخته شودvalue( چنانچه مایلید مقداری،حال
class Exercise
{
static void Main()
{
var number = 62834.9023D;
System.Console.Write("Number: ");
System.Console.WriteLine(number);
System.Console.ReadKey();
}
}
. فایل را به صورت زیر تغییر دهید،به منظور استفاده از مقداری با دو رقم اعشار
class Order
{
static void Main()
{
byte? shirts = null;
byte? pants = null;
ushort? otherItems = null;
uint? orderDay = null;
uint? orderMonth = null;
uint? orderYear = null;
double? mondayDiscount = null;
102
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
shirts = 4;
pants = 0;
otherItems = 3;
orderDay = 15;
orderMonth = 7;
orderYear = 2002;
mondayDiscount = 0.25D; // 25%
System.Console.WriteLine("-/- Georgetown Cleaning Services -/-");
System.Console.WriteLine("========================");
System.Console.Write("Order Date: ");
System.Console.Write(orderMonth);
System.Console.Write('/');
System.Console.Write(orderDay);
System.Console.Write('/');
System.Console.WriteLine(orderYear);
System.Console.WriteLine("------------------------");
System.Console.WriteLine("Item Type Qty");
System.Console.WriteLine("------------------------");
System.Console.Write("Shirts ");
System.Console.WriteLine(shirts);
System.Console.Write("Pants ");
System.Console.WriteLine(pants);
System.Console.Write("Other Items ");
System.Console.WriteLine(otherItems);
System.Console.WriteLine("------------------------");
System.Console.Write("Monday Discount: ");
System.Console.Write(mondayDiscount);
System.Console.WriteLine('%');
System.Console.WriteLine("========================");
System.Console.ReadKey();
}
}
103
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
.1پنجره ی DOSرا ببندید.
Decimal
از نوع داده ی ،decimalمی توان برای تعریف متغیری که قادر است مقادیر بسیار بزرگ (که برای ذخیره به ترکیب 128 bitنیاز دارند) را در
خود جای دهد ،استفاده کرد .برای این منظور از کلیدواژه ی decimalاستفاده می شود .مقادیری که در متغیر دهدهی ( )decimalذخیره می
شود ،از ±1.0 xÂ10−28تا ±7.9 xÂ1028متغیر بوده و دقت اعشاری از 21تا 21رقم دارند .به خاطر این دقت بسیار باال ،از نوع
پس از تعریف متغیر دهدهی ( ،)decimalمی توان آن را با یک عدد طبیعی مقداردهی اولیه کرد .برای این منظور ،هنگام مقدار دهی اولیه،
مثال
class Exercise
{
)(static void Main
{
;decimal hourlySalary
;hourlySalary = 24.25M
;)" = System.Console.Write("Hourly Salary
;)System.Console.WriteLine(hourlySalary
;)(System.Console.WriteLine
;)(System.Console.ReadKey
}
}
نتیجه ی زیر به دست می آید.
همان طور که پیش تر بیان شد ،هنگام تعریف یا مقداردهی اولیه ی متغیر حقیقی ،آن پسوندی که به مقدار ضمیمه می کنید به compiler
می فهماند چه نوع مقدار و چه میزان حافظه برای ذخیره سازی متغیر نام برده باید تخصیص داده شود.
چنانچه مقداری پسوند fیا Fرا به یدک بکشد( floating point number ،عدد ممیز اعشار) با تنها یک رقم اعشار محسوب می شود.
104
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
چنانچه مقداری پسوند dیا Dرا به یدک بکشد( floating point number ،عدد ممیز اعشار) با دو رقم اعشار تلقی می گردد.
105
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
چنانچه مقداری پسوند mیا Mرا داشت ،یک عدد اعشاری بزرگ ( )large decimal numberاطالق می شود
106
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
به برنامه زیر توجه کنید.
class Program
{
)(static void Main
{
;)" = System.Console.Write("560 / 672
;)System.Console.WriteLine(560 / 672
;)(System.Console.ReadKey
}
}
هدف این برنامه به دست آوردن نتیجه ی تقسیم 322بر 242است.
107
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
همان طور که مشاهده می کنید ،هنگامی که چنین ارقامی به برنامه داده می شوند compiler ،آن ها را به عنوان integerمی شناسد و
نتیجه ی 2را به دست می دهد .حال ،یک روش برای تصحیح این معادله ،اضافه کردن جایی برای اعشار به حداقل یکی از ارقام است.
مثال
class Program
{
)(static void Main
{
;)" = System.Console.Write("560 / 672
;)System.Console.WriteLine(560.00 / 672.00
;)(System.Console.ReadKey
}
}
این بار compiler ،مقدار را به عنوان ( floating-point numberعدد با ممیز شناور) می شناسد ،اما کدام ؟ به صورت پیش فرض،
compilerنوع داده ی doubleرا به کار می برد .برنامه نتیجه ی زیر را تولید می کند.
class Program
{
)(static void Main
{
;)" = System.Console.Write("560 / 672
;)System.Console.WriteLine(560F / 672f
;)(System.Console.ReadKey
}
}
این بار برنامه نتیجه ی زیر را می دهد.
class Order
{
108
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
static void Main()
{
byte? shirts = null;
decimal? priceOneShirt = null;
byte? pants = null;
decimal? priceAPairOfPants = null;
ushort? otherItems = null;
decimal? priceOtherItems = null;
uint? orderDay = null;
uint? orderMonth = null;
uint? orderYear = null;
double? mondayDiscount = null;
shirts = 5;
priceOneShirt = 0.95M;
pants = 2;
priceAPairOfPants = 1.95M;
otherItems = 3;
priceOtherItems = 4.55M;
orderDay = 15;
orderMonth = 7;
orderYear = 2002;
mondayDiscount = 0.25D; // 25%
System.Console.WriteLine("-/- Georgetown Cleaning Services -/-");
System.Console.WriteLine("========================");
System.Console.Write("Order Date: ");
System.Console.Write(orderMonth);
System.Console.Write('/');
System.Console.Write(orderDay);
System.Console.Write('/');
System.Console.WriteLine(orderYear);
System.Console.WriteLine("------------------------");
System.Console.WriteLine("Item Type Qty Unit Price");
System.Console.WriteLine("------------------------");
System.Console.Write("Shirts ");
System.Console.Write(shirts);
System.Console.Write(" ");
System.Console.WriteLine(priceOneShirt);
System.Console.Write("Pants ");
System.Console.Write(pants);
System.Console.Write(" ");
System.Console.WriteLine(priceAPairOfPants);
System.Console.Write("Other Items ");
System.Console.Write(otherItems);
System.Console.Write(" ");
System.Console.WriteLine(priceOtherItems);
System.Console.WriteLine("------------------------");
System.Console.Write("Monday Discount: ");
System.Console.Write(mondayDiscount);
System.Console.WriteLine('%');
System.Console.WriteLine("========================");
109
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;)(System.Console.ReadKey
}
}
.2برنامه را اجرا کنید .نتیجه ی زیر به دست می آید.
رشته ها ()Strings
رشته یک فضای خالی ،یک کاراکتر ،یک کلمه یا یک گروه کلمه است که compilerباید آن را " همان طور که هست " در نظر بگیرد ،یعنی نباید
به این که رشته از چه چیزی تشکیل شده زیاد دقت کند ،مگر این که شما مستقیم غیر این را به compilerدستور دهید .به عبارت دقیق
اصوالً ،مقدار یک رشته با عالمت نقل و قول (") آغاز می شود و به آن نیز ختم می شود .نمونه ی یک رشته به این صورت می باشد :
."Welcome to the World of C# Programming!".برای این که یک رشته در صفحه ی کنسول نمایش داده شود ،می توان آن را در
class Exercise
{
)(static void Main
{
110
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
System.Console.WriteLine("Welcome to the World of C# Programming!");
System.Console.ReadKey();
}
}
string ( باید یک متغیر رشته، در این مورد.ممکن است مجبور به استفاده از رشته ای شوید که مقدار آن از پیش برای شما شناس نباشد
استفاده می شود و به دنبال آن اسم متغیر مورد نظر قرار داده میstring یاvar از کلیدواژه های، برای این منظور.) تعریف کردvariable
)initialize( مقداردهی اولیهnull یک گروه کلمه یا حتی، یک کلمه، یک نشانه، یک کاراکتر، می توان یک رشته را با یک فضای خالی.شود
.) ای که به رشته داده می شود باید حتماً داخل عالمت (" ") قرار گیردvalue( مقدار.) استفاده کردstring? کرد ( به هیچ وجه نباید از
class Exercise
{
static void Main()
{
var team = "Real Madrid";
string country = "Guinée Equatoriale";
System.Console.WriteLine("Welcome to the World of C# Programming!");
System.Console.Write("Team: ");
System.Console.WriteLine(team);
System.Console.Write("Country: ");
System.Console.WriteLine(country);
System.Console.WriteLine();
System.Console.ReadKey();
}
}
نتیجه
111
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
به کار بردن رشته ها
class Order
{
static void Main()
{
string customerName;
string customerHomePhone;
byte? shirts = null;
decimal? priceOneShirt = null;
byte? pants = null;
decimal? priceAPairOfPants = null;
ushort? otherItems = null;
decimal? priceOtherItems = null;
uint? orderDay = null;
uint? orderMonth = null;
uint? orderYear = null;
double? mondayDiscount = null;
customerName = "Gregory Almas";
customerHomePhone = "(301) 723-4425";
shirts = 5;
priceOneShirt = 0.95M;
pants = 2;
priceAPairOfPants = 1.95M;
otherItems = 3;
priceOtherItems = 4.55M;
orderDay = 15;
orderMonth = 7;
orderYear = 2002;
mondayDiscount = 0.25D; // 25%
System.Console.WriteLine("-/- Georgetown Cleaning Services -/-");
System.Console.WriteLine("========================");
System.Console.Write("Customer: ");
System.Console.WriteLine(customerName);
System.Console.Write("Home Phone: ");
System.Console.WriteLine(customerHomePhone);
System.Console.Write("Order Date: ");
System.Console.Write(orderMonth);
System.Console.Write('/');
System.Console.Write(orderDay);
System.Console.Write('/');
System.Console.WriteLine(orderYear);
System.Console.WriteLine("------------------------");
System.Console.WriteLine("Item Type Qty Unit Price");
System.Console.WriteLine("------------------------");
System.Console.Write("Shirts ");
112
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
System.Console.Write(shirts);
System.Console.Write(" ");
System.Console.WriteLine(priceOneShirt);
System.Console.Write("Pants ");
System.Console.Write(pants);
System.Console.Write(" ");
System.Console.WriteLine(priceAPairOfPants);
System.Console.Write("Other Items ");
System.Console.Write(otherItems);
System.Console.Write(" ");
System.Console.WriteLine(priceOtherItems);
System.Console.WriteLine("------------------------");
System.Console.Write("Monday Discount: ");
System.Console.Write(mondayDiscount);
System.Console.WriteLine('%');
System.Console.WriteLine("========================");
System.Console.ReadKey();
}
}
113
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
تاریخ و زمان
تاریخ در واقع واحدی برای سنجش تعداد روزها ،ماه ها ،سال هایی است که در یک برهه ی مشخصی از زمان سپری شده .زمان نیز واحدی برای
شمارش تعداد ثانیه هایی است که از نیمه شب روز معین تا کنون سپری شده .به منظور تعریف متغیری ویژه ی زمان و تاریخ ،باید از نوع داده
ی DateTimeبهره گرفت.
class Exercise
{
)(static void Main
{
;DateTime DateHired
}
}
.NET Frameworkتاریخ شروع یک دوره را به ،0001 ،January 1نیمه شب ) 0:00 AMیا (12:00:00تنظیم می کند .چنانچه مقدار
مشخصی به آن اختصاص داده نشده باشد ،متغیر با 1/1/0001نیمه شب ،مقدار دهی اولیه می شود.
شی ها ()Objects
نوع داده ی Objectبه منظور تعریف متغیری به کار می رود که نوع آن از پیش تعیین نشده و ممکن است نوع آن هر یک از نوع داده هایی که
در این مبحث تعریف کردیم باشد .پس از تعریف متغیر شی ( ،)object variableمی توان مقدار آن را هر گونه که مایلید به کارببردید .برای
مثال ،می توان متغیر موردنظر را داخل پرانتزهای )( System.Console.Writeیا )( System.Console.WriteLineقرار داد تا در صفحه
class Exercise
{
)(static void Main
{
;"var EmployeeName = "Ernestine Lamb
;"object Address = "10244 Lockwood Drive
;)" System.Console.Write("Employee Name:
;)System.Console.WriteLine(EmployeeName
;)" System.Console.Write("Home Address:
;)System.Console.WriteLine(Address
;)(System.Console.WriteLine
;)(System.Console.ReadKey
}
}
نتیجه ی زیر به دست می آید.
114
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Employee Name: Ernestine Lamb
Home Address: 10244 Lockwood Drive
Press any key to continue...
. قادر است هر مقداری را در خود جای دهد، تعریف شودobject متغیری که با نوع داده ی
class Program
{
static void Main()
{
object propertyNumber = "293749";
object propertyType = 'S';
object stories = 3;
object bedrooms = 4;
object value = 425880;
System.Console.WriteLine("=//= Altair Realtors =//=");
System.Console.WriteLine("Properties Inventory");
System.Console.Write("Property #: ");
System.Console.WriteLine(propertyNumber);
System.Console.Write("Property Type: ");
System.Console.WriteLine(propertyType);
System.Console.Write("Stories: ");
System.Console.WriteLine(stories);
System.Console.Write("Bedrooms: ");
System.Console.WriteLine(bedrooms);
System.Console.Write("Market Value: ");
System.Console.WriteLine(value);
System.Console.ReadKey();
}
}
.نتیجه ی زیر به دست می آید
115
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
مثال
class Exercise
{
static void Main()
{
double meter, inch;
meter = 12.52D;
inch = meter * 39.37D;
System.Console.Write(meter);
System.Console.Write("m = ");
System.Console.Write(inch);
System.Console.WriteLine("in\n");
System.Console.ReadKey();
}
}
.نمونه ای از برنامه ی در حال اجرا را در زیر مشاهده می کنید
12.52m = 492.9124in
. برنامه ی زیر را در نظر بگیرد.3.937 یا3937 تایپ کنید11.14 ممکن است اشتباهی کرده و به جای،در صورت استفاده مکرر از این رقم
class Exercise
{
static void Main()
{
double meter, inch;
meter = 12.52D;
inch = meter * 39.37;
System.Console.Write(meter);
System.Console.Write("m = ");
System.Console.Write(inch);
System.Console.WriteLine("in\n");
meter = 12.52D;
inch = meter * 3.937;
System.Console.Write(meter);
System.Console.Write("m = ");
System.Console.Write(inch);
System.Console.WriteLine("in\n");
meter = 12.52D;
inch = meter * 393.7;
System.Console.Write(meter);
System.Console.Write("m = ");
System.Console.Write(inch);
System.Console.WriteLine("in\n");
System.Console.ReadKey();
}
116
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
}
نتیجه ی زیر حاصل می گردد.
82.32m = 492.9124in
82.32m = 49.29124in
82.32m = 4929.124in
به خاطر اشتباهاتی از این دست ،همان محاسبه ممکن است نتایجی کامالً متفاوت تولید کند .به منظور جلوگیری از خطاهایی از این دسته ،می
توان از یک متغیر (به جای ثابت) برای ذخیره کردن مقدار استفاده کرد .حال ،در صورت نیاز می توان به جای خود مقدار ،به متغیر آن به راحتی
دسترسی پیدا کرد .الزم به ذکر است که رقمی همچون 39.37یک ثابت ( )constantاست.
ثابت مقداری است که هیچگاه تغییر نمی کند ،مانند 39.37،"ASEC Mimosa" ،244 :یا حتی .Trueمی توان یک متغیر ( )variableرا
به منظور ایجاد یک ثابت ،باید کلیدواژه ی constرا در سمت چپ آن تایپ کنید .به خاطر داشته باشید که حین تعریف ثابت ،باید مقدار
مثال
پس از ایجاد ثابت مورد نظر و مقداردهی اولیه ی مناسب آن ،می توان اسم آن را در جایی که ثابت دلخواه باید قرار می گرفت وارد کرد .در زیر
نمونه ای از متغیر ثابت ( ،)constant variableکه بارها استفاده شده مشاهده می کنید.
class Exercise
{
)(static void Main
{
;const double ConversionFactor = 39.37D
;double meter, inch
;meter = 12.52D
;inch = meter * ConversionFactor
;)System.Console.Write(meter
;)" = System.Console.Write("m
;)System.Console.Write(inch
;)"System.Console.WriteLine("in\n
;meter = 12.52D
;inch = meter * ConversionFactor
;)System.Console.Write(meter
117
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;)" = System.Console.Write("m
;)System.Console.Write(inch
;)"System.Console.WriteLine("in\n
;meter = 12.52D
;inch = meter * ConversionFactor
;)System.Console.Write(meter
;)" = System.Console.Write("m
;)System.Console.Write(inch
;)"System.Console.WriteLine("in\n
;)(System.Console.ReadKey
}
}
82.32m = 492.9124in
82.32m = 492.9124in
82.32m = 492.9124in
همان طور که مشاهده می کنید ،این بار نتیجه دقیق تر درآمده است .همچنین اگر چیزی را اشتباه تایپ کنید ،یک پیغام خطا صادر می شود
که سر انجام زمان بیشتری در اختیار شما قرار می دهد تا مشکل را برطرف کنید.
به منظور مقداردهی اولیه ی یک متغیر ثابت ،مقداری که در سمت راست عملگر جایگزین = قرار می گیرد ،باید حتماً یک ثابت یا مقداری باشد
که compilerبه عنوان ثابت بشناسد .به جای استفاده از یک ثابت شناس ،می توان متغیری به آن اختصاص داد که از پیش به عنوان ثابت
تعریف شده.
در برنامه ها دو دسته ی اصلی ثابت کاربرد فراوان دارند .می توانید خود یک ثابت خلق کنید (مانند مثال باال) .زبان C#ثابت های مختص
خود را دارد .برخی از ثابت ها متعلق به خود زبان C#هستند و برخی دیگر از برنامه ی NET Framework.گرفته می شوند .پیش از به
کاربردن یک ثابت ،ابتدا باید از وجود ثابت اطمینان کسب کنید .دوم ،باید از نحوه ی دسترسی به آن آگاه باشید .ثابتی که بخشی از خود
برنامه ی C#است به راحتی از طریق کد قابل دسترسی می باشد (به طور معمول ،ثابت های مزبور در فضای اسمی Systemتعریف می شوند
).
: Nullاین کلیدواژه ( )Nullدر واقع یک ثابت است و برای نشان دادن متغیری استفاده می شود که مقدار مشخص و شناسی ندارد.
118
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
: PIثابتی است که برای نشان دادن نسبت محیط دایره به قطر آن به کار می رود .البته کاربرد این ثابت بیشتر در علم ریاضی است و برای
مدیریت کد
ابزار اصلی نوشتن برنامه ،نوشتن و وارد کردن کد در داکیومنت است .این کار با نوشتن و وارد کردن کد از طریق صفحه کلید امکان پذیر می
باشد .پس از به وجود آوردن کد ،عملیات مختلف می توان روی آن انجام داد .معموالً اولین کاری که باید انجام داد ،انتخاب متن است.
همان طور که از قبل گفته شد ،کد را می توان در برنامه هایی مثل Notepadیا code editorبرنامه ی Microsoft Visual Studioنوشت.
برای پیدا کردن کاراکتر ،نشانه ،کلمه در یک داکیومنت باید به main menuمراجعه کرده و روی گزینه ی Edit -> Find...کلیک کنید.
پنجره ی محاوره ( )dialog boxای نمایش داده می شود ،که می توان در آن نام آیتم موردنظر را وارد کرده ،سپس روی گزینه ی Findکلیک
کنید .اگر از برنامه ی Microsoft Visual Studioاستفاده می کنید برای پیدا کردن تمام کاراکترهای یک متن (منظور یک کاراکتر است که
چند بار در یک متن تکرار شده) ،ابتدا آیتم مورد نظر را انتخاب کرده ،سپس
Main menuرا باز کرده ،و گزینه ی Edit -> Quick Findرا انتخاب کنید.
119
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
حال Ctrl + F ،را باهم فشار دهید.
به همین شیوه ،چنانچه متغیری دارید که چند بار در یک متن به کار رفته و می خواهید تمام جاهایی که این متغیر در آن ها به کارفته را پیدا
کنید ،کافی است روی نام آن کلیک کرده و دو ثانیه صبر کنید تا تمام متغیرهای موردنظر یافت شوند ( و برجسته شوند).
اکنون ،به منظور دریافت فهرستی از تمام مکان هایی که متغیر در آن به کار رفته ،در برنامه ی Microsoft Visual Studioدستورات زیر را
.1در ،Code Editorاسم متغیر را راست کلیک کرده ،سپس گزینه ی Find All Referencesرا انتخاب کنید.
120
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
،Ctrl + F12 .2را با هم فشار دهید.
در نتیجه ی این کار ،لیستی از تمام بخش هایی که متغیر در آن به کار رفته (در پنجره ی Symbol Results)Findنمایش داده می شود .
121
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
حال ،به منظور دستیابی به بخشی که متغیر در آن به کار برده شده ،روی ورودی آن دوبار کلیک کنید.
هر شخصی که با کامپیوتر کار کرده ،با این عملیات ( )paste ،copy ،cutآشنا است .این عملیات برای ذخیره سازی کد در Microsoft
Visual Studioبسیار پرکاربرد هستند .به عبارت دیگر ،چنانچه کدی دارید که مایلید در بخش های مختلف استفاده کنید ،می توانید آن را
در جایی به صورت ذخیره نگه داشته و هر زمان که به آن نیاز پیدا کردید از آن استفاده کنید.
ابتدا ،به منظور ذخیره سازی کد ،کد را در هر برنامه ی ویرایش متنی مثل notepad ،wordیا code editorبرنامه ی Microsoft Visual
Studioتایپ کنید .کدِ نام برده را انتخاب کرده ،سپس آن را روی clipboardکپی کنید .حال ،برای حفظ کردن آن( ،در Microsoft Visual
Toolbox )Studioرا باز کنید ( main menuرا باز کرده ،روی View -> Toolboxکلیک کنید) .یک فضای خالی را در toolboxانتخاب
کرده ،روی آن راست کلیک کنید و بعد گزینه ی pasteرا فشار دهید.
122
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
شیوه ی دیگر انجام این کار ،این است که کد دلخواه را انتخاب کرده ،سپس آن را بکشید و روی صفحه ی Toolboxرها کنید .به همین
شیوه ،می توانید code itemهای مختلفی به Toolboxاضافه کنید .پس از جای گذاری کد در ،Toolboxکد موردنظر قابل دسترس می
شود .حال ،به منظور استفاده از کد ،آن را از Toolboxگرفته و روی قسمت مورد نظر در code editorقرار دهید.
به منظور تغییر اسم آیتمی در کامپیوتر ،ابتدا باید آن را پیدا کرده ،سپس آن را ویرایش کنید .چنانچه آن اسم در قسمت های مختلفی به
کارفته ،همچنان می توان به دنبال همه ی آن ها گشت و آن ها را ویرایش کرد .احتمال خطا کردن در این مورد بسیار باال است .اگر کد خود را
با text editorمی نویسید ،می توانید تمام نمونه های آن اسم را با گزینه ی Edit -> Replaceپیدا کرده و ویرایش کنید .از همین روش
می توان در code editorنیز استفاده کرد .متأسفانه این روش تنها برای یک فایل کارگر است .در صورتی که پروژه ی شما فایل های متعددی
دارد ،واسم ها در آن فایل ها ذخیره شده باشند ،این فرایند بسیار دشوار می گردد.
اما برنامه ی ،Microsoft Visual Studioفرایند پیدا کردن و تغییر دادن اسم را فوق العاده آسان می سازد .کد زیر را در نظر بگیرد.
class Order
123
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
{
)(static void Main
{
;int nbr = 148
;)System.Console.WriteLine(nbr
}
}
به منظور تغییر اسم یک متغیر ،در code editorدستورات زیر را انجام دهید.
روی اسم موردنظر دوبار کلیک کرده ،آن را ویرایش کنید .زیر اسم موردنظر یک خط زیرین ( _ )underlineپدیدار می شود.
اگر نشان گر موس خود را روی آن قرار دهید ،تگی پدیدار می شود که با کلیک کردن روی پیکان ( )arrowآن ،فهرست گزینه ی کوچکی
نمایان می شود.
اگر روی گزی نه ی اول کلیک کنید ،تمام نمونه های آن متغیر عوض می شوند .حال ،اگر می خواهید پنجره ی پیش نمایش ( )nextنمایش داده
اگر می خواهید برنامه ی ،studioاسم ها را پیدا کرده و آن ها را در داخل commentها تغییر دهد ،در Comment check boxروی گزینه
ی Searchکلیک کنید .چنانچه ،اسم در رشته ها نگه داشته می شود و شما خواهان تغییر آن هستید ،در Strings checkboxروی گزینه
ی searchکلیک کنید .پس از اینکه شما okرا اتنخاب کردید ،پنجره ی محاوره ( Preview Changes-rename ،)dialog boxروی صفحه
نمایش پدیدار می گردد .پنجره ی باال تمام جاهایی که اسم در آن به کار رفته را برای شما به نمایش می گذارد .حال ،می توانید اسم را به
125
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
اکنون ،به منظور جایگزین کردن اسم دکمه ی Applyرا فشار دهید.
چنانچه داکیومنتی بسیار طوالنی در اختیار دارید که از خطوط بسیار زیادی تشکیل شده ،در یک بخش خاص ممکن است با متغیری مواجه
شوید که مکانی که متغیر در آن تعریف شده برای شما برای شما شناس نیست .حال ،در صورت استفاده از ،Microsoft Visual Studioبه
روی متغیر موردنظر کلیک راست کرده ،سپس گزینه ی Go to definitionرا انتخاب کنید.
126
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
روی اسم متغیر کلیک کرده و کلید های Shift + F2را با هم فشار دهید.
در هر دو صورت ،برنامه شما را مستقیم به جایی که متغیر در آن تعریف شده می برد.
127
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
دسترسی به خطی از کد از طریق اندیس آن
در صورت استفاده از ،Microsoft Visual Studioچنانچه داکیومنتی ایجاد کرده اید که خطوط فراوانی دارد و اگر می خواهید برنامه شما را
Main menuرا باز کرده ،گزینه ی Edit -> Go To...را انتخاب کنید.
حال ،پنجره ی محاوره ای نمایان می گردد که شما می توانید با وارد کردن شماره ی خط در آن ،خط مزبور را پیدا کنید.
مقدمه
در برنامه نویسی منظور از ،operationعملیاتی است که به منظور اصالح مقدار متغیر موجود( ،یا ایجاد مقداری جدید با ترکیب مقدارهای جاری)،
روی مقدار معینی انجام می شود .بنابراین operation ،با استفاده از حداقل یک نشانه ( )symbolو یک مقدار ( )valueامکان پذیر می شود.
نشانه ای که در عملیات به کار برده شده( operator ،عملگر( خوانده می شود .حال ،مقداری که در عملیات نام برده استفاده شده operand
( Unary operatorعملگر یگانی) ،عملگری است که عملیات خود را روی تنها یک عملوند انجام می دهد.چنانچه ،عملگری عملیات مورد نیاز را
روی دو عملوند انجام دهد( binary operand ،عملگر دوگانی) اطالق می گردد.
.2به منظور ایجاد برنامه ی کاربردی جدید ،به فهرست گزینه ی اصلی مراجعه کرده ،سپس روی گزینه ی File -> New Project...کلیک
کنید.
.5برای ایجاد فایل ویژه ی کد مورد نظر main menu ،را باز کرده ،سپس Project -> Add New Item...را انتخاب کنید.
128
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Code File .6را از لیست میانی انتخاب کنید.
}{
این عالمت در واقع پرکاربردترین و کارامدترین عملگر در زبان C#می باشد .از این عالمت به منظور ایجاد بخشی از یک کد استفاده می شود.
به این ترتیب ،وظیفه ی آن تعیین حد و مرز و سامان دهی فضای نامی ( ،)name spaceکالس ها ،ساختارها و استثنات است .البته ،می توان
آن را به دلخواه در دستورهای شرطی به کاربرد .از عملگر مزبور ،به منظور ایجاد محدوده ی متغیر ( )variable scopeنیز استفاده می شود.
در فایل خالی که در اختیار شما قرار داده می شود ،دستور زیر را وارد کنید.
class Order
{
}
پرانتز ()
از عملگر پرانتز به منظور جداسازی گروهی از اقالم به کار می رود که متعلق به یک موجودیت ( )entityخاص است .برای مثال ،با پرانتز می توان
متد Mainرا از یک متغیر عادی جدا کرد .مثال زیر را در نظر بگیرید.
class Order
{
)(static void Main
{
}
}
از عملگر پرانتز می توان به منظور جداسازی ( operationعملیات) یا ( expressionعبارت) نیز استفاده کرد.
129
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
class Order
{
)(static void Main
{
}
}
مثال
;int number
در فایل خالی که در اختیار شما قرار داده می شود ،دستورات زیر را تایپ کنید.
class Order
{
)(static void Main
{
;double mondayDiscount
}
}
ویرگول به منظور جداسازی متغیرهای یک گروه به کار می رود .برای مثال ،با کمک ویرگول می توان اسم متغیرهایی که با یک نوع داده تعریف
class Exercise
{
)(static void Main
{
;string firstName, lastName, fullName
}
}
130
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
از ویرگول می توان به منظور جداسازی اعضای یک enumerationیا آرگومان های یک متد نیز استفاده کرد.
استفاده از ویرگول
class Order
{
)(static void Main
{
;string customerName, homePhone
;uint numberOfShirts, numberOfPants, numberOfDresses
;decimal priceOneShirt, priceAPairOfPants, priceOneDress
;uint orderMonth, orderDay, orderYear
;double mondayDiscount
}
}
پس از تعریف متغیر compiler ،مقدار مشخصی از حافظه ی کامپیوتر را به آن اختصاص می دهد .حال ،آن میزان حافظه تا زمانی که شما آن را
با مقدار معینی پر نکرده اید ،خالی می ماند .برای قرار دادن مقداری در حافظه ی اختصاص داده شده به متغیر ،می توان از عملگر جایگزین " = "
VariableName = Value
فاکتور VariableNameباید اسم متغیر معتبری باشد .توجه داشته باشید که نمی توان از مقدار عددی ( )numeric valueیا رشته ای که
داخل " " قرار داده شده باشد ،برای این منظور استفاده کرد .در مثال زیر یک مقدار عددی به متغیر اختصاص داده.
class Exercise
{
)(static void Main
{
;decimal salary
// Using the assignment operator
;salary = 12.55M
}
}
پس از این که متغیری تعریف شد و مقداری به آن اختصاص داده شد ،می توان برای مشاهده ی (نمایش) مقدار آن )( Writeیا )(WriteLine
را فراخواند.
131
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
مثال
class Exercise
{
)(static void Main
{
;decimal salary
// Using the assignment operator
;salary = 12.55M
;)" System.Console.Write("Employee's Hourly Salary:
;)System.Console.WriteLine(salary
;)(System.Console.ReadKey
}
}
ُکدِ فوق ابتدا متغیر را تعریف کرده ،س پس مقدار را به آن تخصیص داده است.این رویه زمانی دنبال می شود که ،بخواهید مقدار یک متغیر را
تغییر دهید .از فرایند تخصیص مقداری به متغیر ،پس از اینکه متغیر تعریف شده ،با نام مقداردهی اولیه یا initializingیاد می شود.
مثال
class Exercise
{
)(static void Main
{
// Using the assignment operator
;decimal salary = 12.55M
;)" System.Console.Write("Employee's Hourly Salary:
;)System.Console.WriteLine(salary
;)(System.Console.ReadKey
}
}
همان طور که پیش تر ذکر شد ،می توان چند متغیر را با استفاده از تنها یک نوع داده همزمان تعریف کرد ،سپس اسامی آن ها را با ویرگول از
هم جدا کرد .حین انجام این عملیات ،همچنین می توان هر متغیر را با valueدلخواه و پیش از عملگر ویرگول یا نقطه ویرگول ،مقداردهی اولیه
class Exercise
{
)(static void Main
132
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
{
// Initializing various variables when declaring them with the same data type
double value1 = 224.58, value2 = 1548.26;
System.Console.Write("Value 1 = ");
System.Console.WriteLine(value1);
System.Console.Write("Value 2 = ");
System.Console.WriteLine(value2);
System.Console.WriteLine();
System.Console.ReadKey();
}
}
نتیجه
Value 1 = 224.58
Value 2 = 1548.26
. فایل مرتبط را این گونه اصالح کنید،= به منظور استفاده از عملگر جایگزین
class Order
{
static void Main()
{
string customerName, homePhone;
uint numberOfShirts = 5, numberOfPants = 2, numberOfDresses = 0;
decimal priceOneShirt = 0.95M, priceAPairOfPants = 2.95M, priceOneDress = 4.55M;
uint orderMonth = 3, orderDay = 15, orderYear = 2002;
double mondayDiscount = 0.25; // 25%;
}
}
)'( عالمت
. تعریف شده باشدchar از (') به منظور دخیل کردن یک کاراکتر برای مقداردهی اولیه ی متغیری به کار می رود که با نوع داده ی
مثال
class Exercise
{
static void Main()
{
char gender;
133
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;string firstName, lastName, fullName
;'gender = 'M
}
}
نمی توان بیش از یک کاراکتر داخل ' ' قرار داد .به عبارت دیگر ،جمیع نشانه های به کاربرده شده نباید به بیشتر از یک کاراکتر ارزیابی شود.
مثال
class Exercise
{
)(static void Main
{
;)'System.Console.WriteLine('\n
}
}
عالمت (")
از این عالمت به منظور تعیین حد و مرز یک رشته ( )stringاستفاده می شود .داخل " " می توان یک فضای خالی ،یک کاراکتر ،یک کلمه یا یک
گروه کلمه قرار داد .جمیع این اقالم داخل " " ،یک رشته را تشکیل می دهد .به مثال زیر توجه کنید.
class Exercise
{
)(static void Main
{
;)"!!!System.Console.WriteLine("The Wonderful World of C#
}
}
class Order
{
)(static void Main
{
string customerName = "James Burreck",
;"homePhone = "(202) 301-7030
uint numberOfShirts = 1,
numberOfPants = 1,
134
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
numberOfDresses = 1;
decimal priceOneShirt = 0.95M,
priceAPairOfPants = 2.95M,
priceOneDress = 4.55M;
uint orderMonth = 3, orderDay = 15, orderYear = 2002;
double mondayDiscount = 0.25; // 25%;
System.Console.WriteLine("-/- Georgetown Cleaning Services -/-");
System.Console.WriteLine("========================");
System.Console.Write("Customer: ");
System.Console.WriteLine(customerName);
System.Console.Write("Home Phone: ");
System.Console.WriteLine(homePhone);
System.Console.Write("Order Date: ");
System.Console.Write(orderMonth);
System.Console.Write('/');
System.Console.Write(orderDay);
System.Console.Write('/');
System.Console.WriteLine(orderYear);
System.Console.WriteLine("------------------------");
System.Console.WriteLine("Item Type Qty Sub-Total");
System.Console.WriteLine("------------------------");
System.Console.Write("Shirts ");
System.Console.Write(numberOfShirts);
System.Console.Write(" ");
System.Console.WriteLine(priceOneShirt);
System.Console.Write("Pants ");
System.Console.Write(numberOfPants);
System.Console.Write(" ");
System.Console.WriteLine(priceAPairOfPants);
System.Console.Write("Dresses ");
System.Console.Write(numberOfDresses);
System.Console.Write(" ");
System.Console.WriteLine(priceOneDress);
System.Console.WriteLine("------------------------");
System.Console.Write("Monday Discount: ");
System.Console.Write(mondayDiscount);
System.Console.WriteLine('%');
System.Console.WriteLine("========================");
System.Console.ReadKey();
}
}
. این نتیجه حاصل می گردد. برای مشاهده ی نتیجه برنامه را اجرا کنید.2
135
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
-/- Georgetown Cleaning Services -/-
========================
Customer: James Burreck
Home Phone: (202) 301-7030
Order Date: 3/15/2002
------------------------
Item Type Qty Sub-Total
------------------------
Shirts 1 0.95
Pants 1 2.95
Dresses 1 4.55
------------------------
Monday Discount: 0.25%
========================
کروشه ][
از این عالمت بیشتر زمان ها برای مدیریت و کنترل اندیس یا بٌعد یک آرایه استفاده می شود .درباره ی کاربرد این عملگر در بخش آرایه ها بحث
می کنیم.
علم جبر برای دسته بندی ارقام از یک جور خط کش استفاده می کند .وسط این خط کش عدد 2قرار دارد .حال ،ارقامی که در سمت چپ صفر
قرار می گیرند منفی تلقی می شوند و ارقامی که در سمت راست جای گرفته اند مثبت.
∞- -6 -5 -4 -3 -2 -1 1 2 3 4 5 6 ∞+
0
∞- -6 -5 -4 -3 -2 -1 1 2 3 4 5 6 ∞+
مقداری که در سمت راست 2قرار دارد مثبت محسوب می شود .اعداد مثبت با عالمت +نمایش داده می شوند .+90335، +228، +4 :در این
مورد + ،در واقع یک عملگر یگانی ( )unary operatorحساب می شود ،زیرا بر تنها یک عملوند ( )operandتاثیر می گذارد .توجه داشته
باشید که عملگر +باید همیشه سمت چپ عملوند قرار گیرد و نه سمت راست آن.
136
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
البته ،در علم ریاضی این عالمت نشان داده نمی شود ،و اگر عددی بدون هیچگونه عالمت خاص نوشته شود ،به طور معمول مثبت تلقی می
گردد .پس ارقام +228،+4و +90335را می توان به این صورت نیز نوشت .90335، 228،4 :به خاطر این که مقدار فوق هیچ گونه عالمتی
مثال
class Exercise
{
)(static void Main
{
// Displaying an unsigned number
;)" = System.Console.Write("Number
;)System.Console.WriteLine(+802
}
}
نتیجه
Number = 802
همان طور که در خط کش باال مشاهده می کنید ،برای نشان دادن هر عددی که در سمت چپ صفر قرار می گیرد ،مجبور به استفاده از عالمت -
هستیم . -32706، -448، -12 :عددی که با این عالمت همراه باشد منفی اطالق می شود .برخالف عدد مثبت ،عدد منفی باید با نشان مناسب
( )-همراه باشد .برای منفی کردن یک عدد مثبت هم کافی است فقط یک عالمت منفی به آن اضافه کنید.
class Exercise
{
)(static void Main
{
// Displaying an unsigned number
;)" System.Console.Write("First Number
;)System.Console.WriteLine(+802
// Displaying a negative number
;)" System.Console.Write("Second Number
;)System.Console.WriteLine(-802
}
}
نتیجه
137
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
First Number 802
Second Number -802
. در اختیار برنامه نویس قرار می دهد، را برای محاسبه ی مقدار حافظه ی مورد نیاز یک نوع دادهsizeof عملگر یگانیC# زبان
.) را داخل پرانتز عملگر مذکور قرار دادdata type( باید آن،به منظور محاسبه مقدار حافظه ی مورد نیاز یک نوع داده ی خاص
مثال
class Exercise
{
static void Main()
{
double period = 155.50;
int size = sizeof(double);
System.Console.Write("The value ");
System.Console.Write(period);
System.Console.Write(" uses ");
System.Console.Write(size);
System.Console.WriteLine(" bytes\n");
}
}
نتیجه
class Exercise
{
static void Main()
{
// Thesizeof operator used to get the memory size used by
// a variable declared with a certain a data type
System.Console.WriteLine("The sizeof Operator");
System.Console.WriteLine("==========================");
System.Console.WriteLine("Data Type Memory Size");
System.Console.WriteLine("--------------------------");
System.Console.Write("char ");
System.Console.Write(sizeof(char));
System.Console.WriteLine(" Bytes");
138
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
System.Console.Write("bool ");
System.Console.Write(sizeof(bool));
System.Console.WriteLine(" Bytes");
System.Console.Write("int ");
System.Console.Write(sizeof(int));
System.Console.WriteLine(" Bytes");
System.Console.Write("uint ");
System.Console.Write(sizeof(uint));
System.Console.WriteLine(" Bytes");
System.Console.Write("short ");
System.Console.Write(sizeof(short));
System.Console.WriteLine(" Bytes");
System.Console.Write("ushort ");
System.Console.Write(sizeof(ushort));
System.Console.WriteLine(" Bytes");
System.Console.Write("byte ");
System.Console.Write(sizeof(byte));
System.Console.WriteLine(" Bytes");
System.Console.Write("sbyte ");
System.Console.Write(sizeof(sbyte));
System.Console.WriteLine(" Bytes");
System.Console.Write("float ");
System.Console.Write(sizeof(float));
System.Console.WriteLine(" Bytes");
System.Console.Write("double ");
System.Console.Write(sizeof(double));
System.Console.WriteLine(" Bytes");
System.Console.Write("decimal ");
System.Console.Write(sizeof(decimal));
System.Console.WriteLine(" Bytes");
System.Console.Write("long ");
System.Console.Write(sizeof(long));
System.Console.WriteLine(" Bytes");
System.Console.Write("ulong ");
System.Console.Write(sizeof(ulong));
System.Console.WriteLine(" Bytes");
System.Console.WriteLine("===========================");
System.Console.WriteLine();
System.Console.ReadKey();
}
}
نتیجه
139
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
bool 1 Bytes
int 4 Bytes
uint 4 Bytes
short 2 Bytes
ushort 2 Bytes
byte 1 Bytes
sbyte 1 Bytes
float 4 Bytes
double 8 Bytes
decimal 16 Bytes
long 8 Bytes
ulong 8 Bytes
===========================
عمل جمع
زمانی که بخواهیم دو چیز هم نوع را به هم اضافه کنیم (هر تعداد دفعه ای که الزم باشد) ،از addition operationیا عمل جمع بهره می
گیریم .گاهی نیز ،به جای اضافه کردن یک چیز به چیز دیگر ،یک گروه را به گروه دیگر اضافه می کنیم .تنها تفاوت آن در سرعت انجام عملیات
است .در ریاضی برای انجام فرایند جمع از عالمت +استفاده می شود .در C#نیز همین عالمت کاربرد دارد.
برای به دست آوردن حاصل جمع دو مقدار ،باید اولی را به دومی اضافه کرد .مقدار جدیدی در اختیار شما قرار می گیرد ،به این صورت
در مورد ارقام ،نحوه و ترتیب قرارگیری اعداد چندان اهمیتی ندارد .برای مثال value1 + value2 ،هیچ فرقی با value2 + value1ندارد.
مثال
class Exercise
{
)(static void Main
{
;)" = System.Console.Write("244 + 835
;)System.Console.WriteLine(244 + 835
}
}
نتیجه
140
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
همچنین می توان مقدارهایی که از پیش تعریف یا مقداردهی اولیه شده را در برنامه ی خود به کار برد ،حتی می توان مقدارها را از کاربر دریافت
کرد.
در ، C#می توان برای ایجاد یک رشته ی جدید ،متغیرهای رشته را به آن اضافه کرد .عملیات همان طوری که جمع اعداد صورت می گیرد ،انجام
می شود .برای مثال "Pie" + "Chart" ،نتیجه می دهد " . "PieChartبه همین ترتیب ،می توانید هر تعداد رشته که مایلید با دخیل کردن
مثال
class Exercise
{
)(static void Main
{
;"varfirstName = "Alexander
;"varlastName = "Kallack
;varfullName = firstName + " " + lastName
;)" System.Console.Write("Full Name:
;)System.Console.WriteLine(fullName
}
}
class Order
{
)(static void Main
{
string customerName = "James Burreck",
;"homePhone = "(202) 301-7030
uint numberOfShirts = 1,
numberOfPants = 1,
;numberOfDresses = 1
;uint totalNumberOfItems
141
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
decimal priceOneShirt = 0.95M,
priceAPairOfPants = 2.95M,
priceOneDress = 4.55M;
uint orderMonth = 3, orderDay = 15, orderYear = 2002;
totalNumberOfItems = numberOfShirts + numberOfPants + numberOfDresses;
System.Console.WriteLine("-/- Georgetown Cleaning Services -/-");
System.Console.WriteLine("========================");
System.Console.Write("Customer: ");
System.Console.WriteLine(customerName);
System.Console.Write("Home Phone: ");
System.Console.WriteLine(homePhone);
System.Console.Write("Order Date: ");
System.Console.Write(orderMonth);
System.Console.Write('/');
System.Console.Write(orderDay);
System.Console.Write('/');
System.Console.WriteLine(orderYear);
System.Console.WriteLine("------------------------");
System.Console.WriteLine("Item Type Qty Sub-Total");
System.Console.WriteLine("------------------------");
System.Console.Write("Shirts ");
System.Console.Write(numberOfShirts);
System.Console.Write(" ");
System.Console.WriteLine(priceOneShirt);
System.Console.Write("Pants ");
System.Console.Write(numberOfPants);
System.Console.Write(" ");
System.Console.WriteLine(priceAPairOfPants);
System.Console.Write("Dresses ");
System.Console.Write(numberOfDresses);
System.Console.Write(" ");
System.Console.WriteLine(priceOneDress);
System.Console.WriteLine("------------------------");
System.Console.Write("Number of Items: ");
System.Console.WriteLine(totalNumberOfItems);
System.Console.WriteLine("========================");
System.Console.ReadKey();
}
}
142
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
-/- Georgetown Cleaning Services -/-
========================
Customer: James Burreck
Home Phone: (202) 301-7030
Order Date: 3/15/2002
------------------------
Item Type Qty Sub-Total
------------------------
Shirts 1 0.95
Pants 1 2.95
Dresses 1 4.55
------------------------
Number of Items: 3
========================
، متغیر یا مقدار برای همیشه تغییر پیدا کرده، به آن8 پس از افزودن. به آن است8 اضافه کردن،آسان ترین روش به منظور افزایش یک مقدار
. مثال زیر این نمونه را به زیبایی نمایش داده است.و متغیر حاوی مقدار جدید خواهد بود
نتیجه
143
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Value = Value به جای نوشتن." را برای برنامه نویس فراهم می کند++" )increment operator( عملگر افزایش، برای این منظورC# زبان
. برنامه فوق را به این ترتیب نیز می توان نوشت. و نتیجه نیز همان خواهد بودValue++ می توان نوشت،+ 1
، به متغیر1 این عملگر با اضافه کردن. زیرا تنها یک متغیر را دستخوش تغییر خود قرار می دهد، نیز یک عملگر یگانی محسوب می شود++ عملگر
، متغیر نیز سر انجام. اضافه می کند1 مقدار قبلی متغیر را گرفته و به آنcompiler ، اجرا می شودValue++ هر بار که.آن را تغییر می دهد
144
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Value = 13
Value = 14
Value = 15
به منظور افزایش مقدار یک. بسیار حائز اهمیت است، به خصوص در رابطه با متغیری که اصالح می کند،موقعیتی که عملگر در آن قرار می گیرد
. باید عملگر را به طور حتم سمت چپ متغیر قرار داد، پیش از استفاده ی دوباره از آن،متغیر
. کافی است متغیری که قرار است میزبان مقدار جدید باشد را تعریف کنید.افزودن یک مقدار ثابت به متغیر امری غیر عادی نیست
مثال
روشی که باال به کار رفته ،ایجاب می کند شما در برنامه ی خود دو متغیر داشته باشید .مزیت آن این است که هر متغیر می تواند مقدار خود را
داشته باشد ،با این وجود مقدار متغیردوم وابسته است به تغییراتی که به متغییر اصلی وارد می شود .گاهی اوقات نیازی به حفظ کردن مقدار
اولیه متغیر اصلی نیست ،و الزم است که مقدار یک متغیر را به صورت دائمی تغییر دهید .برای این منظور ،باید عملیات جمع را مستقیماً روی
خود متغیر پیاده کرد ( با اضافه کردن مقدار دلخواه به متغیر) .با این کار نه تنها مقدار متغیر اصالح می شود ،بلکه دیگر نیازی به متغیر اضافه
به منظور افزودن مقدار به متغیر و اصالح آن ،می توان عملگر جایگزین را با عملگر +ترکیب کرد و عملگری جدید به وجود آورد .+= :
مثال
146
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
برنامه همان نتیجه ی قبلی را به دست می دهد.
عملیات ضرب
ضرب به شما اجازه می دهد یک عدد را تعداد دفعات مشخص (که توسط مقدار دومی مشخص می شود) به خود آن عدد اضافه کنید .برای
مثال ،به جای این که مقداری را به این صورت به آن اضافه کنید ،A + A + A + A :می توان ابتدا تعداد دفعاتی که این مقدار در عملیات جمع
به کار رفته را پیدا کرده ،سپس آن مقدار را در تعداد دفعات تکرار ،ضرب کنید که در این مثال :همان عدد 4می باشد.
درست مثل عمل جمع ،ضرب نیز شرکت پذیر است .a * b * c = c * b * a :دستور نحوی عمل ضرب از همان قوانین عمل جمع پیروی می کند.
class Exercise
{
)(static void Main
{
// Initializing various variables when declaring them with the same data type
;double value1 = 224.58, value2 = 1548.26
;var result = value1 * value2
;)System.Console.Write(value1
;)" * "(System.Console.Write
;)System.Console.Write(value2
;)" = "(System.Console.Write
;)System.Console.WriteLine(result
;)(System.Console.WriteLine
}
}
نتیجه
class Order
{
)(static void Main
{
;const decimal priceOneShirt = 0.95M
;const decimal priceAPairOfPants = 2.95M
147
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
const decimal priceOneDress = 4.55M;
string customerName = "James Burreck",
homePhone = "(202) 301-7030";
uint numberOfShirts = 5,
numberOfPants = 2,
numberOfDresses = 3;
uint totalNumberOfItems;
decimal subTotalShirts, subTotalPants, subTotalDresses;
decimal totalOrder;
uint orderMonth = 3, orderDay = 15, orderYear = 2002;
totalNumberOfItems = numberOfShirts + numberOfPants + numberOfDresses;
subTotalShirts = priceOneShirt * numberOfShirts;
subTotalPants = priceAPairOfPants * numberOfPants;
subTotalDresses = numberOfDresses * priceOneDress;
totalOrder = subTotalShirts + subTotalPants + subTotalDresses;
System.Console.WriteLine("-/- Georgetown Cleaning Services -/-");
System.Console.WriteLine("====================================");
System.Console.Write("Customer: ");
System.Console.WriteLine(customerName);
System.Console.Write("Home Phone: ");
System.Console.WriteLine(homePhone);
System.Console.Write("Order Date: ");
System.Console.Write(orderMonth);
System.Console.Write('/');
System.Console.Write(orderDay);
System.Console.Write('/');
System.Console.WriteLine(orderYear);
System.Console.WriteLine("------------------------------------");
System.Console.WriteLine("Item Type Qty Unit/Price Sub-Total");
System.Console.WriteLine("------------------------------------");
System.Console.Write("Shirts ");
System.Console.Write(numberOfShirts);
System.Console.Write(" ");
System.Console.Write(priceOneShirt);
System.Console.Write(" ");
System.Console.WriteLine(subTotalShirts);
System.Console.Write("Pants ");
System.Console.Write(numberOfPants);
System.Console.Write(" ");
System.Console.Write(priceAPairOfPants);
System.Console.Write(" ");
System.Console.WriteLine(subTotalPants);
System.Console.Write("Dresses ");
148
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
System.Console.Write(numberOfDresses);
System.Console.Write(" ");
System.Console.Write(priceOneDress);
System.Console.Write(" ");
System.Console.WriteLine(subTotalDresses);
System.Console.WriteLine("------------------------------------");
System.Console.Write("Number of Items: ");
System.Console.WriteLine(totalNumberOfItems);
System.Console.Write("Total Order: ");
System.Console.WriteLine(totalOrder);
System.Console.WriteLine("====================================");
System.Console.ReadKey();
}
}
ضرب مرکب
همین عملیات. سپس محصول آن را به متغیر دیگری اختصاص داد،دیدیم که می توان مقداری را ازمتغیر کم کرد یا مقداری به آن اضافه کرد
مثال
149
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
class Exercise
{
static void Main()
{
double value = 12.75;
System.Console.Write("Value = ");
System.Console.WriteLine(value);
value = value * 2.42;
System.Console.Write("Value = ");
System.Console.WriteLine(value);
}
}
نتیجه
Value = 12.75
Value = 30.855
Press any key to continue...
. عملگر ضرب مرکب (که با این عالمت =* نشان داده می شود) را در اختیار برنامه نویس قرار می دهدC# زبان،به منظور آسان سازی عملیات
class Exercise
{
static void Main()
{
double value = 12.75;
System.Console.Write("Value = ");
System.Console.WriteLine(value);
value *= 2.42;
System.Console.Write("Value = ");
System.Console.WriteLine(value);
}
}
عملیات تفریق
عمل تفریق همان طور که. کم کردن متضاد عمل جمع محسوب می شود.از این عمل به منظور کم کردن مقداری از مقدار دیگر استفاده می شود
. توجه خود را به مثال زیر جلب کنید.) انجام می شود-( می دانید با عملگر
class Exercise
{
static void Main()
150
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
{
// Values used in this program
double value1 = 224.58, value2 = 1548.26;
var result = value1 - value2;
System.Console.Write(value1);
System.Console.Write(" - ");
System.Console.Write(value2);
System.Console.Write(" = ");
System.Console.WriteLine(result);
}
}
نتیجه
برنامه ی زیر این حقیقت را به خوبی نشان. یکی نیستc - b – a باa - b – c ، به عبارت دیگر. تفریق شرکت پذیر نیست،برخالف عمل جمع
.می دهد
class Exercise
{
static void Main()
{
// This tests whether the addition is associative
System.Console.WriteLine(" =+= Addition =+=");
System.Console.Write("128 + 42 + 5 = ");
System.Console.WriteLine(128 + 42 + 5);
System.Console.Write(" 5 + 42 + 128 = ");
System.Console.WriteLine(5 + 42 + 128);
System.Console.WriteLine();
// This tests whether the subtraction is associative
System.Console.WriteLine(" =-= Subtraction =-=");
System.Console.Write("128 - 42 - 5 = ");
System.Console.WriteLine(128 - 42 - 5);
System.Console.Write(" 5 - 42 - 128 = ");
System.Console.WriteLine(5 - 42 - 128);
System.Console.WriteLine();
}
}
151
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
=-= Subtraction =-=
128 - 42 - 5 = 81
5 - 42 - 128 = -165
اعداد همان ترتیب را، در بخش منها عملیات. هر دو عملیات یک نتیجه ی واحد و یکسان را ارائه می دهند،همان طور که مشاهده می کنید
class Order
{
static void Main()
{
const decimal priceOneShirt = 0.95M;
const decimal priceAPairOfPants = 2.95M;
const decimal priceOneDress = 4.55M;
const decimal salestaxRate = 0.0575M; // 5.75%
string customerName = "James Burreck",
homePhone = "(202) 301-7030";
uint numberOfShirts = 5,
numberOfPants = 2,
numberOfDresses = 3;
uint totalNumberOfItems;
decimal subTotalShirts, subTotalPants, subTotalDresses;
decimal taxAmount, totalOrder, netPrice;
uint orderMonth = 3, orderDay = 15, orderYear = 2002;
totalNumberOfItems = numberOfShirts + numberOfPants + numberOfDresses;
subTotalShirts = priceOneShirt * numberOfShirts;
subTotalPants = priceAPairOfPants * numberOfPants;
subTotalDresses = numberOfDresses * priceOneDress;
totalOrder = subTotalShirts + subTotalPants + subTotalDresses;
taxAmount = totalOrder * salestaxRate;
netPrice = totalOrder - taxAmount;
System.Console.WriteLine("-/- Georgetown Cleaning Services -/-");
System.Console.WriteLine("====================================");
System.Console.Write("Customer: ");
System.Console.WriteLine(customerName);
System.Console.Write("Home Phone: ");
System.Console.WriteLine(homePhone);
System.Console.Write("Order Date: ");
System.Console.Write(orderMonth);
System.Console.Write('/');
152
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
System.Console.Write(orderDay);
System.Console.Write('/');
System.Console.WriteLine(orderYear);
System.Console.WriteLine("------------------------------------");
System.Console.WriteLine("Item Type Qty Unit/Price Sub-Total");
System.Console.WriteLine("------------------------------------");
System.Console.Write("Shirts ");
System.Console.Write(numberOfShirts);
System.Console.Write(" ");
System.Console.Write(priceOneShirt);
System.Console.Write(" ");
System.Console.WriteLine(subTotalShirts);
System.Console.Write("Pants ");
System.Console.Write(numberOfPants);
System.Console.Write(" ");
System.Console.Write(priceAPairOfPants);
System.Console.Write(" ");
System.Console.WriteLine(subTotalPants);
System.Console.Write("Dresses ");
System.Console.Write(numberOfDresses);
System.Console.Write(" ");
System.Console.Write(priceOneDress);
System.Console.Write(" ");
System.Console.WriteLine(subTotalDresses);
System.Console.WriteLine("------------------------------------");
System.Console.Write("Number of Items: ");
System.Console.WriteLine(totalNumberOfItems);
System.Console.Write("Total Order: ");
System.Console.WriteLine(totalOrder);
System.Console.Write("Tax Rate: ");
System.Console.Write(salestaxRate * 100);
System.Console.WriteLine('%');
System.Console.Write("Tax Amount: ");
System.Console.WriteLine(taxAmount);
System.Console.Write("Net Price: ");
System.Console.WriteLine(netPrice);
System.Console.WriteLine("====================================");
System.Console.ReadKey();
}
}
153
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Order Date: 3/15/2002
------------------------------------
Item Type Qty Unit/Price Sub-Total
------------------------------------
Shirts 5 0.95 4.75
Pants 2 2.95 5.90
Dresses 3 4.55 13.65
------------------------------------
Number of Items: 10
Total Order: 24.30
Tax Rate: 5.7500%
Tax Amount: 1.397250
Net Price: 22.902750
====================================
از این عملیات با نام کاهش مقدار. رقم از آن کسر می کنید1 در واقع یک، 5، 6، 7، 8 مثل،زمانی که اعداد را به صورت معکوس می شمارید
نتیجه
154
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
عملیات فوق را می توان به این صورت، با استفاده از عملگر مذکور.) را ارائه می دهد--( برای این منظور عملگر کاهش،C# زبان برنامه نویسی
.اصالح کرد
Pre-decrementing a variable
چنانچه مایلید متغیر را پیش از فراخوانی آن کاهش.در این مورد نیز موقعیت عملگر (جایی که در آن قرار می گیرد) اهمیت به سزایی دارد
. برنامه ی زیر این عملیات را به تصویر کشیده.) را سمت چپ عملوند قرار دهیدdecrement operator( باید عملگر کاهش،دهید
نتیجه
. استفاده می شود-= از عملگر،) از یک متغیرconstant value( به منظور کسر مقدار ثابتی
مثال
در واقع آن را به دو، هنگامی که سیبی را از وسط نصف می کنید، برای مثال.تقسیم یک مقدار عبارتند از جداسازی آن به بخش های متعدد
مثال
class Exercise
{
static void Main()
{
// Initializing various variables when declaring them with the same data type
156
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
double value1 = 224.58, value2 = 1548.26;
var result = value1 / value2;
System.Console.Write(value1);
System.Console.Write(" / ");
System.Console.Write(value2);
System.Console.Write(" = ");
System.Console.WriteLine(result);
System.Console.WriteLine();
}
}
class Order
{
static void Main()
{
const decimal priceOneShirt = 0.95M;
const decimal priceAPairOfPants = 2.95M;
const decimal priceOneDress = 4.55M;
const decimal discountRate = 0.20M; // 20%
const decimal taxRate = 5.75M; // 5.75%
string customerName = "James Burreck", homePhone = "(202) 301-7030";
uint numberOfShirts = 5, numberOfPants = 2, numberOfDresses = 3;
uint totalNumberOfItems;
decimal subTotalShirts, subTotalPants, subTotalDresses;
decimal DiscountAmount, totalOrder, netPrice, taxAmount, salesTotal;
decimal amountTended, difference;
uint orderMonth = 3, orderDay = 15, orderYear = 2002;
totalNumberOfItems = numberOfShirts + numberOfPants + numberOfDresses;
subTotalShirts = priceOneShirt * numberOfShirts;
subTotalPants = priceAPairOfPants * numberOfPants;
subTotalDresses = numberOfDresses * priceOneDress;
totalOrder = subTotalShirts + subTotalPants + subTotalDresses;
157
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
DiscountAmount = totalOrder * discountRate;
netPrice = totalOrder - DiscountAmount;
taxAmount = totalOrder * taxRate / 100;
salesTotal = netPrice + taxAmount;
amountTended = 50M;
difference = amountTended - salesTotal;
System.Console.WriteLine("-/- Georgetown Cleaning Services -/-");
System.Console.WriteLine("====================================");
System.Console.Write("Customer: ");
System.Console.WriteLine(customerName);
System.Console.Write("Home Phone: ");
System.Console.WriteLine(homePhone);
System.Console.Write("Order Date: ");
System.Console.Write(orderMonth);
System.Console.Write('/');
System.Console.Write(orderDay);
System.Console.Write('/');
System.Console.WriteLine(orderYear);
System.Console.WriteLine("------------------------------------");
System.Console.WriteLine("Item Type Qty Unit/Price Sub-Total");
System.Console.WriteLine("------------------------------------");
System.Console.Write("Shirts ");
System.Console.Write(numberOfShirts);
System.Console.Write(" ");
System.Console.Write(priceOneShirt);
System.Console.Write(" ");
System.Console.WriteLine(subTotalShirts);
System.Console.Write("Pants ");
System.Console.Write(numberOfPants);
System.Console.Write(" ");
System.Console.Write(priceAPairOfPants);
System.Console.Write(" ");
System.Console.WriteLine(subTotalPants);
System.Console.Write("Dresses ");
System.Console.Write(numberOfDresses);
System.Console.Write(" ");
System.Console.Write(priceOneDress);
System.Console.Write(" ");
System.Console.WriteLine(subTotalDresses);
System.Console.WriteLine("------------------------------------");
System.Console.Write("Number of Items: ");
System.Console.WriteLine(totalNumberOfItems);
System.Console.Write("Total Order: ");
158
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
System.Console.WriteLine(totalOrder);
System.Console.Write("Discount Rate: ");
System.Console.Write(discountRate * 100);
System.Console.WriteLine('%');
System.Console.Write("Discount Amount: ");
System.Console.WriteLine(DiscountAmount);
System.Console.Write("After Discount: ");
System.Console.WriteLine(netPrice);
System.Console.Write("Tax Rate: ");
System.Console.Write(taxRate);
System.Console.WriteLine('%');
System.Console.Write("Tax Amount: ");
System.Console.WriteLine(taxAmount);
System.Console.Write("Net Price: ");
System.Console.WriteLine(salesTotal);
System.Console.WriteLine("====================================");
System.Console.Write("Amount Tended: ");
System.Console.WriteLine(amountTended);
System.Console.Write("Difference: ");
System.Console.WriteLine(difference);
System.Console.WriteLine("====================================");
System.Console.ReadKey();
}
}
159
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
After Discount: 19.4400
Tax Rate: 5.75%
Tax Amount: 1.39725
Net Price: 20.83725
====================================
Amount Tended: 50
Difference: 29.16275
====================================
به خاطر دارید که می توان مقداری را به متغیری اضافه کرد ،در آن ضرب کرد ،یا از آن کسر کرد ،سپس نتیجه ی آن را به خود متغیر اختصاص
داد .این عملیات را می توان برای تقسیم نیز پیاده کرد .نمونه ی آن را در زیر مشاهده می کنید.
class Exercise
{
)(static void Main
{
;double value = 12.75
;)" = System.Console.Write("Value
;)System.Console.WriteLine(value
;value = value / 2.42
;)" = System.Console.Write("Value
;)System.Console.WriteLine(value
}
}
Value = 12.75
Value = 5.26859504132231
Press any key to continue...
زبان C#برای این منظور عملگر = /را ارائه می دهد .مثال زیر این عملگر را به کار می برد.
class Exercise
{
)(static void Main
{
160
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
double value = 12.75;
System.Console.Write("Value = ");
System.Console.WriteLine(value);
value /= 2.42;
System.Console.Write("Value = ");
System.Console.WriteLine(value);
}
}
گاهی اوقات به باقی.( در آن به کار ببرید814 چنانچه عددی فرد (مثل،عملیات تقسیم نتیجه ای با رقم اعشار در اختیار شما قرار می دهد
مطلع هستید. و بازی در شرف آغاز است، بازیکن کودک در استادیوم حضور دارند22 تصور کنید، برای مثال.مانده ی عمل تقسیم نیاز داریم
چند نفر بیرون از بازی منتظر می مانند؟، اگر بازی با تعداد صحیح شروع شود. بازیکن نیاز است88 که برای هر تیم به
عملگر فوق با گرفتن. این عملیات را انجام می دهد،) نشان داده می شود%( ) که با عالمتremainder operation( عملگر باقی مانده
. فعال می شود،Shift + 5
مثال
class Exercise
{
static void Main()
{
var players = 18;
var remainder = players % 11;
// When the game starts، how many players will wait?.
System.Console.Write("Out of ");
System.Console.Write(players);
System.Console.Write(" players، ");
System.Console.Write(remainder);
System.Console.WriteLine(" players will have to wait when the game starts.\n");
}
}
Out of 18 players، 7 players will have to wait when the game starts.
Press any key to continue...
161
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
)compound remainder( باقی مانده ی مرکب
می توان پس از به دست آوردن باقی مانده ی یک متغیر نتیجه ی آن را دوباره به خود،همان طور که در عملگرهای دیگر ریاضی مشاهده کردید
مثال
class Exercise
{
static void Main()
{
var players = 18;
// When the game starts، how many players will wait?.
System.Console.Write("Out of ");
System.Console.Write(players);
System.Console.Write(" players، ");
players = players % 11;
System.Console.Write(players);
System.Console.WriteLine(" players will have to wait when the game starts.\n");
}
}
مثال
class Exercise
{
static void Main()
{
var players = 18;
// When the game starts، how many players will wait?.
System.Console.Write("Out of ");
System.Console.Write(players);
System.Console.Write(" players، ");
players %= 11;
System.Console.Write(players);
System.Console.WriteLine(" players will have to wait when the game starts.\n");
}
}
162
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Bit Operations
همان طور که در دروس پیشین ذکر کردیم ،کامپیوتر اطالعات دریافتی را در قسمت های بسیار کوچکی به نام Bitدر حافظه ی خود ذخیره می
کند .هر Bitدر خود یا 2دارد یا .8می توان Bitرا با جا به جایی مقدار های 2و 2( 8به 8یا 8به )2دستکاری کرد.
عملیاتی که روی Bitانجام می گیرد ،فقط با 2و 8سروکار دارند .به عبارت دیگر ،هر عدد مبنای )hexadecimal( 82یا دهدهی ()decimal
عملیاتی که در برنامه نویسی ) Microsoft Windows (Win32کاربرد فراوان دارد OR operation ،است که به آن خواهیم پرداخت.
به خاطر دارید که هر ،Bitتنها یک مقدار دربردارد :یا 2و یا .8وارونه سازی (معکوس کردن) جزئی از عملیات ایجاد تغییر در Bitمی باشد .برای
مثال ،اگر در یک Bitمقدار 8را دارید ،به 2تبدیل می شود و اگر مقدار 2را دارید به 8تبدیل می شود .زبان C#با عملگر ~ ،این عملیات را ممکن
می سازد.
برای نمونه رقم 212را در نظر بگیرید .این رقم ( decimalدهدهی است) با سیستم دودویی ( (binaryبه این شکل در می آید :
286 1 0 0 0 1 1 1 1 0
Not 286 0 1 1 1 0 0 0 0 1
مثال
class Exercise
{
)(static void Main
{
;var number1 = 286
;)" = System.Console.Write("286
;)System.Console.WriteLine(number1
;)" = System.Console.Write("Not 286
163
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;)System.Console.WriteLine(~number1
}
}
286 = 286
Not 286 = -287
…Press any key to continue
عبارت است از پیوند دادن (یا ضمیمه کردن) محتوای یک bitبه bitدیگر .برای این منظور C# ،عملگر & را تعبیه کرده.
برای پیوند دادن محتوای دو ،bitبه خاطر داشته باشید که اول باید آن ها را به سیستم دودویی ( )binaryتبدیل کنید.
چنانچه bitای با مقدار 2به bitدیگری با همین مقدار اضافه شود ،نتیجه 2خواهد بود.
Bit0 0
Bit1 0
چنانچه bitبا مقدار ،8به bitای با مقدار 2اضافه شود ،بازهم نتیجه 2خواهد بود.
Bit0 1
Bit1 0
اگر bitبا مقدار ،2به bitای با مقدار 8اضافه شود ،نتیجه 2خواهد بود.
Bit0 0
Bit1 1
164
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Bit0 And Bit1 0
چنانچه bitای با مقدار 8به bitدیگری با همین مقدار اضافه شود ،نتیجه 8خواهد شد.
Bit0 1
Bit1 1
تصور کنید می خواهید عدد 286 bitرا به 445اضافه کنید .رقم دهدهی 216را که به سیستم دودویی تبدیل کنید ،این نتیجه به دست
می آید .100011110 :نسخه ی دودویی رقم ( 4075که دهدهی می باشد) معادل 111111101011 :می باشد .بر اساس چهار قاعده
بنابراین 286 & 4075 ،نتیجه ی 100001010را می دهد ،برابر است با
286 & 4075 1 0 0 0 0 1 0 1 0
یعنی ؛ .286 & 4075 = 256 + 16 + 2 = 266حال به منظور اجرای عملیات پوستگی بیتی ،از عملگر & کمک می گیریم.
class Exercise
165
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
{
static void Main()
{
var number1 = 286;
var number2 = 4075;
var result = number1 & number2;
System.Console.Write("286 & 4075 = ");
System.Console.WriteLine(result);
}
}
نتیجه
به مثال زیر توجه. نتیجه را دوباره برای همان متغیر به کار برد،) bit همچنین می توان پس از انجام عملیات بر روی متغیر (پیوست دادن دو
.کنید
class Exercise
{
static void Main()
{
var number = 286;
System.Console.WriteLine(number);
number = number & 48;
System.Console.WriteLine(number);
}
}
نتیجه
286
16
Press any key to continue...
. به تنها یک مرحله خالصه کرد،&= می توان عملیات فوق را با به کاربردن عملگر
class Exercise
{
static void Main()
{
var number = 286;
System.Console.WriteLine(number);
number &= 48;
System.Console.WriteLine(number);
166
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
}
}
عبارت است از جدا کردن یک bitاز bitای دیگر C# .با فراهم کردن عملگر (|) ،این امکان را فراهم می سازد.
همان طور که به خاطر دارید برای اضافه کردن دو رقم (از طریق پیوند دادن دو ،)bitباید ابتدا آن ها را به سیستم دودویی تبدیل کرد .سپس
اگر bitای با مقدار 2به bitدیگری با همان مقدار اضافه شود ،نتیجه 2می شود.
Bit0 0
Bit1 0
چنانچه bitای با مقدار 8به bitدیگری با مقدار 2اضافه شود ،نتیجه 8می شود.
Bit0 1
Bit1 0
اگر bitای با مقدار 2به bitدیگری با مقدار 8اضافه شود ،نتیجه 8می شود.
Bit0 0
Bit1 1
حال ،چنانچه بیتی با مقدار 8به bitدیگری با همین مقدار اضافه شود ،نتیجه 8خواهد شد.
Bit0 1
Bit1 1
167
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Bit0 Or Bit1 1
به عنوان مثال ،رقم 123را می خواهیم از 2853جدا کنیم .نسخه ی دودویی ( 305رقمی دهدهی) برابر است با .100110001رقم دهدهی
،2853در سیستم دودیی به این صورت خواهد بود . 101100100101بر مبنای چهار قاعده ی فوق ،می توان این دو رقم را به صورت زیر
جداسازی کرد.
بنابراین 305 | 2853 ،نتیجه می دهد 101100110101 :که در آخر برابر است با
Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
2048 1024 512 256 128 64 32 16 8 4 2 1
305 Or 2853 1 0 1 1 0 0 1 1 0 1 0 1
2048 0 512 256 0 0 32 16 0 4 0 1
class Exercise
{
)(static void Main
{
;var number1 = 305
;var number2 = 2853
;var result = number1 | number2
;)" = System.Console.Write("305 Or 2853
;)System.Console.WriteLine(result
}
}
نتیجه
168
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
305 Or 2853 = 2869
Press any key to continue...
می توان تعدادی از bitها را در یک متغیر جداسازی کرد ،سپس نتیجه را به همان متغیر اختصاص داد.
class Exercise
{
)(static void Main
{
;var number = 305
;)System.Console.WriteLine(number
;number = number | 22
;)System.Console.WriteLine(number
}
}
نتیجه
305
311
…Press any key to continue
نسخه ی فشرده ی این عملیات با به کارگیری عملگر =| ،امکان پذیر می باشد.
class Exercise
{
)(static void Main
{
;var number = 305
;)System.Console.WriteLine(number
;number |= 22
;)System.Console.WriteLine(number
}
}
Bitwise Exclusion
فرایندی است که در آن دو bitبا در نظر گرفتن قوانین زیر به هم اضافه می شوند (زبان C#برای این منظور عملگر ^ را ارائه می دهد).
169
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Bit1 0 1
فرض کنید می خواهیم مقدار 618را از 2548خارج کنیم .معادل دودویی .1001101010 : 618معادل دودویی .100111110100 : 2548
بر مبنای دو قاعده ی فوق ،می توان bitهای رقم 618را از 2548خارج کرد.
بنابراین 305 ^ 2853 ،نتیجه می دهد 101110011110 :که برابر است با
Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
2048 1024 512 256 128 64 32 16 8 4 2 1
618 ^ 2548 1 0 1 1 1 0 0 1 1 1 1 0
2048 0 512 256 128 0 0 16 8 4 2 0
نتیجه
2974
Press any key to continue…
. از متغیری خارج کرد و بعد نتیجه ی حاصل را برای خود متغیر به کاربرد، را به صورتی که گفته شدbit می توان شماری
مثال
class Exercise
{
static void Main()
{
var number = 618;
System.Console.WriteLine(number);
number = number ^ 38;
System.Console.WriteLine(number);
}
}
.نتیجه می دهد
618
588
Press any key to continue...
class Exercise
{
static void Main()
{
var number = 618;
System.Console.WriteLine(number);
171
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;number ^= 38
;)System.Console.WriteLine(number
}
}
عبارت است از جا به جایی bitها از سمت راست به سمت چپ .در این مورد نیز ،الزم است پیش از انجام عملیات عدد به معادل دودویی خود
رقم 418را در نظر بگیرید .معادل دودویی آن برابر است با 1011100101 :که به صورت زیر نمایش داده می شود.
1 0 1 1 1 0 0 1 0 1
به منظور انجام عملیات فوق ،باید تک تک مقدارها را (بسته به تعداد دفعات جا به جایی) از سمت راست به چپ جا به جا کرد .با انتقال یک bit
از چپ به راست ،موقعیت تنها یک bitتغییر می کند .برای مثال bit ،ای در موقعیت xقرار می گیرد و bitدیگری سمت چپ آن در موقعیت .y
مقدار bit xرا جایگزین مقدار bit yمی کنیم .در صورتی که bit xدر راست ترین موقعیت قرار داشت ،مقدار 2دریافت می کند.
Original 1 0 1 1 1 0 0 1 0 1
<< by 1 1 0 1 1 1 0 0 1 0 1 0
نتیجه ی 10111001010را به دست می دهد .نتیجه ی دهدهی ( )decimalآن به این صورت محاسبه شده.
Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1024 512 256 128 64 32 16 8 4 2 1
741 << 1 1 0 1 1 1 0 0 1 0 1 0
1024 0 256 128 64 0 0 8 0 2 0
172
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
741 << 1 = 1024 + 256 + 128 + 64 + 8 + 2 = 1482
همان طور که از مثال باال پیدا است ،باید برای پیاده سازی این عملیات از عملگر << استفاده کرد.
مثال
class Exercise
{
)(static void Main
{
;)System.Console.WriteLine(741 << 1
}
}
محصول فرایند
1482
Press any key to continue...
به همین ترتیب ،می توان bitها را بیش از یک واحد به سمت چپ انتقال داد.
class Exercise
{
)(static void Main
{
;var number = 248 << 5
;)System.Console.WriteLine(number
}
}
نتیجه
7936
…Press any key to continue
بنابراین ،می توان چند bitرا به سمت چپ (یک متغیر) جا به جا کرد ،سپس نتیجه ی حاصله را برای خود متغیر اعمال کرد.
class Exercise
{
)(static void Main
{
;var number = 248
;)System.Console.WriteLine(number
173
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;number = number << 5
;)System.Console.WriteLine(number
}
}
248
7936
Press any key to continue...
C#عملیات فوق را با به کاربردن عملگر =<< برای کاربر بسیار آسان می کند.
class Exercise
{
)(static void Main
{
;var number = 248
;)System.Console.WriteLine(number
;number <<= 5
;)System.Console.WriteLine(number
}
}
می توان bitها را در سمت راست قرار داد .برای این منظور تمام مراحلی که برای انتقال bitها به چپ انجام می دادید را به صورت معکوس برای
این فرایند پیاده کنید .زبان C#با عملگر >> ،این پروسه را امکان پذیر می کند.
کالس ها
برای تعریف متغیر ،می توان از کلیدواژه ی varیا نوع داده ی ساده و شناخته شده بهره گرفت .برای مثال ،می توان برای تعریف متغیری که
نشانگر تعداد اتاق خواب های یک خانه است ،از integerاستفاده کرد.
class Program
{
)(static void Main
{
;int bedrooms = 3
}
}
174
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
در C#می توان با به کاربردن چند متغیر ،شی ای کامل پیچیده ساخت .در زبان های برنامه نویسی کالس (که خود متشکل از یک گروه متغیر
است) ،در واقع پایه ای برای ایجاد متغیری پیچیده تر می باشد .حال برای به وجود آوردن یک کالس ،ابتدا کلیدواژه ی classرا تایپ
به main menuمراجعه کرده و برای ایجاد appجدید گزینه های File -> New Projectرا انتخاب کنید. .2
درست مثل متغیر ،یک کالس باید دارای اسم باشد .اسم گذاری برای کالس بسیار شبیه به فرایند اسم گذاری برای متغیر است (از همان
قوانین پیروی می کند) .البته ،شما می توانید قوانین خو را به کار ببرید .در دروس ما
چنانچه اسم کالس از تنها یک کلمه تشکیل شده ،فقط حرف اول با حروف بزرگ نوشته می شود .نمونه های آن :
اگر اسم کالس موردنظر از چند کلمه ساخته شده باشد ،تمام حروف اول کلمات با حرف بزرگ نوشته می شوند ،DrivingRecord :
SocialSecurityInformation ،GeometricShape
Microsoft Visual Studioابزار و امکان های بصری زیادی برای مدیریت کالس در اختیار برنامه نویس می گذارد .همچنین فرایند نام گذاری
یا تغییر اسم کالس ها را با امکاناتی که دارد برای کاربر آسان ساخته است.
بهترین روش برای مدیریت کالس ،استفاده از پنجره ی Class Viewاست .برای دسترسی به این پنجره
175
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
چنانچه پنجره از قبل باز نیست ،ابتدا main menuرا باز کرده ،سپس View -> Class Viewرا کلیک کنید.
اگر پنجره ی مذکور از قبل باز بود ،تنها کافی است روی tabآن کلیک کنید.
پنجره ی Class Viewاز شش بخش مجزا تشکیل شده .همانطور که در تصویر زیر مشاهده می کنید کاربرد و نوار عنوان آن مشابه solution
explorerمی باشد.
. دومین بخش تشکیل دهنده ی نوار عنوان ،نوار ابزار ( )toolbarآن می باشد
همان طور که از اسم آن پیدا است گزینه ی New Folderبه شما اجازه می دهد فولدری جدید ایجاد کرده و به پروژه اضافه کنید .دکمه های
در زیر ،toolbarنوار دیگری وجود دارد که از یک combo boxو دکمه تشکیل شده که به کمک آن ها می توانید جستجو کنید.
بدنه ی اصلی پنجره ی Class Viewنیز از دو بخش اصلی تشکیل شده .اولین گره ی قسمت باالیی پنجره ،اسم پروژه را نشان می دهد .حال
زیر گره ی پروژه ،اسم کالس ها نمایش داده شده است .قسمت پایینی پنجره نیز به اعضای کالس ها اختصاص داده شده است.
176
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
ایجاد کالس
راه های مختلفی برای ساختن کالس وجود دارد .در صورت کار با برنامه های ویرایش متن مثل ،Notepadفایل را ایجاد کرده ،کلیدواژه ی
classرا تایپ کنید ،به دنبال آن اسم کالس مورد نظر و عالمت } را درج کنید.
نمونه
class House
{
}
حال ،فایل خود را با پسوند cs.ذخیره کنید .البته ،نیازی نیست که اسم فایل با اسم کالس یکی باشد .به خاطر داشته باشید که باید فایل
مزبور را در همان فولدری که فایل های دیگر پروژه در آن نگه داری می شوند ،ذخیره کنید.
کالس در یک code fileایجاد می شود .به همین خاطر هم می توانید آن را در اولین فایل پروژه ی خود ذخیره کنید.
class House
{
}
class Exercise
{
)(static void Main
{
;int bedrooms = 3
177
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
}
}
Microsoft Visual C# 2010 Expressیا Microsoft Visual Studioفرایند ایجاد کالس را برای شما بسیار آسان می سازد .در درس ،8
دیدیم که چگونه می توان code fileایجاد کرد .پس از ساختن code fileنام برده ،کافی است کد مورد نیاز را برای کالس وارد کنید .پس از
انتخاب گزینه ی ( Add New Itemدر solution explorerیا ،)main menuمی توان نوع فایل دلخواه را انتخاب کرد از جمله فایل کالس.
در main menuروی گزینه ی Project -> Add Class...کلیک کنید ( ،یا در لیست میانی پنجره ی محاوره Project ،Add New Item
در ،Solution Explorerروی اسم پروژه راست کلیک کرده ،نشان گر موس را روی Addقرار دهید ،سپس classرا انتخاب کنید.
در پنجره ی ،Class Viewروی اسم پروژه راست کلیک کنید ،نشان گر موس را روی Addقرار داده ،و classرا انتخاب کنید.
در نتیجه ی تمام عملیات باال ،پنجره ی محاوره ی Add New Itemنمایش داده می شود (که در آن گزینه ی classاتنخاب شده) .در صورتی
که Add New Itemرا از main menuیا Solution Explorerانتخاب کرده اید ،کافی است روی خود classکلیک کنید .می توانید اسم
پیش فرض را در کادر متن Nameعوض کنید ( یا در صورت تمایل همان اسم را بپذیرید) .اکنون ،فایل جدیدی با اسم انتخابی شما و
در آن قسمت Code Editorکه باید کالس جدید را اضافه کنید ،راست کلیک کرده ،سپس روی Insert Snippetکلیک کنید .حال،
Visual C#را دو بار کلیک کنید .در لیستی که ظاهر می شود ،روی classدو بار کلیک کنید.
178
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
چنانچه کد را از قبل نوشته اید ،و اکنون می خواهید آن کد را در کالس خود جای دهید ،کافی است آن کد را انتخاب کنید .ابتدا روی آن راست
179
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
180
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
کالسی با اسم پیش فرض MyClassبه وجود می آید.
به main menuمراجعه کرده ،روی Project -> Add New Item...کلیک کنید. .8
در لیست میانی ،Add New Itemروی Code Fileکلیک کنید. .2
class StoreItem
{
}
181
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
.2در ،main menuگزینه های .View -> Solution Explorer
.4حال ،برای به وجود آوردن code fileای دیگر( ،در (Solution Explorerروی DepartmentStore1راست کلیک کرده ،سپس نشانگر
موس را روی Addقرار داده و گزینه ی click New Item...را انتخاب کنید.
.1در لیست میانی پنجره ی محاوره ،Add New Itemروی Code Fileکلیک کنید.
class DepartmentStore
{
)(static void Main
{
}
}
همان طور که پیشتر ذکر شد ،شما می توانید هر تعداد کالس که مایلید برای پروژه ی خود ایجاد کنید .مطابق میل می توانید هر کالس را در
فایل مختص به خود آن کالس نگه دارید یا می توانید تمام کالس ها را در یک فایل واحد ذخیره کنید .اکنون ،برای دسترسی به کالس ها
در قسمتی که به تب های Code Editorاختصاص دارد ،روی تَبی که میزبان فایل کالس دلخواه است کلیک کنید .سپس ،به combo box
در ،Solution Explorerزیر اسم پروژه ،روی اسم فایلی که دربردارنده ی کالس است دوبار کلیک کنید .چنانچه فایل حاوی چند کالس
در پنجره ی ،Class Viewزیر اسم پروژه ،اسم کالس را دوبار کلیک کنید.
در combo boxپنجره ی ،Class Viewروی کالس مورد نظر راست کلیک کرده ،سپس گزینه ی Go To Definitionرا انتخاب کنید.
182
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
تغییر اسم کالس
اگر اسم کالسی باب میلتان نیست ،می توانید آن را عوض کنید .راه اولیه ی آن پیدا کردن اسم کالس در ( Code Editorیا در برنامه ی
ویرایش متن مثل )Notepadو ویرایش آن است .در صورت استفاده از این روش ،باید تمامی قسمت هایی که اسم در آن به کار رفته نیز
پیدا شود .همان طور که انتظار می رود این کار بسیار دشوار بوده و احتمال خطا نیز در آن باال است .اما برنامه های Microsoft Visual C#
2010 Expressو یا Microsoft Visual Studioراه حل بهتری برای انجام این فرایند در اختیار شما قرار می دهند.
برای تغییر دادن اسم در Microsoft Visual Studioیا Microsoft Visual C#دستورات زیر را انجام دهید.
در ،Code Editorروی اسم کالس راست کلیک کرده ،حال نشانگر موس را روی Refactorقرار دهید ،سپس گزینه ی Rename...را
انتخاب کنید.
در پنجره ی ،Class Viewروی اسم کالس راست کلیک کرده و Rename...را انتخاب کنید.
در ،Class Viewبه منظور انتخاب کالس موردنظر باید روی اسم آن کلیک کنید .اکنون ،به main menuمراجعه کرده و گزینه های
کلیه ی اقدامات باال پنجره ی محاوره ی Renameرا نمایش می دهند .حال ،می توانید اسم کالس را در کادر متن New Nameویرایش
کنید .برای تنظیم اینکه آیا مایلید ،Code Editorاسم به کار رفته در commentیا stringرا تغییر دهد یا نه ،مجبورید از checkboxها
استفاده کنید .پس از کلیک روی دکمه ی ،okپنجره ی Preview Changes – Renameبه نمایش گذاشته می شود .پنجره ی باال بخش
های مختلفی که اسم مورد نظر در آن به کار رفته را برای شما فهرست می کند .اکنون می توانید به منظور اعمال تغییرات به وجود آمده روی
Applyکلیک کنید.
کد نا امن
یکی از دالیلی که زبان C#طراحی شد ،اجتناب از کاستی ها و مشکالت زبان های C/C++بود .کاربرد اشاره گر ( )pointerاز جمله ی این
کاستی ها بود C/C++ .از اشاره گر برای ارجاع دادن به محل نگه داری مقداری در حافظه استفاده می کنند .بر خالف این دو زبان C# ،تا حد
ممکن از به کاربردن اشاره گ ر اجتناب می کند و مدیریت حافظه را خود به دست می گیرد ( به جای سپردن این وظیفه به برنامه نویس) .البته
در صورت لزوم ،برنامه نویس می تواند از اشاره گر (در )C#استفاده کند.
183
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
به این خاطر که compilerزبان C#عهده دار مدیریت حافظه و مقدارهای ذخیره شده در آن است (منظور مقدارهای برنامه ای است که از
حافظه استفاده می کنند) ،استفاده از اشاره گر توصیه نمی شود .با این وجود ،چنانچه مایل هستید از اشاره گر در برنامه ی کاربردی خود
استفاده کنید ،باید پیش از اسم تمامی متدهایی که از کدناامن استفاده می کنند کلیدواژه ی unsafeرا تایپ کنید .به مثال زیر توجه کنید.
class Exercise
{
)(unsafe static void Main
{
;int Length = 224
;int *Len = &Length
;)" System.Console.Write("Length
;)System.Console.WriteLine(Length
;)" System.Console.Write("Length
;)System.Console.WriteLine(*Len
;)(System.Console.WriteLine
;Length = 804
;)" System.Console.Write("Length
;)System.Console.WriteLine(Length
;)" System.Console.Write("Length
;)System.Console.WriteLine(*Len
}
}
پیش از ترجمه ( )compileبرنامه ی کاربردی مورد نظر ،باید حتماً اشاره شود که ( unsafe codeکد ناامن) در این برنامه به کاربرده شده.
نمونه
برای استفاده از این امکان در main menu ،Microsoft Visual Studioرا باز کرده ،روی Project -> [Project ] Properties...کلیک
کنید .حال ،در قسمت ،Buildکادر تیک Allow Unsafe Codeرا فعال کنید.
184
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Region Delimiters
Microsoft Visual Studioامکانات مختلفی برای نوشتن و مدیریت بهتر کد فراهم می کند .این ویژگی ها و امکانات عبارت اند از :کلمات
185
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
همان طور که در تصویر مشاهده می کنید ،دکمه هایی در سمت چپ برخی از خط های برنامه قرار دارند .دکمه های نام برده به شما اجازه می
دهند آن بخشی از کد را که مورد نیاز نیست جمع کنید (ببندید) .برای این منظور ،باید روی دکمه ی ( )-کلیک کنید .عالمت دکمه ی مذکور
186
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
دکمه ی +به شما اجازه می دهد بخش پنهان کد را باز کنید .این ویژگی یکی از امکانات Code Editorبرنامه ی Microsoft Visual Studio
است (که البته در خیلی از محیط های برنامه نویسی دیگر نیز کاربرد دارد) .برای به وجود آوردن این بخش ها Code Editor ،از قوانین خاصی
پیروی می کند.
الزم به ذکر است که شما می توانید در صورت تمایل ،به جای استفاده از بخش های کد باال ،بخش های کد ( )code sectionدلخواه خود را
در صورت کار با برنامه های ویرایش متن (مثل )wordpadیا Code Editorبرنامه ی ،Microsoft Visual C# 2010 Expressفایل
#region Whatever
و با این عبارت به پایان برسانید.
#endregion Whatever
اگر با برنامه های Microsoft Visual C# 2010 Expressیا Microsoft Visual Studioکار می کنید.
چنانچه مایلید sectionای ایجاد کنید که حاوی بخشی تهی باشد ،روی آن خطی که می خواهید sectionاز آن جا شروع شود راست
چنانچه مایلید بخشی ایجاد کنید که حاوی کد است ،کافی است کد موردنظر را در Code Editorانتخاب کنید .حال ،باید روی بخش
187
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
روی صفحه ی Visual C#دوبار کلیک کنید .در لیستی که ظاهر می شود ،روی گزینه ی #regionکلیک کنید .ناحیه ای با اسم پیش فرض به
188
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
هر زمان و جایی که می خواهید ناحیه ی جدیدی ایجاد کنید ،به عبارت #regionنیاز دارید .می توانید در سمت راست عبارت باال هر چه مایل
هستید تایپ کنید .بخش به وجود آورده را با عبارت ( #endregionو هرچیز دیگری که دوست دارید به دنبال آن تایپ کنید) به پایان
class Circle
{
}
#region This section is reserved for quadrilateral shapes
class Rectangle
{
}
class Square
{
}
#endregion This is the end of the quadrilateral section
class Line
{
}
نیاز به تایپ کردن هیچ چیز در سمت راست #endregionنیست .پس از ایجاد ناحیه ی مورد نظر Code Editor ،دکمه ی -را در سمت چپ
#regionنمایش می دهد و به دنبال آن خطی ظاهر می شود که به سمت چپ عبارت #endregionختم می شود.
189
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
حال ،این دکمه به شما اجازه می دهد بخش مورد نظر را به دلخواه بازکرده یا ببندید.
همان طور که باال ذکر شد ،نیازی نیست در سمت راست #endregionچیزی بنویسید و می توانید آن را خالی بگذارید .در مثال باال،
مستطیلی مشاهده می کنید که با خط های خاکستری رشته را احاطه کرده و به دنبال #regionمی آید .این مستطیل رشته ای که پس از
#endregionمی آید را تحت پوشش قرار نمی دهد .به عبارت دیگر ،چنانچه هیچ چیز در سمت راست #endregionتایپ نشود ،بخش
190
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
مبانی نحوه ی استفاده از کالس
برای به کاربردن کالس در برنامه ،ابتدا الزم است برای آن یک متغیر تعریف کنید .از فرایند تعریف متغیر برای کالس ،به عنوان ایجاد شی
به منظور تعریف متغیر (یک) کالس ،می توان از کلید واژه ی varاستفاده کرد .سرانجام ،می توان اسم متغیر را به دنبال اسم کالس مورد نظر
تای پ کرد .برای مثال ،اگر بخواهیم متغیری برای کالس خانه ی اول درس معرفی کنیم ،به صورت زیر عمل می کنیم :
class House
{
}
class Program
{
)(static void Main
{
var property . . .
}
}
یا
class House
{
}
class Program
{
)(static void Main
{
;House property
}
}
در درس های 1و 4با نحوه ی تعریف متغیر های نوع عادی آشنا شدیم .همچنین گفتیم که پس از مقداردهی اولیه ی این متغیرهاcompiler ،
مقدارهای آن ها را در قسمت هایی از حافظه که از قبل به آن ها اختصاص داده ذخیره می کند .نوع داده ( )data typeهایی که برای چنین
191
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
متغیرهایی به کار می روند ،نوع مقدار ( )value typeخوانده می شوند .برای ذخیره سازی مقادیر این متغیرها compiler ،بخشی در حافظه
به وجود می آورد به نام پشته ( .)stackبخش باقی مانده ی حافظه heapنام دارد که به ذخیره سازی متغیر کالس ها اختصاص می یابد :
پس از این که متغیری را با استفاده از کالس تعریف کردید ،باید از compilerدرخواست کنید بخشی از حافظه ی heapرا به آن تخصیص
مثال
class House
{
}
class Program
{
)(static void Main
{
;)(var property = new House
}
}
می توان به جای استفاده از کلید واژه ی ،varمتغیر را با اسم کالس معرفی کرد .همان طور که برای نوع مقدار ( )value typeذکر شد ،در
صورت استفاده از کلیدواژه ی ،varملزم هستید بالفاصله حافظه به آن اختصاص دهید .اما ،در صورت استفاده از اسم کالس (برای تعریف
متغیر) ،می توان متغیر مزبور را در یک خط تعریف کرد ،سپس عملگر Newرا در خط دیگری برای تخصیص حافظه به کاربرد.
مثال
class House
{
}
class Program
192
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
{
)(static void Main
{
;House property
// You can do something here
;)(property = new House
}
}
در برنامه های Visual Basicو C#چنانچه کالسی را در هریک از فایل های متعلق به یک پروژه واحد ایجاد کنید ،کالس نام برده در دسترس
برای استفاده از امکانات ( )behaviorو مقدارهایی که کالس فراهم می کند ،ملزم به تعریف متغیر هستیم .همچنین دیدیم که پیش از به
کاربری کالس ،باید مقدارهای الزم برای فیلد های کالس را فراهم کنید .این کار به compilerاجازه می دهد تا حافظه ی تخصیص یافته به
متغیر را با مقادیر دلخواه پر کند .ممکن است شما کامالً آماده نباشید مقادیر الزم را هنگام تعریف متغیر فراهم کنید.
متغیری که برای کالسی تعریف شده ولی هنوز مقدار الزم برای فیلد را دریافت نکرده را ،شی تهی ) )null objectمی خوانند .برای این منظور
(ایجاد شی تهی) ،ابتدا اسم کالس و به دنبال آن اسم متغیر را تایپ کرده ،سپس کلید واژه ی nullرا به آن اختصاص دهید.
پیش تر بحث شد که می توان برای تعریف متغیری با مقدار تهی ( )nullعالمت سوال (؟) به آن اضافه کرد .در صورت استفاده از کالس ،از
مثال
class House
{
193
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
}
class Program
{
)(static void Main
{
;House property = null
}
}
چنانچه متغیر کالسی از پیش تعریف و مقدار دهی اولیه شده بود ،ولی بنا به هر دلیلی مقدارهای آن پاک شد ،چنین متغیری نیز شی تهی
برخالف زبان های Cو C++که پیشرو و والدین برنامه ی C#حساب می شود ،زبان C#طوری تعبیه شده که با دیگر زبان های برنامه نویسی
از جمله Visual Basic ،C++/CLIو F#به صورت مکمل کار کند .به عبارت دیگر ،می توان با کد هریک از زبان های باال ،کدهای یک برنامه
کاربردی که توسط C#نوشته شده باشد را خواند .برای تحقق بخشیدن به این امر ،کالس C#باید به عنوان شی عمومی ()public object
تعریف شود.
اگر می خواهید کدهای نوشته شده توسط زبان های باال به کالس شما دسترسی پیدا کنند ،باید هنگام ایجاد کالس ،پیش از کلید واژه ی
مثال
194
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
کاربرد :به اشتراک گذاری کالس
main menu .8را باز کرده ،روی گزینه های View -> Class Viewکلیک کنید.
.1در قسمت باالیی بدنه ی اصلی پنجره ی ،Class Viewروی StoreItemراست کلیک کرده ،سپس گزینه ی Go To Definitionرا انتخاب
کنید.
.4کلید Homeرا زده public ،را تایپ کنید و پس از آن دکمه ی spaceرا فشار دهید .فایل پیش رو به صورت زیر تغییر داده می شود.
زمانی که متغیری را به کمک کلیدواژه ی newتعریف می کنید ،در واقع دارید بخشی از حافظه ی heapرا به آن اختصاص می دهید (برای آن
رزرو می کنید) .زمانی که به آن متغیر دیگر نیازی نیست ،مثل زمانی که برنامه بسته می شود ،متغیر گفته شده پاک شده و حافظه ی
اختصاص یافته به آن باید در اختیار متغیرها یا برنامه های دیگر قرار گیرد .به این فرایند زباله روبی یا garbage collectionمی گویند .در
زبان های برنامه نویسی ،C/C++این مسئله برای برنامه نویس یک معضل بزرگ محسوب می شد ،زیرا که برنامه نویس باید خود به صورت
دستی چنین متغیرهایی (اشاره گر )pointer/را پاک می کرد و حافظه را آزاد می ساخت.
چهارچوب کاری NET Framework.مسئله ی زوباله روبی را حل کرده و حافظه را خودکار از متغیرهای بالاستفاده رها می سازد.
فیلدهای کالس
این اجزا در واقع تحت عنوان متغیرهای عضو یا member variableهای یک کالس تعریف می شوند .در زبان C#متغیری که در بدنه ی
کالس ایجاد می شود ،فیلد اطالق می گردد .هر فیلد مثل متغیرهای معمول دیگر ،با یک اسم و نوع داده تعریف می شود.
195
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
برای مثال ،زیر اجزای تشکیل دهنده ی یک خانه به عنوان اعضای تشکیل دهنده یک کالس (که هریک خود به مثابه ی یک متغیر تعریف
برای این که نشان دهید متغیری (فیلدی از نوع اولیه) قادر است مقداری تهی ( )null valueداشته باشد ،کافی است عالمت سوال به آن
اضافه کنید.
متغیرهای تعریف شده در بدنه ی یک کالس متغیرهای عضو ( )member variableخوانده می شوند و هر متغیر عضو سرانجام یک فلید تلقی
می گردد .فیلدها ی یک کالس ممکن از هر نوع داده که تا کنون معرفی شده تشکیل شده باشد.
توجه
از این بخش به بعد ،برای اشاره به فیلد متعلق به یک کالس می نویسیم.
ClassName.FieldName
به عبارتی ساده تر FieldName ،فیلدی است که عضو کالس ClassNameمی باشد.
بخش های یک شئ به دو دسته ی اصلی تقسیم می شوند :آن دسته ای که به آن دسترسی دارید و آن دسته ای که دسترسی به آن ها برای
شما مقدورنمی باشد .برای مثال ،ماشینی که در خیابان پارک شده را می توان دید ،آن را لمس کرد ولی موتور آن برای شما قابل رویت و
دسترسی نیست .به اجزایی از کالس که در دسترس عموم قرار دارند publicگفته می شود.
بخش هایی از کالس که از دید و دسترسی عموم پنهان است privateتلقی می گردد .در زبان C#برخی اعضای کالس در اختیار دیگر کالس
ها قرار می گیرند و در عین حال برخی دیگر اعضای کالس از دید و دسترس کالس های دیگر پنهان می شوند .برای محدود کردن سطح
دسترسی به بخش یا عضوی از کالس که باید مخفی یا خصوصی باقی بماند از کلید واژه ی privateاستفاده می شود .حال ،برای در دسترس
قرار دادن آن بخش از کالس که خصوصی محسوب نمی شود ،باید متغیر را با کلید واژه ی publicتعریف کرد .به کلید واژه های publicو
به صورت پیش فرض ،تمامی متغیر های عضوی که تعریف می کنید ولی سطح دسترسی آن را مشخص نمی کنید private ،محسوب می شوند و
بدین ترتیب برای غیراعضای یک کالس قابل دسترسی نمی باشد .به این خاطر چنانچه می خواهید عضوی را برای غیراعضای یک کالس قابل
دسترس کنید ،باید آن را با کلید واژه ی puplicتعریف کنید .می توان ترکیبی از اعضای خصوصی و عمومی در کالس خود ایجاد کرد و هیچ
قانون خاصی مبنی بر این که کدام اول باید فهرست شود و کدام آخر وجود ندارد.
مثال
197
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;byte stories
;public uint bedrooms
;private decimal value
}
فقط به خاطر داشته باشید که در صورت تعیین نکردن سطح دسترسی ،عضو کالس تعریف شده خودکار خصوصی یا privateمی شود .برای
جلوگیری از بروز هر نوع خطا ،حتماً توصیه می شود سطح دسترسی عضو کالس را مشخص کنید.
دیدیم که کلیدواژه ی publicبه اشیإی خود برنامه و برنامه های دیگر اجازه می دهد که به عضو عمومی یک کالس دسترسی پیدا کنند .در
حالی که با استفاده از کلید واژه privateتنها به اعضای خود آن کالس اجازه ی دسترسی به اعضای خصوصی را فراهم می کردیم .چنانچه مایل
هستید عضوی ایجاد کنید که تنها برای اعضا و اشیإ خود آن کالس قابل دسترسی باشد ،الزم است آن را با کلید واژه ی internalعالمت
گذاری کنید .تفاوت بین این کلید واژه ها در زیر شرح داده شده.
198
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
public internal private
فقط دیگر اعضای همین کالس می توانند به این عضو بله بله بله
تمام اعضای این برنامه ،حتی اعضای خارج از این کالس، بله بله خیر
اشیا خارج از این برنامه می توانند به این عضو بله خیر خیر
به منظور دستیابی به عضوی از کالس از طریق کالسی دیگر ،ابتدا باید متغیری از آن کالس را تعریف کنید .اکنون ،برای دسترسی به عضو
پس از تعریف نمونه ای از کالس ،می توان به اعضای کالس نام برده دسترسی داشت و به آن ها مقادیر دلخواه را تخصیص داد .به مثال زیر
توجه کنید.
199
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
property.propertyType = "Single Family";
property.bedrooms = 4;
property.value = 652880;
}
}
.) می توانند عالمت سوال داشته باشندprimitive types( به خاطر دارید که داده های نوع اولیه
. سپس مقدار آن را بازیابی کرد،" به آن دسترسی پیدا کرده." می توان با به کار بردن عملگر،پس از مقدار دهی اولیه ی فیلد یک کالس
. کلیک کرده تا به فایل دسترسی پیدا کنیدDepartmentStore.cs روی،Code Editor در باالترین قسمت.8
class DepartmentStore
{
static void Main()
{
StoreItem si = new StoreItem();
si.itemNumber = 720823;
si.itemName = "Cotton Seam Sheath Dress";
si.size = "6";
si.unitPrice = 158M;
System.Console.WriteLine("Department Store");
System.Console.Write("Item #: ");
System.Console.WriteLine(si.itemNumber);
System.Console.Write("Item Name: ");
System.Console.WriteLine(si.itemName);
System.Console.Write("Item Size: ");
System.Console.WriteLine(si.size);
201
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;)" System.Console.Write("Unit Price:
;)System.Console.WriteLine(si.unitPrice
;)(System.Console.ReadKey
}
}
.1برنامه را اجرا کنید .نتیجه ی زیر حاصل می گردد.
Department Store
Item #: 720823
Item Name: Cotton Seam Sheath Dress
Item Size: 6
Unit Price: 158
همان طور که پیش تر ذکر شد ،برای به کاربردن کالس ابتدا باید متغیری برای آن تعریف کرده ،سپس آن را مقدار دهی اولیه کنید.
خوشبختانه به منظور مقدار دهی اولیه یک شی ،نیازی به استفاده از کالس نیست .می توان متغیری مشابه نمونه ی کالس تعریف کرده ،بعد
آن را به صورت دلخواه مقدار دهی اولیه کرد .از این نوع با نام ( anonymous typeیا نوع ناشناس) یاد می شود .به منظور استفاده از آن
کافی است متغیر مورد نظر را با کلید واژه ی varتعریف کرده و به منظور تخصیص حافظه به آن از عملگر newاستفاده کنید .به جای استفاده
از اسم کالس ،ابتدا عالمت {} را درج کرده ،سپس عملگر newرا تایپ کنید .حال در {} اسمی برای تک تک اعضا انتخاب کرده ،گویی دارید
اسم عضو های کالس را تعریف می کنید ،سپس هر متغیر عضو را با valueهای دلخواه مقدار دهی اولیه کنید .پس از عالمت {} ،تعریف را با
مثال
202
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
}
به تک تک اعضای آن، متغیر عضو، عملگر نقطه، می توان با تایپ کردن به ترتیب اسم متغیر،پس از مقدار دهی اولیه ی نوع ناشناس
مثال
می توان تمامی جزئیات را در خطی یکسان قرار.به خاطر داشته باشید که قرار دادن تعریف در خط های متعدد فقط خواندن آن را سهل می کند
.داد
203
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
System.Console.Write("Title: ;)"
;)System.Console.WriteLine(book.Title
;)" System.Console.Write("Nbr of Pages:
;)System.Console.WriteLine(book.Pages
;)(System.Console.ReadKey
}
}
برای سهولت و مدیریت بهتر فیلدهای یک کالس Code Editor ،از دو combo boxبهره می گیرد.
Combo boxسمت چپ ،کالس های موجود در فایل جاری را نمایش می دهند Combo box .سمت راست ،اعضای انتخابی کالس از
204
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
نحوه ی دسترسی به فیلد
از راه های مختلفی می توان به فیلد دسترسی پیدا کرد از جمله
فایل دربردارنده ی کالس را باز کنید .همان طور که مشاهده می کنید ،فیلد در فایل بیان شده قابل رویت می باشد
فایل حاوی کالس را باز کنید .به main menuمراجعه کرده ،گزینه های Edit -> Quick Findرا انتخاب کنید .اسم فیلد مورد نظر را
تایپ کرده ،روی Find Nextکلیک کنید .الزم به ذکر است که در این روش ،باید اسم دقیق فیلد مورد نظر را از قبل داشته باشید.
در قسمت باالیی بدنه ی پنجره ی ،Class Viewروی اسم کالس حاوی فیلد کلیک کنید .لیست اعضای آن در قسمت پایینی بدنه ی
در بخش فوقانی بدنه ی ،Class Viewروی اسم کالس حامل فیلد کلیک کنید .در قسمت پایینی ،Class Viewروی اسم فیلد راست
می توان اسم فیلد را باب میل تغییر داد .کافی است فیلد را در فایل مورد نظر پیدا کرده و با دانش خود از ویرایش متن ()text editing
نام فیلد را اصالح کرد .سرانجام ،می توانید پس از باز کردن فایل حاوی کالس ،در main menuروی Edit -> Quick Replaceکلیک
کنید ،اسم فیلد را تایپ کرده ،سپس Find Nextیا Replaceرا انتخاب کنید .این روش برای بازدید کردن از تمام بخش هایی که فیلد
205
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
محیط برنامه نویسی visual studioبرای این امر بسیار مناسب است.
فایل حاوی کالس را باز کنید .یا کلیدهای Ctrl + Hرا با هم بزنید ،و یا در main menuروی گزینه ی Quick Replaceکلیک کنید .حال،
در قسمت ،Find Whatاسم فیلد را وارد کرده و Replace Allرا انتخاب کنید.
فایل حامل کالس را باز کنید .روی فیلد مورد نظر کلیک کنید تا عالمت ^ ( )caretدر آن قرار داده شود .کلیدهای Ctrl + Hرا بزنید و یا
در Quick Replace ،main menuرا کلیک کنید combo box .ای به نام Find Whatظاهر می شود که در آن فیلد انتخابی را وارد
در سمت باالیی پنجره ی ،Class Viewباید روی اسم کالس کلیک کنید .در قسمت پایینی پنجره ،روی فیلد راست کلیک کرده سپس
Renameرا انتخاب کنید ...حال ،در کادر متن New Nameاسم دلخواه فیلد را درج کنید .برای تنظیم و تغییر اسم در بخش
commentها و stringها ،باید به checkboxها مراجعه کرد .پس از انجام دستورات باال ،روی okکلیک کنید .در پنجره ی محاوره
،Preview Changes – Renameفهرستی از تمامی بخش هایی که فیلد در آن به کار رفته نمایان می باشد .اکنون گزینه Applyرا
انتخاب کنید.
مبانی متدها
فیلدها در واقع وظیفه ی توصیف کالس را بر عهده دارند .برای مثال ،کالسی به نام Houseتوسط جنبه هایی همچون تعداد اتاق های
خوانده می شود .متد اساساً بخشی از کد است ،که در راستای قابلیت ها و کاربرد کالس ،یکی از جزئیات عملیات را ایفا می کند.
معرفی متدها
206
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
. انتخاب کنیدProject File -> New مراجعه کرده و گزینه هایmain menu به، برای ایجاد برنامه ی کاربردی جدید.2
. را انتخاب کنیدProject -> Add New Item... گزینه هایmain menu در.5
. را انتخاب کنیدCode File گزینه ی،Add New Item در فهرست میانی پنجره ی محاوره ی.2
. را کلیک کنیدCode File ،Add New Item در لیست میانی پنجره ی محاوره.82
207
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;)" System.Console.Write("Item Name:
;)System.Console.WriteLine(si.itemName
;)" System.Console.Write("Item Size:
;)System.Console.WriteLine(si.size
;)" System.Console.Write("Unit Price:
;)System.Console.WriteLine(si.unitPrice
;)(System.Console.ReadKey
;)(System.Console.ReadKey
}
}
.81برای مشاهده ی نتیجه برنامه را اجرا کنید.
ساختن متد
برای ایجاد یک متد باید ابتدا اسم آن را مشخص کنید .فرایند تعریف اسم متد نیز از همان قوانینی که برای انتخاب اسم متغیرها تشریح
کردیم پیروی می کند .در این مبحث ،همان پیشنهاداتی را که برای گزینش اسم کالس ارائه کردیم ،برای انتخاب اسم متد نیز به کار می بریم.
چنانچه اسم متد در یک کلمه خالصه شده باشد ،فقط حرف اول را با حروف بزرگ می نویسیم.
در صورتی که اسم متد متشکل از چند کلمه باشد ،حروف اول تمام کلمات با حرف بزرگ نمایش داده می شود.
به این خاطر که متد یک عملیات محسوب می شود ،سرانجام باید آن را یک فعل نام گذاشت به دنبال اسم متد پرانتز می آید.
یکی از کارهای متد تخصیص دادن یک مقدار معین در برنامه است .بدین ترتیب پس از این کار ،متد می تواند مقداری را فراهم کند .در
نتیجه ،متد نتیجه را بر می گرداند .چنانچه نتیجه ای از متد نام برده حاصل نشد ،به آن voidمی گویند .نوعی ( )typeکه متد ارائه می دهد
(یا باز می گرداند) ،در سمت چپ اسم متد درج می شود .چنانچه متد نتیجه ای دربر نداشت ،در سمت چپ آن voidتایپ کنید .عملیات
نمونه
درست مانند متغیر عضو اگر قرار است متد تنها برای اعضای خود آن کالس قابل دسترسی باشد ،متد گفته شده را با کلید واژه ی private
عالمت گذاری کنید (یا می توان هیچ گونه تنظیم کننده ی دسترسی acces modifier /خاصی لحاظ نکرد).
به منظور این که متد برای تمامی اعضای کالس و دیگر بخش های همین برنامه (نه خارج از این برنامه) قابل دسترسی باشد ،آن را با کلید واژه
ی internalتعریف کنید.
چنانچه مایل ه ستید متدی برای تمامی اعضای این کالس ،دیگر بخش های همین برنامه و اجزای برنامه های دیگر قابل دستیابی باشد ،کافی
پس از ایجاد متد ،می توان به تعریف کارکرد آن (در بدنه ی متد ،داخل عالمت {}) پرداخت .برای مثال ،می توان متغیر های عضو را داخل
پرانتزهای )( System.Console.Writeیا )( System.Console.WriteLineنوشت .به مثال های زیر توجه کنید.
فراخوانی متد
پس از ساختن متد ،می توان از داخل یا خارج کالس به آن دسترسی پیدا کرد .فراخوانی یک متد ،در واقع همان دسترسی پیدا کردن به متد
است .برای این منظور ،از عملگر نقطه کمک گرفته می شود .بر خالف فیلد ،الزم است به دنبال اسم کالس پرانتز گذاشته شود .نمونه ی آن را
209
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
public class House
{
public char propertyType;
public uint bedrooms;
internal void Display()
{
System.Console.WriteLine("=//= Altair Realtors =//=");
System.Console.WriteLine("Properties Inventory"); ;
System.Console.Write("Property Type: ");
System.Console.WriteLine(propertyType);
System.Console.Write("Bedrooms: ");
System.Console.WriteLine(bedrooms);
}
}
public class Program
{
static void Main()
{
var property = new House();
property.propertyType = 'S';
property.bedrooms = 4;
property.Display();
}
}
. فایل مورد نظر باز می شود. را انتخاب کنیدWindow -> StoreItem.cs گزینه های،main menu در.8
210
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
public string size;
public decimal unitPrice;
public void CreateItem()
{
itemNumber = 792475;
itemName = "Aramis Gentlemen Collection 3.4oz JHL Custom Blended Cologne Spray";
size = "3.4oz";
unitPrice = 48.00m;
}
public void Describe()
{
System.Console.WriteLine("Department Store");
System.Console.Write("Item #: ");
System.Console.WriteLine(itemNumber);
System.Console.Write("Item Name: ");
System.Console.WriteLine(itemName);
System.Console.Write("Item Size: ");
System.Console.WriteLine(size);
System.Console.Write("Unit Price: ");
System.Console.WriteLine(unitPrice);
}
}
. کلیک کنیدWindow -> DepartmentStore.cs را باز کرده و روی گزینه هایmain menu .1
Department Store
Item #: 792475
Item Name: Aramis Gentlemen Collection 3.4oz JHL Custom Blended Cologne Spray
Item Size: 3.4oz
Unit Price: 48.00
211
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
.6پنجره ی DOSرا بسته و به محیط برنامه نویسی بازگردید.
پس از این که متدی مقداری را حمل کرد ،باید محصول و نتیجه ی آن را در اختیار دیگر متدها و کالس ها قرار دهد ،در این صورت متد دیگر
نمی تواند voidیا بی مقدار باشد و سرانجام باید مقداری را بازگرداند .برای تعریف متدی که مقدار باز می گرداند ،باید نوع بازگشتی
مثال
class Exercise
{
)(double Operate
{
}
}
همچنین می توانید عالمت سوأل به نوع داده ی مورد نظر خود اضافه کنید .مثال زیر را در نظر بگیرید.
class Exercise
{
)(double? Operate
{
}
}
در بدنه ی متد ،می توان چند متغیر تعریف کرد که فقط توسط خود آن متد مورد استفاده قرار می گیرند .متغیری که در بدنه ی متد تعریف می
شود ،متغیر محلی نامیده می شود .متغیر محلی تنها از داخل متد قابل دسترسی است (نمی توان به آن خارج از کالس دسترسی پیدا کرد).
پس از تعریف متغیر محلی ،متد بالفصله به آن دسترسی پیدا می کند و شما می توانید هر کاری که مناسب می دانید با آن انجام دهید .برای
مثال می توانید پیش از استفاده ،به متغیر محلی مقدار اختصاص دهید.
پس از این که متد وظیفه ی محوله را انجام داد ،باید مقداری را ارائه دهد .برای این منظور باید ابتدا کلید واژه ی returnرا تایپ کرده و به
دنبال آن مقداری را که متد باز می گرداند قرار دهید .مقدار بازگردانده شده باید با نوع بازگشتی متد یکی باشد .مثال زیر را در نظر بگیرید.
class Exercise
{
)(double Operate
{
;return 24.55
212
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
}
}
class Exercise
{
double? Operate()
{
return 24.55;
}
}
البته به شرط این که عبارت بیان شده مقداری تولید کند که با نوع بازگشتی هم خوانی،) بازگرداندexpression( متد ممکن است عبارت
class Exercise
{
double? Operate()
{
return 24.55 * 4.16;
}
}
213
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
return unitPrice;
}
public void Describe()
{
System.Console.WriteLine("Department Store");
System.Console.Write("Item #: ");
System.Console.WriteLine(itemNumber);
System.Console.Write("Item Name: ");
System.Console.WriteLine(itemName);
System.Console.Write("Item Size: ");
System.Console.WriteLine(size);
System.Console.Write("Unit Price: ");
System.Console.WriteLine(unitPrice);
System.Console.Write("Total Value: ");
System.Console.WriteLine(CalculateTotalValue());
}
}
. برنامه را اجرا کرده تا نتیجه ی عملیات را مشاهده کنید.1
و به صورت پیش فرضNew Project (که هنگام ایجاد برنامه ی کاربردی جدید و با به کار بردن پنجره ی محاوره یMain() تاکنون با تابع
راه دیگری که برای پیاده سازی. می باشدvoid از نوعMain() در چنین پیاده سازی به صورت پیش فرض تابع.تعریف می شود) کار کردیم
Main() تابع. قابل اجرا استint. همین قانون برای تمام متدهای نوع. باشدinteger از نوع، این است که متد، وجود داردMain() تابع
.) بازگشتی معتبر باشدinteger ای بازگرداند ( البته به شرط این کهinteger می تواند هر نوع
مثال
class Exercise
{
char? HaveCharacter()
{
return 'G';
}
static int Main()
{
Exercise exo = new Exercise();
System.Console.Write("Character: ");
System.Console.WriteLine(exo.HaveCharacter());
return 244006;
}
214
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
}
نتیجه ی زیر به دست می آید.
Character: G
Press any key to continue...
به منظور ایجاد تابع Mainبا استفاده از ،skeleton codeروی آن بخشی که می خواهید تابع نام برده را اضافه کنید راست کلیک کرده،
سپس گزینه ی Insert Snippet...را انتخاب کنید .حال ،روی گزینه ی Visual C#دوبار کلیک کنید.
چنانچه مایلید تابع Mainای ایجاد کنید که مقداری باز نمی گرداند ،روی svmدوبار کلیک کنید( .مخفف ")"static void Main
به منظور ایجاد تابع Mainای که integerباز می گرداند ،روی ( simمخفف" )"static int Mainدوبار کلیک کنید.
.8روی دکمه ی DepartmentStore.csکلیک کرده تا به آن دسترسی پیدا کنید ،سپس آن را به صورت زیر اصالح کنید :
215
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
public class DepartmentStore
{
)(static int Main
{
;)(StoreItem si = new StoreItem
;)(si.CreateItem
;)(si.Describe
;)(System.Console.ReadKey
;return 0
}
}
.2برنامه را اجرا کرده تا نتیجه ی آن را ببینید.
متد تکلیفی را انجام می دهد که تکمیل کننده ی عملیات یک کالس است .متدهایی که در بخش های پیشین به کار بردیم ،برای تبادل
اطالعات بین بخش های مختلف برنامه به متغیرهای محلی تکیه می کردند .گاهی اوقات یک متد برای تکمیل عملیات کالس به چند مقدار نیاز
دارد .خصوصیت برجسته ای که مقادیر ذکر شده دارند این است که ،متد دیگری که این متد را فرا می خواند باید مقدارهای الزم آن را تامین
کند .به مقداری که متد برای تکمیل وظیفه محوله به آن نیاز دارد ،آرگومان گفته می شود.
درست مشابه متغیر ،یک آرگومان با نوع مقدارش تعریف و نمایش داده می شود .برای مثال ،متدی ممکن است به کاراکتر نیاز داشته باشد،
در حالی که متدی دیگر به یک رشته نیاز دارد .حتی ممکن است متغیر دیگری به عدد اعشاری ( )decimal numberنیاز داشته باشد .به
عبارت دیگر ،متد یا کالسی که متد دیگری را فرا می خواند ،مسئول تامین مقدارهای مناسب و مورد نیاز است (البته یک متد ممکن است خود
مقداری که برای متدی فراهم می شود ،داخل پرانتزهای متد تایپ می شود .یک متد باید نوع مقداری که به آن نیاز دارد را مشخص کند ،به
همین خاطر آرگومان مورد نظر با نوع داده ی معین و یک اسم نمایش داده می شود.
تصور کنید که می خواهیم متدی تعریف کنیم که طول ضلع یک مربع را نمایش دهد .چنین متدی به صورت زیر تعریف می شود.
class Exercise
{
)void ShowCharacter(char c
216
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
{
}
}
در صورتی که نوع داده ی آرگومان از نوع اولیه بود ،برای این که نشان دهیم نوع داده ی مزبور می تواند مقدار تهی ( )null valueداشته
باشد ،به آن عالمت سوأل اضافه می کنیم .نمونه ی آن را در زیر مشاهده می کنید :
class Exercise
{
)void ShowCharacter(char? c
{
}
}
می توان در بدنه ی یک متد مقدار آرگومان را لحاظ کرد (هم چنین می توان مقدار آرگومان را در بدنه ی متد به کار نبرد) .مثال زیر مقدار
در وهله ی اول برای استفاده از یک متد باید آن را فرا خواند .به منظور فراخوانی متدی که آرگومان می گیرد ،ابتدا باید مقداری برای آرگومان
فراهم کنید ،در غیر این صورت پیغام خطا ( )errorدریافت می کنید .همچنین باید مقدار مناسب را در اختیار آرگومان قرار دهیم ،در غیر این
صورت متد آن گونه که باید کار خود را درست انجام نمی دهد و نتیجه ی اتکاناپذیر و نامعتبر به دست می دهد.
چنانچه متد حین فراخوانی ،آرگومان بگیرد ،می توانید داخل پرانتز آن مقداری تایپ کنید.
217
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
مثال
class Exercise
{
void ShowCharacter(char c)
{
System.Console.WriteLine(c);
}
static int Main()
{
Exercise exo = new Exercise();
System.Console.Write("Character: ");
exo.ShowCharacter('W');
return 0;
}
}
. سپس آن را به صورت زیر اصالح کنید، کلیک کرده تا فایل مورد نظر باز شودStoreItem.cs روی دکمه ی.8
public class StoreItem
{
public long itemNumber;
public string itemName;
public string size;
public decimal unitPrice;
public void CreateItem()
{
itemNumber = 911792;
itemName = "Girls Tillie Poplin Dress";
size = "12";
unitPrice = 110.00m;
}
public decimal CalculateTotalValue(int qty)
{
return unitPrice * qty;
}
public void Describe()
{
int quantity = 6;
System.Console.WriteLine("Department Store");
System.Console.Write("Item #: ");
System.Console.WriteLine(itemNumber);
System.Console.Write("Item Name: ");
System.Console.WriteLine(itemName);
218
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;)" System.Console.Write("Item Size:
;)System.Console.WriteLine(size
;)" System.Console.Write("Unit Price:
;)System.Console.WriteLine(unitPrice
;)" System.Console.Write("Quantity:
;)System.Console.WriteLine(quantity
;)" System.Console.Write("Total Value:
;))System.Console.WriteLine(CalculateTotalValue(quantity
}
}
یک متد می تواند آرگو مان های متعدد داشته باشد .البته ،برای تک تک آرگومان ها باید یک اسم و نوع داده در نظر گرفته شود .آرگومان ها
با ویرگول ( )،از هم جدا می شوند .به مثال زیر توجه کنید.
class Exercise
{
void ShowEmployee(long employeeNumber, string fullName,
)char gender, double hourlySalary
{
}
}
در صورت الزام ،به آرگومان هایی که از نوع اولیه ی داده هستند ،عالمت سوال اضافه می کنیم.
توجه
از این بخش درس به بعد ،به منظور اشاره به متدی که متعلق به یک کالس هست از قرداد زیر استفاده می کنیم.
219
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
)ClassName.MethodName(Arguments
توجه داشته باشید که آیتم داخل پرانتز به آرگومانی که متد می گیرد اشاره دارد.
توجه
از این بخش درس به بعد ،می نویسیم " دستور نحوی این متد هست ".
;)ReturnValue ClassName.MethodName(Arguments
با این کار داریم نوع بازگشتی ( ،)return typeاسم مورد نظر ،و تعداد آرگومان های یک متد را ارائه می دهیم.
در قرارداد جدید ما ،دستور نحوی را با نقطه ویرگول (;) خاتمه می دهیم .بر خالف زبان های ،Visual Basic ، Object Pascal،C++ ،C
زبان برنامه نویسی C#و Javaاین اجازه را به شما نمی دهد که اول تابعی را تعریف کنید ،سپس آن را در بخش دیگر فایل یا فایلی مجزا
پیاده سازی کنید .ما از نقطه ویرگول برای نشان دادن ساختار یک متد استفاده می کنیم (و نه برای خود تعریف).
هنگام تعریف متغیر ،می توانید 8 ،2یا حتی تمامی آرگومان ها را هر طور که مایلید به کار ببرید .برای مثال ،می توانید مقادیر آن را با کنسول
class Exercise
{
)void ShowEmployee(long employeeNumber, string fullName,char gender, double hourlySalary
{
;)" System.Console.Write("Employee #:
;)System.Console.WriteLine(employeeNumber
;)" System.Console.Write("Full Name:
;)System.Console.WriteLine(fullName
System.Console.Write("Gender: ;)"
;)System.Console.WriteLine(gender
;)" System.Console.Write("Hourly Salary:
;)System.Console.WriteLine(hourlySalary
;)(System.Console.ReadKey
}
}
220
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
می توان، دیدیم که هنگام فراخوانی متدی که آرگومان می گیرد.راه های مختلفی برای فراخوانی متدی که آرگومان می گیرد وجود دارد
کافی است مقدار مربوط را در، هنگام فراخوانی متدی که چندین آرگومان می گیرد، به همین ترتیب هم.مقداری در پرانتزهای متد تایپ کرد
Employee Record
-----------------------------
Employee #: 572948
Full Name: Andrew Bridges
Gender: M
Hourly Salary: 22.85
Press any key to continue...
221
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
فراخوانی آرگومان با استفاده از اسم
چنانچه متدی فراخوانی کنید که آرگومان های متعددی می گیرد ،نیازی به استفاده از placeholderدقیق هر آرگومان نیست .در عوض می
توان به هر آرگومان با اسم آن اشاره کرد .برای این منظور ،در پرانتزهای متد ،ابتدا اسم آرگومان را تایپ کنید و به دنبال آن عالمت ( ):و
در صورت کار با برنامه ی ،Microsoft Visual Studioپس از وارد کردن اسم متد و "(" ،قاعدتاً باید بتوانید فهرستی از اسم های آرگومان
سپس ،می توانید اسم آرگومان را تایپ کنید .می توانید هم به جای تایپ کردن آن ،کلید های Ctrl + Spaceرا فشار دهید .حال ،فهرستی
ظاهر می شود .در فهرست مذکور اسم های آرگومان ها قابل مشاهده می باشد.
222
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
اکنون می توانید اسم آرگومان را از فهرست انتخاب کنید .همان طور که پیش تر ذکر شد ،پس از اسم آرگومان ،عالمت " " :و به دنبال آن
مقدار آرگومان را وارد می کنیم .به همین ترتی ب ،می توان به هر آرگومان با استفاده از اسم دسترسی پیدا کرد ،سپس مقدار به آن تخصیص
class Exercise
{
)void ShowEmployee(long employeeNumber, string fullName,char gender, double hourlySalary
{
;)"System.Console.WriteLine("Employee Record
;)"System.Console.WriteLine("-----------------------------
;)" System.Console.Write("Employee #:
223
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;)System.Console.WriteLine(employeeNumber
;)" System.Console.Write("Full Name:
;)System.Console.WriteLine(fullName
System.Console.Write("Gender: ;)"
;)System.Console.WriteLine(gender
;)" System.Console.Write("Hourly Salary:
;)System.Console.WriteLine(hourlySalary
}
)(static int Main
{
;)(Exercise exo = new Exercise
;)'exo.ShowEmployee(fullName: "Annette Greens", hourlySalary: 16.85,employeeNumber: 519427, gender: 'F
;return 0
}
}
نتیجه
Employee Record
-----------------------------
Employee #: 519427
Full Name: Annette Greens
Gender: F
Hourly Salary: 16.85
Press any key to continue...
هنگام فراخوانی متدی که چندین آرگومان می گیرد ،گفتیم که ابتدا باید مقدارهای مورد نیاز آرگومان ها را فراهم کنیم .این به آن خاطر است
که (وجود) آرگومان الزامی بوده و متد فراخوان ( )calling methodباید (هنگام فراخوانی متدی که چندین آرگومان دارد) مقداری معتبر
ارائه دهد .به این روش از ارائه ی مقدار برای آرگومان ،روش ارسال آرگومان با استفاده از مقدار گفته می شود.
برای ایجاد برنامه ی کاربردی جدید ،به فهرست اصلی مراجعه کرده و گزینه های File -> New Project...را کلیک کنید. .2
224
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
. را از لیست میانی انتخاب کنیدEmpty Project .1
NationalBank1 -> Add : راست کلیک کرده و طبق دستور زیر به پیش بروید،Solution Explorer در،به منظور ایجاد فایل جدید .5
225
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
==============================
Account Information
------------------------------
Account #: 248-050842-749
Customer Name: Ann Kelley
PIN: 8648
Balanace: 350
==============================
226
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
)(In Main
Amouont: $0
-------------------------
)(In GetDeposit
Amouont: $450
-------------------------
)(Bank in Main
Amouont: $0
Press any key to continue...
همان طور که مشاهده می کنید ،مقدار آرگومان قبل و پس از فراخوانی متد )( GetDepositیکسان است و هیچ فرقی نمی کند.
هنگامی که متغیری را در برنامه ی خود تعریف می کنید compiler ،مقداری حافظه به آن تخصیص می دهد .در مورد متغیر دو چیز از اهمیت
باالیی ب رخوردار است :مقدار متغیر و محل قرار گیری آن در حافظه .به مکان یا محل قرارگیری متغیر در حافظه ،آدرس متغیر می گویند.
اگر آرگومان را با استفاده از اسم فراخوانی کنید compiler ،تنها کپی ای از مقدار آرگومان تهیه کرده ،سپس آن را به متد فراخوان ( calling
)methodمی دهد .اگرچه متد فراخوان مقدار آرگوامان ذکر شده را دریافت می کند و می تواند آن را به هر شکل ممکن به کار برد ،اما نمی
تواند آن را (برای همیشه) تغییر دهد .در صورت نیاز می توان با فراخوانی متد ،مقدار یک آرگومان را تغییر داد ( .)modifyاگر می خواهید
متد فراخوان مقدار آرگومان ارائه شده را تغییر داده ،سپس مقدار تغییر داده شده ( )modifiedرا بازگرداند ،باید ارگومان را با استفاده از
حال ،برای ارسال آرگومان با استفاده از ارجاع ،حین تعریف متد ،باید کلیدواژه ی refرا پیش از نوع داده ی آرگومان تایپ کرد.
مثال
In Main()
Amount: $0
Bank in Main()
Amount: $0
Press any key to continue...
الزم است مقدار، برای این منظور. این است که به متد اجازه ی تغییر مقدار آرگومان داده شود،دلیل اصلی ارسال آرگومان به وسیله ی ارجاع
مثال
228
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;)")(System.Console.WriteLine("In Main
;)"System.Console.Write("Amount: $
;)System.Console.WriteLine(amt
;)"System.Console.WriteLine("-------------------------
;)exo.GetDeposit(ref amt
;)"System.Console.WriteLine("-------------------------
;)")(System.Console.WriteLine("Bank in Main
;)"System.Console.Write("Amount: $
;)System.Console.WriteLine(amt
;return 0
}
}
نتیجه
)(In Main
Amount: $0
-------------------------
)(In GetDeposit
Amount: $450
-------------------------
)(Bank in Main
Amount: $450
Press any key to continue...
همان طور که در مثال باال مشاهده کردید ،این بار مقدار متغیر پس از فراخوانی تابع تغییر یافته.
می توانید کلیه ی آرگومان ها را به عنوان ارجاع ارسال کنید .این که کدام آرگومان با مقدار ارسال شود و کدام با ارجاع بستگی به این دارد
دیدیم که (یک) تابع می تواند تنها یک مقدار بازگرداند ،زیرا تنها یک کلیدواژه ی returnوجود دارد .خوشبختانه ،ارجاع ( )referenceبا
داشتن قابلیت ارسال چندین آرگومان ،به متد اجازه می دهد چندین مقدار بازگرداند.
229
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
System.Console.WriteLine("==============================");
System.Console.WriteLine("Account Information");
System.Console.WriteLine("------------------------------");
System.Console.Write("Account #: ");
System.Console.WriteLine(acntNbr);
System.Console.Write("Customer Name: ");
System.Console.WriteLine(name);
System.Console.Write("PIN: ");
System.Console.WriteLine(PIN);
System.Console.Write("Balanace: ");
System.Console.WriteLine(balance);
System.Console.WriteLine("==============================");
}
230
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
==============================
Account Information
------------------------------
Account #: 248-050842-749
Customer Name: Ann Kelley
PIN: 8648
Balanace: 350
==============================
After a new deposit
==============================
Account Information
------------------------------
Account #: 248-050842-749
Customer Name: Ann Kelley
PIN: 8648
Balanace: 575.55
==============================
After a withdrwal
==============================
Account Information
------------------------------
Account #: 248-050842-749
Customer Name: Ann Kelley
PIN: 8648
Balanace: 310.3
==============================
داخل پرانتز متد پیش از نوع داده ی،out به منظور ارسال آرگومان. می باشدout روش دیگر ارسال آرگومان با استفاده از کلیدواژه ی
مثال
مثال
In Main()
Amount: $0
-------------------------
In GetDeposit()
Amount: $450.00
-------------------------
Bank in Main()
Amount: $450.00
-------------------------
In GetWithdrawal()
Amount: $265.00
-------------------------
Bank in Main()
Amount: $265.00
Press any key to continue...
. متد با استفاده از اسمش کد گذاری می شود، در جدول بیان شده.(جدول مجازی) می گویند
233
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
CalculateArea Calculate@None
در صورتی که متد آرگومانی داشت ،جدول باال نوع داده ی آرگومان را نمایش می دهد .نوع بازگشتی متد و اسم های آرگومان ها هیچ کدام
مهم نیستند .در صورتی که کالس دربردارنده ی متدهایی با اسامی متفاوتی بود ،متدها به راحتی از هم قابل تشخیص خواهند بود .گاهی
اوقات الزم است متدهای مختلفی داشته باشید که همگی یک کار مشابه را انجام می دهند ولی با تفاوت های جزئی (این دیگر بستگی به شما
دارد که این تفاوت ها چه باشند) .یکی از گزینه های پیش رو این است که اسم متدها را یکی انتخاب کنید .به قابلیت داشتن چندین متد با
برای اجرای ،method overloadingهنگام ایجاد ،virtual tableتک تک درایه ها ( )entryدر لیست نام برده باید منحصر به فرد باشند.
همان طور که پیش تر ذکر شد ،نوع بازگشتی متد داخل جدول قرار داده نمی شود ،در نتیجه نمی توان تفاوت ها را بر آن اساس پایه گذاری
کرد .اگر سعی کنید دو متد ایجاد کنید که هیچ یک آرگومان نمی گیرند ،طبیعتاً تشخیص آن دو متد از یک دیگر ممکن نخواهد بود .راه حل
مسئله فوق این است که حداقل یکی از آن دو متد آرگومان بگیرند .به مثال زیر توجه کنید.
CalculateArea Calculate@None
234
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
. مثال زیر کد باال را به کار می برد.) جداگانه ای (متفاوتی) داردencoding( این بار هر متد رمزگذاری،همان طور که انتظار می رفت
Geometric Shapes
Calculation of Areas
Square: 695.9044
Press any key to continue...
نمی توان دو، بنابراین. محسوب نمی شودvirtual table ) آن درencoding( به خاطر داشته باشید که اسم یک آرگومان بخشی از رمزگذاری
235
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
{
return 0D;
}
// Square
public double CalculateArea(double side)
{
return side * side;
}
// Circle
public double CalculateArea(double radius)
{
return radius * radius * 3.14159;
}
}
.عملیات باال نتیجه ی زیر را به دست می دهد
CalculateArea Calculate@None
. پیغام خطای زیر را تولید می کندcompiler ، زمانی که پروژه را به وجود می آورید،در نتیجه
. به مثال زیر توجه کنید.یکی از قواعد اضافه بار گذاری متد این است که متد گفته شده می تواند آرگومان هایی از نوع مختلف داشته باشد
virtual گفتیم که نوع داده ی آرگومان در داخل. شما به دالیلی نمی خواهید آرگومان متفاوتی (از نوع دیگر) ارسال کنید،در بیشتر موارد
. شمار متفاوتی آرگومان بگیرد چه می شود؟ مثال زیر را در نظر بگیرید، اما اگر هر متد. قرار می گیردtable
CalculateArea Calculate@None
237
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
CalculateArea double، Calculate@Double@Double
double
نمونه ای از فراخوانی متدها را در.) متد دوم و سوم متفاوت هستندencoding( رمزگذاری،همان طور که در جدول باال مشاهده می کنید
eometric Shapes
alculation of Areas
238
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
quare: 695.9044
ectangle: 1033.3046
ress any key to continue...
اگرچه در مثال باال از دو آرگومان نوع دابل ( )double argumentبرای متد سوم استفاده کردیم ،آرگومان می تواند از هر نوعی باشد .این
تصمیم دیگر با شما است که چی متد را به وجود آورد .بنابراین ،قاعده ی دیگر سربارگذاری متد ایجاب می کند هر متد آرگومان های متفاوتی
داشته باشد.
یکی از خصوصیات بیشتر زبان های برنامه نویسی کامپیوتر از جمله زبان های مبنای C# ،Java ،C++ ،Cو دیگر زبان ها مثل ،Pascal :
Visual Basicاین است که برنامه نویس نیازی به استفاده از آرگومان داخل متد ندارد .از این امکان می توان برای ایجاد دو نسخه ی کامالً
متفاوت متد استفاده کرد که هر دو عملکرد ( )behaviorمشابه دارند :می توان آرگومانی ارسال کرد که در آینده مورد استفاده قرار نمی
گیرد ولی منجر به ایجاد درایه ی جدید و متمایز در virtual tableمی شود .کد زیر را در نظر بگیرید.
239
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
CalculateArea Calculate@None
double
double
به خاطر دارید که برای محاسبه ی محیط های یک مربع یا دایره ،به تنها یک مقدار ( )valueنیاز دارید .به منظور تمیز دادن /وجه تمایز قائل
شدن بین محاسبات این دو محیط در کد ،آرگومانی متفاوت (دومی) به محیط دایره ارسال می کردیم .ما در مثال خود آرگومان را ""unused
نامیدیم ،ولی شما می توانید هر اسمی که دوست دارید برای آن انتخاب کنید (یکی از تفاوت های بین زبان های C++و C#این است که در
C++می توان اسم آرگومان را حذف کرد .بنابراین ،اگر کد فوق را با زبان C++می نوشتیم دیگر نیازی به نام گذاری آرگومان وجود نداشت).
هنگام فراخوانی متدی که دو آرگومان می گیرد ،توجه داشته باشید که حتماً باید مقداری به آرگومان دومی ارسال شود .به این خاطر که متد
آرگومان گفته شده را به کار نمی برد ،فرقی نمی کند چه مقداری به آن ارسال کنید ،مادام این که با نوع متد هم خوانی و مطابقت داشته
باشد.
مثال
Geometric Shapes
Calculation of Areas
Square: 695.9044
Rectangle: 1033.3046
Circle: 2186.246303996
Press any key to continue...
الزم است قواعد آن را هنگام استفاده از این برنامه به خاطر داشته، بنابراین. کاربرد فراوانی داردNET Framework. سربارگذاری متد در
تعداد مختلفی آرگومان داشته باشند و یا آرگومان های آن/ متدها یا باید شمار متفاوت: خوشبختانه این قواعد بسیار ساده هستند.باشید
.)ها از نوع متفاوت باشند (نوع آرگومان های ارسال شده به آن ها از هم متمایز باشند
نشانگر تعداد نسخه های متد میx . نمایش می دهدx از8 برچسبیIntelliSense ،code editor در، می شودoverload هنگامی که متدی
. را نمایش می دهد1 از8 IntelliSense بنابراین،) مشاهده می کنید که سه نسخه ی مجزا داردfunction( در زیر تابعی.باشد
241
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
برای انتخاب یکی از ورژن ها ،می توان کلید پیکان جهت پایین ( )down arrow keyرا فشار داد یا مقدار آرگومان مورد نظر را تایپ کرده تا
242
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
آرگومان های اختیاری
گفته شد در صورتی که متدی آرگومان گرفت ،هنگام فراخوانی آن آرگومان ،الزم است مقداری برای آرگومان نام برده فراهم کرد .البته،
استثنایی برای قاعده ی مذکور وجود دارد .چنانچه متدی دارید که آرگومان آن معموالً مقداری یکسان دریافت می کند ،می توانید مقداری
برای نشان دادن این که آرگومانی مقدار پیش فرض دارد ،مقدار پیش فرض را داخل پرانتز متد ،پس از اسم آرگومان قرار دهید.
مثال
243
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
public class Exercise
{
double? CalculateNetPrice(double? discountRate = 25)
{
double? origPrice = 125.55;
return origPrice - (origPrice * discountRate / 100);
}
}
دیگر نیازی به ارسال، چنانچه می خواهید مقدار پیش فرض را به کارببرید. یک مقدار به آرگومان ارسال کرد،می توان هنگام فراخوانی متد
.آرگومان نیست
مثال
کلیه ی آرگومان های مزبور (یا برخی از آن ها) می توانند، حال. می توان متدی ایجاد کر د که آرگومان های متعددی می گیرد،به همین ترتیب
244
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
سپس انتخاب کرد، می توان آرگومانی پیش فرض برای هر یک فراهم کرد،در صورتی که متدی چند آرگومان (بیش از یک آرگومان) گرفت
حین تعریف متد، اگر می خواهید کلیه ی آرگومان ها مقدار پیش فرض داشته باشند.کدام یک از آرگوم ان ها مقدار پیش فرض دریافت کنند
. توجه خود را به مثال زیر جلب کنید. به دنبال هر اسم عالمت مساوی " = " و مقدار دلخواه را تایپ کنید،مورد نظر
ترتیب قرار، و شما خواستید مقدارهای پیش فرضی برای آن پارامترها فراهم کنید،چنانچه متدی چند آرگومان (بیش از یک آرگومان) گرفت
چنانچه تنها یک، هنگام فراخوانی چنین تابعی. آن مقدار پیش فرض فقط به آرگومان دومی تعلق می گیرد،آرگومان ها ارائه دهید
مقدار آن را به اولین پارامتر در لیست تخصیص می دهد و هیچ مقداری به دومین پارامتر اختصاصcompiler ،آرگومان فراهم کنید
.نمی دهد
مثال
با پیغام خطا، تنها یک آرگومان هنگام فراخوانی تابع فراهم کنید،چنانچه پس از تعر یف تابع و تخصیص مقدار پیش فرض به اولین آرگومان
246
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
{
double? origPrice = 185.95;
double? discountValue = origPrice * discountRate / 100;
double? taxValue = taxRate / 100;
double? netPrice = origPrice - discountValue + taxValue;
return netPrice;
}
static int Main()
{
double? finalPrice;
double? taxRate = 5.50; // = 5.50%
Exercise exo = new Exercise();
finalPrice = exo.CalculateNetPrice(taxRate);
System.Console.WriteLine("After applying a 25% discount and a 5.50% tax rate");
System.Console.Write("Final Price = ");
System.Console.WriteLine(finalPrice);
System.Console.ReadKey();
return 0;
}
}
چنانچه متد چندین آرگومان (بیش از دو آرگومان) دریافت کرد و می خواهید که تنها تعدادی از آن آرگومان ها مقدار پیش فرض داشته،حال
صرف نظر از این که چه تعداد آرگومان. به خاطر داشته باشید که آرگومان های با مقدار پیش فرض باید انتهای لیست قرار بگیرند،باشند
همیشه لیست خود را با آرگومان هایی آغاز کنید که،)مقدار پیش فرض دریافت می کنند (و چه تعداد مقدار پیش فرض دریافت نمی کنند
مثال
public class Exercise
{
double? CalculateNetPrice(double? origPrice,double? taxRate = 5.75,double? discountRate = 25)
{
double? discountValue = origPrice * discountRate / 100;
double? taxValue = taxRate / 100;
double? netPrice = origPrice - discountValue + taxValue;
return netPrice;
}
}
. به یاد داشته باشید که تنها برای آرگومان هایی که مقدار پیش فرض ندارند می توان مقدار ارائه داد،در هنگام فراخوانی متد
247
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
public class Exercise
{
double? CalculateNetPrice(double? origPrice,double? taxRate = 5.75,double? discountRate = 25)
{
double? discountValue = origPrice * discountRate / 100;
double? taxValue = taxRate / 100;
double? netPrice = origPrice - discountValue + taxValue;
return netPrice;
}
static int Main()
{
double? originalPrice = 375.95;
double? finalPrice;
Exercise exo = new Exercise();
finalPrice = exo.CalculateNetPrice(originalPrice);
System.Console.WriteLine("After applying a 25% discount and a 5.75% tax rate");
System.Console.Write("Final Price = ");
System.Console.WriteLine(finalPrice);
System.Console.ReadKey();
return 0;
}
}
مثال
ابتدا باید مقداری برای، برای تخصیص مقدار به دومین آرگومان اختیاری،C++ در.تصور کنید متدی دارید که چندین آرگومان اختیاری می گیرد
به مثال زیر. باید آن را ارسال کنید، حتی اگر هم بخواهید مقدار پیش فرض آرگومان اولی را به کارببرید.اولین آرگومان اختیاری ارسال کنید
.توجه کنید
می.. سوم، ولی برای آرگومان های دوم،تصور کنید می خواهید یک آرگومان اختیاری را نادیده گرفته تا از مقدار پیش فرض آن استفاده کنید
) و مقدار:( اسم آرگومان مورد نظر و به دنبال آن دو نقطه، در پرانتز متدی که فرا می خوانید، برای این منظور.خواهید مقدار ارسال کنید
.)دلخواه را تایپ کنید ( که در واقع با پروسه ی فراخوانی متد با استفاده از اسم یکی است
مثال
با استفاده از این روش ،می توان آرگومان های اختیاری را که حاضر نیستید مقداری برای آن ها فراهم کنید نادیده گرفت.
توصیف
پس از تعریف متغیر یک کالس در برنامه ،زمانی که برنامه باال می آید compiler ،به هر یک از اعضای کالس به اندازه ی کافی حافظه اختصاص
می دهد .فضای ای که به هر متغیر عضو تخصیص داده می شود با توجه به نوع آن متغیر مقداردهی اولیه می شود.
برای شی از نوع ،(string object) stringفضای مزبور خالی نگه داشته می شود .برای نوع ،integerفضای حافظه با 2پر می شود .برای شئ
ای از این نوع ،بهتر است مقداری فراهم شود که متغیرهای عضو را با مقدارهای دلخواه شما مقداردهی اولیه می کند.
متدی که شی ای را مقداردهی (اولیه) می کند ،ممکن است هر مقداری برگرداند ،اما بهتر است مقدار بازگشتی از نوع voidباشد زیرا هدف
اصلی آن تنظیم دوباره ی مقادیر است .به این خاطر که متد ،مقداری اولیه به تک تک متغیرهای عضو می دهد (متغیرهایی که طبیعتاً باید
مقداردهی اولیه شوند) ،الزم است آرگومانی معادل برای هر یک از متغیرهایی که مقداردهی اولیه می کند داشته باشد.
250
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
}
( به منظور پیاده سازی متد. لزومی ندارد حتماً تمامی اعضای یک کالس را مقداردهی (اولیه) کند،متدی که کالسی را مقداردهی اولیه می کند
. به مثال های ذیل توجه کنید. کافی است آرگومان متد را به متغیر مربوط اختصاص دهید،)منظور متدی است که مقداردهی اولیه می کند
. فراخوانی کنید تا مقادیر اولیه را به فیلدهای کالس بدهد،سپس می توانید متد را پس از تعریف نمونه ای از کالس
مثال
251
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
}
}
نتیجه
.2به منظور ایجاد برنامه ی جدید ،فهرست گزینه ی اصلی برنامه را باز کرده ،سپس گزینه های File -> New Projectرا کلیک کنید.
.5در پنجره ی Solution Explorerراست کلیک کرده ،سپس طبق دستور زیر عمل کنید.
در لیست میانی پنجره ی محاوره ی Code File ،Add New Itemرا کلیک کنید. .4
سازنده متدی خاص است که هنگام به وجود آمدن شی جدید ( )objectساخته می شود .متد و کالس هر دو یک اسم دارند .الزم
به ذکر است متد ،شی را درست در زمان به وجود آمدن آن مقداردهی اولیه می کند .هنگامی که کالسی می سازید ،چنانچه سازنده
ای برای آن معرفی نکنید compiler ،به صورت خودکار یک سازنده برای شما ایجاد می کند؛ این کار باعث می شود که کلیه ی شی
252
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
های کالس از وجود شی جدید آگاه شوند .به سازنده ای که توسط compilerایجاد می شود ،سازنده ی پیش فرض نیز می گویند.
البته شما می توانید سازنده ی خود را ایجاد کنید .برای این منظور متدی معرفی کنید که با کالس هم نام است.
داخل کالس موردنظر راست کلیک کرده Insert Snippet...را انتخاب کنید ،سپس C# Visualرا دوبار کلیک کنید.حال ،در لیستی
به خاطر داشته باشید که متد فوق نباید هیچ مقداری بازگرداند.
مثال
253
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
زمانی که نمونه ای از کالس تعریف می کنید( ،چه از آن شی استفاده بکنید چه نکنید) ،سازنده ای برای شی ایجاد می شود .پس از این که
نمونه ای از کالس تعریف شد ،سازنده ی پیش فرض فراخوانده می شود ( چه شی نام برده را به کار ببرید و چه آن را نادیده بگیرید) .مثال
نتیجه
همان طور که در مثال فوق مشاهده کردید ،اگرچه شی مذکور مورد استفاده قرار نگرفت ،تعریف آن به تنهایی وجود شی جدید را نشان داد.
.8در پنجره ی ،Solution Explorerراست کلیک کرده ،سپس DepartmentStore3 ->Add ->New Item...
.2در لیست میانی پنجره ی محاوره ی ،Add New Itemروی Code Fileکلیک کنید .حال ،اسم را به DepartmentStoreتغییر داده و
254
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;)(StoreItem si = new StoreItem
;)"System.Console.WriteLine("Department Store
;)" System.Console.Write("Item #:
;)System.Console.WriteLine(si.itemNumber
;)" System.Console.Write("Item Name:
;)System.Console.WriteLine(si.itemName
;)" System.Console.Write("Item Size:
;)System.Console.WriteLine(si.size
;)" System.Console.Write("Unit Price:
;)System.Console.WriteLine(si.unitPrice
;)(System.Console.ReadKey
;)(System.Console.ReadKey
;return 0
}
}
Department Store
Item #: 0
Item Name:
Item Size:
Unit Price: 0
می توان از سازنده ( )constructorبرای مقداردهی اولیه ی فیلدهای یک کالس نیز استفاده کرد .به همین دلیل ،می تواند جایگزین
مناسبی برای متدی باشد که مقداردهی اولیه می کند .برای استفاده از سازنده به منظور مقداردهی اولیه ی فیلدهای یک کالس،
متغیرهایی را که می خواهید مقداردهی اولیه کنید را به عنوان آرگومان تعریف کنید .نیازی نیست تمامی متغیرهای عضو را تعریف
کنید ،بلکه تنها آن دسته متغیرهایی که ملزوم به مقداردهی اولیه هستید کفایت می کند .در حقیقت ،تنها باید آن عضوهایی را
مقداردهی (اولیه) کنید که مطمئن هستید ،دیگر شی ها به هنگام استفاده از این شئ به آن ها نیاز دارند .به عبارت روشن تر،
objectشما فیلدهایی دارد که اشیا خارجی ( )external objectsنیاز ندارند تغییر دهند ( یا به آن ها دسترسی پیدا کنند) یا
متغیرهای عضو بعده ها هنگامی که از شئ مورد نیاز فراخوانده می شوند ،مقداردهی اولیه می شوند.
255
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
، برای متغیری از نوع عددی. می توانید فقط فیلدهای دلخواه کالس را مقداردهی اولیه کنید، به منظور ایجاد سازنده ی پیش فرض
فقط یک تک کوتیشن)’( به آن، در صورتی که متغیر یک کاراکتر بود.کافی است ثابت دلخواه را به هر متغیر عضو اختصاص دهید
. باید مقداری با (") دابل کوتیشن به متغیر اختصاص داد، چنانچه متغیر یک رشته بود، حال.اضافه می کنیم
نتیجه
. کلیک کنیدWindow ->StoreItem.cs روی گزینه ی، فهرست گزینه ی اصلی را باز کرده.8
256
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
.2فایل را به صورت زیر اصالح کنید.
public class StoreItem
{
;public long itemNumber
;public string itemName
;public string size
;public decimal unitPrice
)(public StoreItem
{
;itemNumber = 0
;"itemName = "Unknown
;"size = "0
;unitPrice = 0.00M
}
}
Department Store
Item #: 0
Item Name: Unknown
Item Size: 0
Unit Price: 0.00
مناسب ترین مکان برای تعریف اولیه ی متغیر ها درون سازنده می باشد (مناسب ترین جا برای تخصیص مقادیر پیش فرض به اعضای کالس،
سازنده ی پیش فرض می باشد) .عالوه بر سازنده ی پیش فرض ،می توانید هر تعداد سازنده که ملزوم می دانید اضافه کنید .این جنبه به
شما اجازه می دهد برای اهداف مختلف ،سازنده های متفاوت تولید کنید .بنابراین ،یک سازنده نیز (مثل متد) امکان overloadشدن دارد.
در مورد کلیه ی قواعد سربارگذاری متد قبالً مفصل بحث کردیم .ابتدایی ترین سازنده ای که ایجاد می کنید ،قابلیت استفاده از یک آرگومان
را دارد .هنگام ایجاد سازنده ای که تنها یک آرگومان می گیرد ،باید آن عضوی را مقداردهی اولیه کنید که با آرگومان مذکور مطابقت دارد ،و
دیگر اعضا را با مقادیر پیش فرض مقداردهی کنید .به مثال زیر توجه کنید.
257
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
private decimal originalDeposit;
public BankAccount(string number)
{
accountNumber = number;
customerName = "John Doe";
originalDeposit = 0M;
}
public void Show()
{
System.Console.WriteLine("Customer Account Information");
System.Console.Write("Account N#: ");
System.Console.WriteLine(accountNumber);
System.Console.Write("Customer Name: ");
System.Console.WriteLine(customerName);
System.Console.Write("Original Deposit: ");
System.Console.WriteLine(originalDeposit);
System.Console.ReadKey();
}
}
سازنده ی نام برده، باید هنگام معرفی نمونه ای از کالس،)در صورتی که کالسی با تنها یک سازنده ایجاد کردید (مانند مثال فوق
هنگام تعریف. توجه داشته باشید که نمی توان از سازنده ی پیش فرض ای که آرگومان نمی گیرد استفاده کرد: را به کار ببرید
. سپس مقادیر را داخل پرانتز سازنده قرار دهید، آن را با سازنده مقداردهی اولیه کنید،متغیر
258
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
}
}
public class Exercise
{
)(static int Main
{
;)"BankAccount account = new BankAccount("27-940025-17
;)(account.Show
;)(System.Console.ReadKey
;return 0
}
}
به همین ترتیب ،می توان برای مقداردهی های اولیه ی متفاوت ،سازنده های متفاوت ایجاد کرد ،البته این امکان وجود ندارد که برای هر متغیر
سازنده ای متفاوت ایجاد کرد .چنانچه سازنده ای متفاوت با آرگومان های مختلف (برای مقداردهی اولیه) ایجاد کنید ،هنگام تعریف متغیرهای
کالس ،دقت کنید که هر نمونه را با تعداد صحیح آرگومان مقداردهی اولیه کنید ،در غیر این صورت compiler ،ایراد می گیرد.
چنانچه کالسی با تنها یک سازنده ایجاد کنید ،و آن سازنده نیز حداقل یک آرگومان داشته باشد ،سازنده ی پیش فرض دیگر قابل استفاده و
در دسترس نخواهد بود .برای دسترسی به سازنده ی پیش فرض یک شی ،دو گزینه پیش رو دارید.
· در صورتی که هیچ سازنده ای در کالس ایجاد نکنید ،سازنده ی پیش فرض همیشه هنگام فراخوانی کالس آماده هست.
· اگر حداقل یک سازنده برای کالس ایجاد کنید و حداقل یک آرگومان برای سازنده ی مزبور فراهم کنید ،باید خودتان (صراحتا) یک
سربارگذاری سازنده
.8به فهرست گزینه ی اصلی مراجعه کرده ،روی گزینه های Window ->StoreItem.csکلیک کنید.
259
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
public class StoreItem
{
public long itemNumber;
public string itemName;
public string size;
public decimal unitPrice;
public StoreItem()
{
itemNumber = 0;
itemName = "Unknown";
size = "0";
unitPrice = 0.00M;
}
public StoreItem(long number)
{
itemNumber = number;
itemName = "Unknown";
size = "0";
unitPrice = 0.00M;
}
public StoreItem(long number, string name, string itemSize, decimal price)
{
itemNumber = number;
itemName = name;
size = itemSize;
unitPrice = price;
}
}
Department Store
Item #: 0
Item Name: Unknown
Item Size: 0
Unit Price: 0.00
=-------------------------------------------=
Department Store
Item #: 227174
Item Name: Unknown
Item Size: 0
Unit Price: 0.00
=-------------------------------------------=
Department Store
Item #: 180318
Item Name: V-Neck Cardigan with Ruffle Trim
261
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Item Size: M
Unit Price: 74
==-------------------------------------------
به این خاطر که یک سازنده پیش از هر چیز یک متد است و می تواند آرگومان بگیرد،متعاقباً آرگومان های آن می توانند مقادیر پیش فرض به
کارببرند.
به منظور تخصیص مقدار پیش فرض به آرگومان یک سازنده ،مقدار مناسب را هنگام ایجاد سازنده به آرگومان اختصاص دهید.
مثال
می توان از سازنده برای مقداردهی اولیه ی فیلدهای یک کالس استفاده کرد.
اگر سازنده ای ایجاد کنید که یک آرگومان می گیرد ،هنگام ایجاد نمونه ای از کالس ،آن تک سازنده هم به عنوان یک سازنده ی پیش فرض
عمل می کند ،هم به عنوان سازنده ای که یک آرگومان می گیرد .به این معنا که شما می توانید متغیری تعریف کرده و از سازنده ای استفاده
262
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
public void Describe()
{
System.Console.WriteLine("Square Characteristics");
System.Console.Write("Side: ");
System.Console.WriteLine(len);
}
}
public class Exercise
{
static int Main()
{
Rectangle rect = new Rectangle();
rect.Describe();
System.Console.ReadKey();
return 0;
}
}
Square Characteristics
Side: 10
Press any key to continue...
و برخی از آرگومان های ذکر شده می توانند،به همین ترتیب می توانید سازنده های مختلفی ایجاد کنید که آرگومان های متفاوتی می گیرند
برخی آرگومان ها می، سازنده های گوناگون می توانند آرگومان های از نوع متفاوت (مختلفی) داشته باشند.مقادیر پیش فرض داشته باشند
، هنگام ایجاد شی. در حالی که برخی دیگر (از این آرگومان ها) مقادیر پیش فرض نداشته باشند،توانند مقادیر پیش فرض داشته باشند
. مثال زیر را در نظر بگیرید.الزم است به نوع سازنده ای که به کار می برید دقت کنید
263
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
public void Describe()
{
System.Console.WriteLine("Square Characteristics");
System.Console.Write("Side: ");
System.Console.WriteLine(len);
}
/* If the constructor is called with two arguments,
* then we have a rectangle */
public void Describe(int rect)
{
System.Console.WriteLine("Rectangle Characteristics");
System.Console.Write("Length: ");
System.Console.WriteLine(len);
System.Console.Write("Height: ");
System.Console.WriteLine(hgt);
}
}
public class Exercise
{
static int Main()
{
Rectangle rect = null;
rect = new Rectangle(24.72);
rect.Describe();
rect = new Rectangle(24.72, 20.64);
rect.Describe(1000);
System.Console.ReadKey();
return 0;
}
}
.نتیجه ی زیر حاصل می شود
Square Characteristics
Side: 24.72
Rectangle Characteristics
Length: 24.72
Height: 20.64
Press any key to continue...
مخرب فرایند. یک مخرب زمانی فراخوانده می شود که برنامه دیگر کارش با شی تمام شده و نیازی به آن ندارد،درست برخالف سازنده ها
خودcompiler ، در صورتی که مخربی برای کالس تعریف نکنید، درست مثل سازنده ی پیش فرض.پاک سازی را پشته صحنه انجام می دهد
264
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
یک مخرب پیش فرض ایجاد می کند .برخالف سازنده ،مخرب را نمی توان سربارگذاری ( )overloadکرد .به عبارت دیگر ،شما نمی توانید
بیش از یک مخرب داشته باشید .اما درست مثل سازنده ،مخرب با کالس هم اسم است .این بار اسم مخرب با عالمت "~" آغاز می شود.
مثال
هنگام ایجاد متغیر عضو کالس ،یکی از تصمیماتی که اتخاذ می کنید این است که فیلد کالس چگونه مقدارش را دریافت کند .گاهی اوقات به
آن اعضایی ( )clients of a classکه از کالس استفاده می کنند ،اجازه ی تغییر مقادیر فیلدها داده می شود .گاهی اوقات هم شما می
خواهید فیلد ،فقط مقدار مزبور را نگه دارد یا ارائه بدهد ،ولی در عین حال نتواند آن را تغییر دهد .این کار باز هم به اعضا اجازه می دهد که
265
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
به مثال زیر توجه. را تایپ کردreadonly پیش از نوع داده ی آن باید کلیدواژه ی،به منظور ایجاد فیلدی که مقدار آن را فقط بتوان خواند
.کنید
می توانید فیلد را هنگام تعریف مقداردهی اولیه، دو گزینه اصلی پیش رو دارید. الزم است آن را مقداردهی اولیه کنید،پس از تعریف متغیر
.کنید
مثال
Circle Characteristics
Radius: 24.72
PI: 3.14159
Press any key to continue...
. این کار به صورت زیر انجام می پذیرد.گزینه ی دوم این است که فیلد را داخل سازنده ی یک کالس مقداردهی اولیه کنید
266
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
public class Circle
{
public double radius;
public Circle(double rad)
{
radius = rad;
PI = 3.14159;
}
public readonly double PI;
}
public class Exercise
{
static int Main()
{
var circ = new Circle(24.72);
System.Console.WriteLine("Circle Characteristics");
System.Console.Write("Radius: ");
System.Console.WriteLine(circ.radius);
System.Console.Write("PI: ");
System.Console.WriteLine(circ.PI);
System.Console.ReadKey();
return 0;
}
}
فیلد نام برده باید در سازنده و با عبارت دلخواه،) از یک عبارت گرفته شده باشدread-only field( چنانچه مقدار یک فیلد خواندنی
سپس آن،) در کالس تعریف کردهread-only( این است که فیلد مزبور را به عنوان متغیری فقط خواندنی،یکی از راه حل های رفع خطای فوق
. نمونه های آن را زیر مشاهده می کنید. را در سازنده و با عبارت موردنظر مقداردهی اولیه کنید
268
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;return 0
}
}
Circle Characteristics
Radius: 24.72
Diameter: 49.44
Circumference: 155.3202096
Area: 1919.757790656
Press any key to continue...
می دانیم که یک متغیر ثابت ( (constant variableرا باید به محض ایجاد کردن ،مقداردهی کرد .الزم به ذکر است که متغیر (فقط)
خواندنی از این قاعده پیروی نمی کند .به خاطر داشته باشید که نیازی نیست متغیر خواندنی را هنگام ایجاد آن مقداردهی اولیه کرد ،زیرا این
کار داخل سازنده ی کالس صورت می گیرد .هم چنین به دلیل این که سازنده قابلیت overloadشدن را دارد ،می تواند مقادیر متفاوتی
داشته باشد ،اما مقدار متغیر ثابت هیچ گاه تغییر نمی کند :یک بار در کالس (یا متد) مقداردهی می شود و آن مقدار را برای همیشه سرتاسر
کالس (یا متد) نگه می دارد (در تمام بخش های کالس از همان مقدار استفاده می کند).
فضای نام بخشی از یک کد است ،که با نام به خصوصی شناسایی می شود .آن نام می تواند هر اسمی از جمله اسم یک شخص ،شرکت یا شهر
باشد.
مقدمه
به منظور ایجاد پروژه ی جدید ،به فهرست گزینه ی اصلی مراجعه کرده ،سپس روی گزینه های File -> New Projectکلیک کنید. .2
حال ،روی Empty Projectدر لیست سمت راست کلیک کنید. .4
برای ایجاد فایل جدید ،فهرست گزینه ی اصلی را باز کرده ،روی گزینه های Project -> Add New Item...کلیک کنید. .4
269
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
گزینه ی Codeرا از لیست سمت چپ انتخاب کنید. .1
کد را با کلیدواژه ی namespaceآغاز کرده و به دنبال آن اسم بخش موردنظر را تایپ کنید.
روی بخشی که می خواهید فضای نام در آنجا ایجاد شود راست کلیک کرده ،حال روی Insert Snippet...دوبار کلیک کنید.
درست مثل یک کالس ،بخشی که متعلق به فضای نام است با عالمت "{" آغاز شده و به "}" ختم می شود.
مثال
namespace Business
{
}
داخل {} می توان هر چه مربوط به فضای نام است قرار داد .برای مثال ،می توان داخل فضای نامی یک کالس ایجاد کنید .به مثال زیر توجه
کنید.
namespace Business
{
class House
{
}
}
270
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
نحوه ی ایجاد فضای نام
برای ایجاد کالسی جدید به فهرست گزینه ی اصلی مراجعه کرده ،روی Project -> Add Class...کلیک کنید.
در پنجره ی ،Solution Explorerروی اسم پروژه ی موردنظر راست کلیک کرده سپس .project -> Add -> click Class... :
در پنجره ی ،Class Viewروی اسم پروژه راست کلیک کرده سپس Project -> Add -> Class... :
در صورت استفاده از هریک روش های باال ،برنامه ی Microsoft Visual C# 2010 Expressیا Microsoft Visual Studioفضای نامی با
پس از ایجاد اعضای یک فضای نامی ،می توانید با استفاده از عملگر نقطه ( ).به آیتم موردنظر در فضای نام دسترسی پیدا کنید .برای این
منظور ،اسم فضای نام و به دنبال آن عملگر نقطه ( ).و عضو موردنظر فضای نام را تایپ کنید.
مثال
namespace Business
{
public class House
{
271
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
public string propertyNumber;
public decimal price;
}
}
public class Exercise
{
static void Main()
{
Business.House property = new Business.House();
property.propertyNumber = "D294FF";
property.Price = 425880;
}
}
272
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Store Inventory
Item #: 613508
Item Name: Merino Crew Neck Cardigan
Unit Price: 80.00
مقدمه
در مثال باال ،تنها یک فضای نام ایجاد کردیم .به همین شکل ،می توانید فضاهای نامی متعددی در فایل ایجاد کنید ،البته به شرط اینکه بدنه
مثال
namespace RealEstate
{
public class House
{
;public string propertyNumber
;public decimal price
}
}
namespace Dealership
{
public class Car
{
}
}
همچنین می توان فضاهای نامی متعدد در چندین فایل ساخت .پس از ایجاد فایل ها ،برای دسترسی به محتوای فضای نام ،الزم است اسم
برای ایجاد فایل جدید ،فهرست اصلی را باز کرده ،روی Project -> Add New Item...کلیک کنید. .8
در صورت نیاز ،در لیست سمت چپ روی Codeکلیک کنید .حال ،در لیست سمت راست روی Code Fileکلیک کنید. .2
273
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
. را کلیک کنیدAdd سپس، تغییر دادهRecords اسم را به .1
namespace Store
{
public class StoreItem
{
public int itemNumber;
public string itemName;
public decimal unitPrice;
}
}
Project -> Add New Item... : فهرست اصلی را باز کرده سپس،برای ایجاد فایل جدید .5
. کلیک کنیدCode File در لیست سمت راست روی، اکنون. را از لیست سمت چپ انتخاب کنیدCode گزینه ی،در صورت لزوم .6
namespace Supply
{
public class Manufacturer
{
public string companyName;
public string contactName;
public string contactPhone;
}
}
. فایل را به صورت زیر اصالح کنید،برای به کار بردن فضاهای نامی .82
274
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;)(Store.StoreItem si = new Store.StoreItem
;si.itemNumber = 613508
;"si.itemName = "Merino Crew Neck Cardigan
;si.unitPrice = 80.00M
;)"System.Console.WriteLine("Store Inventory
;)" System.Console.Write("Item #:
;)System.Console.WriteLine(si.itemNumber
;)" System.Console.Write("Item Name:
;)System.Console.WriteLine(si.itemName
;)" System.Console.Write("Unit Price:
;)System.Console.WriteLine(si.unitPrice
;)(System.Console.ReadKey
;return 0
}
}
دیدیم که به منظور فراخوانی شی یا متدی که بخشی از فضای نام می باشد ،باید شی مورد نظر را با عملگر نقطه ( ).تعریف کنید .برای
استفاده از namespaceای که قبالً در فایل دیگری ایجاد شده و مورد استفاده قرار گرفته ،الزم است از کلیدواژه ی usingاستفاده کنید
(با این کار نشان می دهید که فضای نامی که اکنون دارید به کار می برید ،قبالً در جای دیگری تعریف شده) .برای انجام این کار ،ابتدا
الزم به ذکر است که با استفاده از کلیدواژه ی usingمی توان هر تعداد فضای نام خارجی که الزم است دخیل کرد.
در صورت بروز تداخل اسم ،حتی اگر هم از کلیدواژه ی usingاستفاده می کنید ،باز هم باید اسم کالس را کامل تعریف کنید.
275
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
si.unitPrice = 80.00M;
System.Console.WriteLine("Manufacturer Information");
System.Console.Write("Company Name: ");
System.Console.WriteLine(dealer.companyName);
System.Console.Write("Contact Name: ");
System.Console.WriteLine(dealer.contactName);
System.Console.Write("Contact Phone: ");
System.Console.WriteLine(dealer.contactPhone);
System.Console.WriteLine("---------------------------------------");
System.Console.WriteLine("Store Inventory");
System.Console.Write("Item #: ");
System.Console.WriteLine(si.itemNumber);
System.Console.Write("Item Name: ");
System.Console.WriteLine(si.itemName);
System.Console.Write("Unit Price: ");
System.Console.WriteLine(si.unitPrice);
System.Console.WriteLine("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
System.Console.ReadKey();
return 0;
}
}
Manufacturer Information
Company Name: Peel Corp
Contact Name: Sylvain Yobo
Contact Phone: (602) 791-8074
---------------------------------------
Store Inventory
Item #: 613508
Item Name: Merino Crew Neck Cardigan
Unit Price: 80.00
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
. یا تودرتو کردن فضای نام می گویندnesting a namespace به چنین فرایندی.می توان یک فضای نام را داخل فضای نام دیگر قرار داد
. از همان شیوه ای که برای ایجاد فضای نام ساده استفاده می کنید پیروی کنید،برای ایجاد فضای نام داخل فضای نام دیگر
276
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
namespace Business
{
public class House
{
public string propertyNumber;
public decimal price;
}
namespace Dealership
{
}
}
می توان به ساخت کالس، پس از ایجاد فضاهای نام دلخواه. گنجانده شدهBusiness داخل فضای نامDealership فضای نام،در مثال باال
پیش از فراخوانی عضو مورد نظر فضای نام (یا فضای نامی که در دل فضای نام دیگر گنجانده شده) از،به منظور دستیابی به اعضای فضای نام
مثال
namespace Business
{
public class House
{
public string propertyNumber;
public decimal price;
}
namespace Dealership
{
public class Car
{
public decimal price;
}
}
}
public class Exercise
{
static void Main()
{
Business.House property = new Business.House();
property.propertyNumber = "D294FF";
property.price = 425880;
Business.Dealership.Car vehicle = new Business.Dealership.Car();
vehicle.price = 38425.50M;
}
}
277
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
به همین ترتیب می توان هر تعداد فضای نام که الزم می دانید داخل فضای نام دیگر قرار دهید.
شیوه ی دیگری که با آن می توان فضای نامی را در فضای نام دیگر دخیل کرد ،این است که به ایجاد فضای نام جدید بپردازید .پس از اسم
فضای نام ،عملگر نقطه و به دنبال آن اسم فضای نام دوم (فضای نامی که داخل فضای نام دیگر قرار می گیرد) را تایپ کنید.
namespace Geometry.Quadrilaterals
{
}
پس از ایجاد فضای نام مورد نظر ،شما می توانید با تعریف کردن فضای نام به محتوای آن دسترسی داشته باشید.
مثال
namespace Geometry.Quadrilaterals
{
public class Square
{
;public double side
}
}
public class Exercise
{
)(public static void Main
{
;)(Geometry.Quadrilaterals.Square sqr = new Geometry.Quadrilaterals.Square
;sqr.side = 25.85
}
}
به همین صورت شما می توانید چند NameSpaceرا داخل یک NameSpaceمانند زیر بگنجانید:
namespace Geometry.Quadrilaterals
{
}
namespace Geometry.Rounds
{
}
به همین ترتیب ،می توان هر تعداد فضای نام که مورد نیاز است داخل فضای نام دیگر ایجاد کرد .پس از گنجاندن فضای نام (در فضای نام
دیگر) برای دسترسی داشتن به محتوای آن ،می توانید اسم انتخابی آن را تعریف کنید.
مثال
278
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
namespace Geometry.Quadrilaterals
{
public class Square
{
public double side;
}
}
namespace Geometry.Volumes.Elliptic
{
public class Cylinder
{
public double radius;
}
}
public class Exercise
{
public static void Main()
{
Geometry.Quadrilaterals.Square sqr = new Geometry.Quadrilaterals.Square();
Geometry.Volumes.Elliptic.Cylinder cyl = new Geometry.Volumes.Elliptic.Cylinder();
sqr.side = 25.85;
cyl.radius = 36.85;
}
}
. کلیک کنید تا به فایل آن دست پیدا کرده و آن را به صورت زیر تغییر دهیدRecords.cs ) روی (لیبل.8
namespace Store
{
namespace Inventory
{
public class StoreItem
{
public int itemNumber;
public string itemName;
public decimal unitPrice;
}
}
namespace Personel
{
namespace PayrollRecords
{
public class Employee
{
public string firstName;
public string lastName;
279
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;public decimal HourlySalary
}
public class Contractors
{
;public string FullName
;public int ContractStatus
}
}
}
}
;using Supply
;using Store.Inventory
public class DepartmentStore
{
)(static int Main
{
. . . No Change
;return 0
}
}
برخالف متدهای کالس ،نمی توان اسم کالس را داخل فایل سربارگذاری ( )overloadکرد .به عبارت دیگر ،نمی توان دو کالس هم نام در
یک محدوده ( )scopeایجاد کرد .یکی از گزینه های پیش رو این است که هر فضای نامی را داخل کالس خودش قرار دهید.
مثال
namespace Arithmetic
{
public class Numbers
{
;public int value
}
}
namespace Algebra
{
public class Numbers
{
;public int value
280
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
}
}
دو کالس داشت که یکی، می توان در یک فضای نام، به عبارتی مختصر. مطرح می گرددgenerics گزینه ی دیگری نیز وجود دارد که در مبحث
مثال
namespace Arithmetic
{
public class Numbers
{
public int value;
}
public class Numbers<T>
{
public int value;
}
}
281
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
public string country;
public string companyName;
public string contactName;
public string contactPhone;
public string webSite;
}
}
، برای حل این مسئله.دسترسی به فضای نامی که آن فضای نام خود در دل فضای نام های دیگر گنجانده شده بسیار دشوار و زمان بر است
می توان از نام مستعار یک فضای نام بهره جست ( که در واقع میانبری برای دست یافتن به فضای نامی است که در دل فضای نامی دیگر جای
. را تایپ کنیدnamespace و،= عالمت، و به دنبال آن اسم دلخواهusing کلیدواژه ی، برای ایجاد نام مستعار.)گرفته
282
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
si.itemName = "Merino Crew Neck Cardigan";
si.unitPrice = 80.00M;
System.Console.WriteLine("Manufacturer Information");
System.Console.Write("Company Name: ");
System.Console.WriteLine(dealer.companyName);
System.Console.Write("Contact Name: ");
System.Console.WriteLine(dealer.contactName);
System.Console.Write("Contact Phone: ");
System.Console.WriteLine(dealer.contactPhone);
System.Console.WriteLine("---------------------------------------");
System.Console.WriteLine("Store Inventory");
System.Console.Write("Item #: ");
System.Console.WriteLine(si.itemNumber);
System.Console.Write("Item Name: ");
System.Console.WriteLine(si.itemName);
System.Console.Write("Unit Price: ");
System.Console.WriteLine(si.unitPrice);
System.Console.WriteLine("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
System.Console.ReadKey();
return 0;
}
}
.چنانچه کدی از قبل آماده دارید و می خواهید آن را داخل یک فضای نام قرار دهید
اکنون به انتهای بخش کد. و به دنبال آن یک اسم و عالمت } را درج کنیدnamespace ،روی باالترین قسمت کد نویسی کلیک کرده
را انتخابSurround With... سپس. روی گزینه ی انتخابی کلیک کنید،کدی را که می خواهید در فضای نام دخیل کنید انتخاب کرده
283
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
تغییر اسم فضای نام
فرایند تغییر اسم فضای نام ،از همان منطقی که برای تغییر اسم متغیرها،کالس ها ،و متدها تعریف کردیم پیروی می کند .اگر نمی خواهید
خود به صورت دستی اسم را تغییر دهید ،می توانید از Code Editorاستفاده کنید .برای این منظور
در ،Code Editorابتدا اسم فضای نام مورد نظر را پیدا کنید .سپس روی پیکان تَگ فضای نام مذکور کلیک کرده و یک گزینه را از
روی اسم راست کلیک کرده ،سپس گزینه ی Rename...را انتخاب کنید.
برنامه ی NET Framework.کتابخانه ای بسیار غنی و گسترده است .مزیت برجسته ی آن ،مجموعه ی بزرگ و گسترده ی کالس های آن
است .برای سازمان دهی این کالس ها ،برنامه ی NET Framework.فضاهای نامی متعددی ایجاد کرده و به کار می برد .از هر فضای نامی به
وجود آمده به منظور ایجاد یک مجموعه کالس (های) منحصر به فرد استفاده می شود.
Microsoft Visual Studioپنجره ی Object Browserرا برای بررسی و پویش فضاهای نامی برنامه ی NET Framework.ارائه می دهد.
284
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
فهرست گزینه ی اصلی را باز کرده ،به View -> Object Browserمراجعه کنید.
285
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
پنجره ی سمت چپ فهرستی از کتابخانه های موجود را نمایش می دهد .همان طور که در تصویر فوق مشاهده می کنید برخی از گره ها
( )nodesاعدادی داخل عالمت ][ دارند .این اعداد نشانگر نسخه ی NET Framework.هستند .چنانچه گره های مختلف ولی هم نام دارای
][ بودند ،بدانید که کتابخانه ی مورد نظر در نسخه های متفاوت NET Framework.ایجاد و به روز رسانی شده .برای مثال4.0.0.0 ،
به این خاطر که اغلب کتابخانه های مذکور فضاهای نام متعددی دارند ،هر گره مجهز به دکمه ی +می باشد .برای باز کردن گره ،کافی است
روی +کلیک کنید .پس از باز کردن کتابخانه مورد نظر ،فضاهای نامی داخل آن به صورت گره پدیدار می شوند .به دلیل این که اکثر فضاهای
نام حاوی چندین (بیش از یک کالس) کالس هستند ،هر فضای نام مجهز به دکمه ی +می باشد .همان طور که پیش تر ذکر شد برای باز کردن
آن ،باید روی +کلیک کنید .پس از باز کردن فضای نام دلخواه ،فهرست کالس های آن ظاهر می شود .برای مشاهده ی اعضای یک کالس (در
پنجره ی سمت چپ) روی اسم کالس مورد نظر کلیک کنید.
286
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
برای مشاهده ی توصیفی از یک عضو کالس (در پنجره ی باالیی سمت راست) ،روی آن عضو کلیک کنید .حال ،پنجره ی پایینی سمت راست
پرکاربرد ترین فضای نام در System ،NET Framework.نام دارد .برای استفاده از فضای نام Systemباید آن را داخل یک متد تایپ
کنید.
مثال
287
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
{
static int Main()
{
System.Console.WriteLine("The wonderful world of C# programming");
return 0;
}
}
. را به کار برد:: و عملگرglobal کلید واژه ی،System همچنین می توان پیش از
از همین روش برای اشاره و دسترسی به فضای. استفاده می شودusing از کلید واژه ی،پیش تر ذکر شد که برای دستیابی به یک فضای نام
مثال
using System;
public class Exercise
{
static int Main()
{
System.Console.WriteLine("The wonderful world of C# programming");
return 0;
}
}
using global::System
public class Exercise
{
static int Main()
{
System.Console.WriteLine("The wonderful world of C# programming");
return 0;
}
}
288
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
پس ازاین که using Systemیا global::Systemرا به کار بردید ،می توانید کلید واژه ی Systemرا در بدنه ی تابع ( )functionحذف
کنید.
مثال
;using System
public class Exercise
{
)(static int Main
{
;)"Console.WriteLine("The wonderful world of C# programming
;return 0
}
}
.NET Frameworkلیست بلند باالیی از فضاهای نام فراهم می کند .در این مبحث به همگی آن ها نمی پردازیم ،ولی در جایی که باید از
کالس ها استفاده کنیم ،خواهیم گفت هر کالس در کدام فضای نام قرار می گیرد.
می توان با انتخاب گزینه ی Add New Classاز فهرست گزینه ی اصلی پنجره ی Solution Explorerیا ،Class Viewکالسی جدید ایجاد
کرد .در صورت استفاده از روش باال visual studioفضاهای نام دیگری نیز اضافه می کند .در حال حاضر ،کد را همان گونه هست (بدون
تمامی نوع داده هایی که تا کنون به کار برده ایم در NET Framework.در قالب (توسط) کالس ها نشان داده می شوند .به عبارت دیگر،
نوع داده های مذکور خود مجهز به متد هستند .کالس های مزبور در فضای نام Systemتعریف می شوند .کالس های نوع داده های نام برده
289
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
C# Data Type Equivalent.NET Class C# Data Type Equivalent.NET Class
)C#
decimal Decimal
به عبارت دیگر ،چنانچه تمایلی به استفاده از نوع داده هایی که تا کنون معرفی کرده ایم ندارید ،می توانید از کالسی که در فضای نام
Systemتعریف شده استفاده کنید .به منظور استفاده از کالس های گفته شده ،کافی است اسم آن را تایپ کنید.
مثال
class Operations
{
)(public double Addition
{
;Double a
;Double b
;Double c
;a = 128.76
;b = 5044.52
;c = a + b
290
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;return c
}
}
به دلیل این که نوع داده ها به عنوان (در قالب) کالس تعریف می شوند ،خود مجهز به متد هستند .یکی از متدهایی که همگی آن ها دارند
ToStringنامیده می شود .همان طور که از اسم آن پیدا است ،این متد به منظور تبدیل یک مقدار به رشته به کار می رود.
.NET Frameworkکتابخانه ای عظیم متشکل از کالس های گوناگون و مختلف هست که هر یک برای منظور خاصی به کار می رود .درباره ی
برخی از کالس های نام برده در مباحث پیش رو بحث خواهیم کرد .با این وجود ،چنانچه NET Framework.قابلیت مورد نیاز را فراهم نکرد،
شما می توانید کتابخانه ی دلخواه خود را ایجاد کرده و آن را در چندین برنامه به کار ببرید .همچنین می توانید کتابخانه ای بسازید که جنبه ی
تجاری داشته ،و بتوان آن را توزیع کرده و به فروش رساند .برای مثال ،می توان چندین کالس آماده داخل یک کتابخانه گنجاند و در دسترس
کتابخانه برنامه ای است شامل کالس ها /یا دیگر منابع مورد نیاز برنامه های دیگر .به منظور طراحی و ایجاد برنامه ی مزبور از همان روشی
استفاده می کنیم که برای برنامه های دیگر (برنامه هایی که تاکنون و در دروس پیشین ایجاد کردیم) به کار بردیم .به این خاطر که کتابخانه
یک فایل یا برنامه ی اجرایی نیست ،نیازی هم به تابع )( Mainندارد .الزم به ذکر است که کتابخانه به طور معمول پسوند dll.را به همراه
دارد (البته کتابخانه هایی از نوع دیگر نیز در Microsoft Windowsوجود دارد که پسوند آن ها lib.می باشد).
برای ایجاد برنامه ی جدید ،فهرست اصلی را باز کرده File -> New Project... ،را انتخاب کنید. .2
Save Allکلیک کنید. به منظور ذخیره ی پروژه مورد نظر ،به Standard toolbarمراجعه کرده ،اکنون روی دکمه ی .6
در صورت پذیرفتن فولدر پیشنهادی (در مکانی که کامپیوتر توصیه می کند) ،محل ذخیره سازی آن را به خاطر بسپرید .در غیر این .4
کتابخانه ممکن است از تنها یک فایل تشکیل شده باشد یا از چندین فایل متعدد (هر تعداد که الزم است) .فایلی که عضوی از یک کتابخانه
هست می تواند یک یا چند کالس دربرداشته باشد .هر کالس باید کارکردی را پیاده و فراهم کند که سرانجام برای تمامی کالس ها مفید
واقع شده و در دسترس آن ها قرار گیرد .کالس های یک کتابخانه درست مثل کالس های دیگر برنامه ها ایجاد می شوند.
برای ایجاد کتابخانه ،فهرست گزینه ی اصلی Microsoft Visual Studioرا باز کرده ،روی گزینه های File -> New Project..کلیک کنید.
در لیست میانی ،می توانید روی Empty Projectیا گزینه ی Class Libraryکلیک کنید .حال ،اسمی برای آن انتخاب کنید.
در صورت انتخاب گزینه ی Empty Projectدر پنجره ی محاوره ی ،New Projectباید پنجره ی Propertiesرا باز کرده ،سپس در Output
در هر دو صورت skeleton code ،ای در اختیار شما قرار می گیرد که می توانید باب میلتان به کارببرید.
292
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
مثال
به فهرست گزینه ی اصلی ( )main menuمراجعه کرده ،روی Project -> SaleRecord Properties...کلیک کنید. .8
در Output Type combo boxگزینه ی Class Libraryرا انتخاب کنید. .2
برای ایجاد فایل جدید ،در فهرست گزینه ی اصلی ،روی گزینه های Project -> Add New Item...کلیک کنید. .1
در لیست سمت راست Code File ،را انتخاب کنید. .5
تمامی تغییرات وارد آمده را با کلیک روی دکمه ی Save allذخیره کنید. .1
ساختن کتابخانه
به این خاطر که فایل انتخابی کتابخانه هست نه یک برنامه /فایل اجرایی ،برای ترجمه ( )compileآن
در فهرست اصلی ،می توانید روی Build -> Build ProjectNameکلیک کنید.
در پنجره ی ،Solution Explorerابتدا روی اسم پروژه ی مورد نظر راست کلیک کرده ،سپس گزینه ی Buildرا انتخاب کنید.
در پنجره ی ،Class Viewروی اسم پروژه راست کلیک کرده Build ،را انتخاب کنید.
برای ترجمه ی ( )compileکتابخانه در پنجره ی فرمان ( ،)Command Promptدستور زیر را تایپ کنید.
برای ایجاد کتابخانه ،در فهرست اصلی روی گزینه های Build -> Build Solutionکلیک کنید.
پس از ایجاد پروژه می توانید آن (پروژه ی ایجاد شده) را در همان پروژه ای که کتابخانه در آن ساخته شده به کارببرید یا آن را در پروژه ای
دیگر مورد استفاده ی خود قرار دهید ،در صورت کار با ،Microsoft Visual Studioکار خود را با ایجاد پروژه ی جدید آغاز کنید ،به منظور
استفاده از کتابخانه ،در وهله ی اول باید به آن ارجاع ( )referenceدهید ،برای این منظور
به فهرست گزینه ی اصلی مراجعه کرده ،روی Project -> Add Reference...کلیک کنید.
در پنجره ی ،Solution Explorerپس از راست کلیک روی ،Referencesگزینه ی Add Reference...را انتخاب کنید.
295
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
کلیک کرده Browse ،پدیدار می گردد ،حال می توانید روی تَبِ Add Referenceدر صورت انجام هر یک از دستورات باال ،پنجره ی محاوره
پس از پیدا کردن فولدری که کتابخانه در آن قرار دارد ،روی فولدر بیان شده کلیک کنید.
296
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
پس از انتخاب کتابخانه مورد نظر OK ،را کلیک کنید ،اکنون می توانید متدها و کالس های کتابخانه را (به همان ترتیبی که از متدها و کالس
مثال
;using System
public class Exercise
{
)(static void Main
{
;)(Algebra alg = new Algebra
;double number1 = 244.58
;double number2 = 5082.88
;)double result = alg.Addition(number1, number2
;)Console.Write(number1
;)" Console.Write(" +
;)Console.Write(number2
;)" = "(Console.Write
;)Console.WriteLine(result
;)(System.Console.ReadKey
}
}
اگر می خواهید پروژه را در پنجره ی فرمان ( )Command Promptترجمه ( )compileکنید ،دستوری مشابه به دستور زیر را تایپ کنید.
برای راه اندازی پروژه ی جدید ،در فهرست اصلی روی File -> New Project...کلیک کنید. .8
297
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Add سپس گزینه ی، راست کلیک کردهReferences روی،DepartmentStore5 پایین،Solution Explorer در پنجره ی .4
. را کلیک کنیدOK .1
DepartmentStore5 -> Add -> New سپس، راست کلیک کردهDepartmentStore5 روی،Solution Explorer در پنجره ی .1
Item...
Store Inventory
Item #: 660284
Item Name: Tropical Wool Neutral Jacket
298
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Unit Price: 200.00
==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Press any key to continue...
برخالف خیلی از زبان های برنامه نویسی دیگر مثل C++ :یا ) ،(Object) Pascal (Delphiزبان C#فاقد کتابخانه ی توکار (متعلق به خود)
می باشد .الزم به ذکر است که این فقدان به معنای کارایی و قابلیت کمتر و ضعف برنامه C#نیست .بلکه زبان C#به دلیل همین انعطاف
پذیری باالیی که دارد ،می تواند از کتابخانه های دیگر زبان های برنامه نویسی نهایت استفاده را ببرد.
در حقیقت C#فقط ی ک کتابخانه ی کوچک دارد متشکل از تنها چند کالس ناچیز که اغلب به کار نمی اید .اسم این کتابخانه
Microsoft.CSharp.dllمی باشد .البته در نسخه ی تازه منتشر شده ی ،)C# 4.0( C#کتابخانه به روزرسانی شده و نوع داده ی جدیدی
اگر برنامه ی کاربردی کنسول ( )console applicationایجاد کنید Microsoft Visual Studio ،به صورت خودکار کتابخانه ی
Microsoft.CSharp.dllرا به برنامه ی شما اضافه می کند .حال اگر پروژه ی خالی ایجاد کرده اید ولی در هر صورت می خواهید از این
کتابخانه استفاده کنید ،کافی است با مراجعه به پنجره ی محاوره ،Add Referenceکتابخانه ی بیان شده را به پروژه ی خود اضافه کنید.
در دروس پیشین ،با نوع داده های مختلفی از decimal، double، float، int،shortو stringآشنا شدیم .گفته شد که نوع داده ی انتخابی
به compilerخبر می دهد چه مقدار حافظه برای متغیر مورد نظر تخصیص یابد .در واقع ،چنانچه (در )Code Editorنشانگر موس را روی نوع
داده مورد نظر قرار دهید ،راهنمای ابزار ( )tool tipای نمایان می شود که مقدار حافظه ی اشغال شده توسط متغیر را نشان می دهد.
299
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
این هم گفته شد که اگر تمایل ندارید نوع داده ای ،هنگام تعریف متغیر ،مشخص کنید می توانید ازکلیدواژه ی varاستفاده کنید اما باید
متغیر را پیش از به کاربردن مقداردهی اولیه کنید .پس از مقداردهی اولیه ی متغیر compiler ،بر مبنای برآوردش از مقداری که به متغیر
اختصاص د اده اید ،حافظه رزرو می کند .هنگام استفاده از متغیر ،چنانچه نشانگر موس را روی آن قرار دهید Code Editor ،نوع داده ای که
300
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
در برخی حاالت ،شما از مقدار فضای موردنیاز متغیر (تا زمانی که به آن نیاز پیدا نکرده و از آن استفاده نکرده اید) مطلع نیستید .به عبارت
دیگر compiler ،را با مسائلی همچون تدارکات متغیر (مثل اینکه به چه قدر حافظه نیاز دارد) درگیر نمی کنیم تا زمانی که عملیاتی که به
متغیر نیاز دارد به آن (متغیر) دسترسی پیدا کند .به چنین متغیری ،متغیر پویا یا داینامیک گفته می شود.
مثال
برخالف متغیری که با کلیدواژه ی varتعریف می شود ،الزم نیست متغیر پویا را حین تعریف (آن) مقداردهی اولیه کنید .به هر حال ،باید
مقداری به آن اختصاص دهید (ترجیحاً پیش از به کار بردن آن) .هنگامی که مقداری به متغیر پویا اختصاص می دهید compiler ،بررسی
نمی کند چه مقدار حافظه مناسب یا مورد نیاز متغیر مزبور است .چنانچه نشانگر موس را روی متغیر قرار دهید Code Editor ،تنها نوع متغیر
301
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
متغیر پویا اغلب زمانی استفاده می شود که پروژه ی شما نیاز به برقراری ارتباط با برنامه ی کاربردی ( )applicationخارجی دارد و از مقادیر
آن برنامه استفاده می کند .نمونه ی آن Microsoft Word documentیا صفحه گسترده ی Microsoft Excelاست که توسط زبان C#
برای ایجاد پروژه ی جدید ،در فهرست اصلی روی File -> New Project...کلیک کنید. .8
.4در پنجره ی ،Solution Explorerروی DepartmentStore7راست کلیک کرده سپس >DepartmentStore7 -> Add -
به فهرست گزینه ی اصلی مراجعه کرده و گزینه های Project -> Add Reference...را انتخاب کنید. .4
302
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
. را کلیک کنیدOK .82
using System;
public class Payroll
{
static int Main()
{
dynamic employeeName;
dynamic hourlySalary, weeklyTime, weeklySalary;
employeeName = "Patricia Katts";
hourlySalary = 22.75;
weeklyTime = 38.50;
weeklySalary = hourlySalary * weeklyTime;
Console.WriteLine("==============================");
Console.WriteLine("Payroll Summary");
Console.WriteLine("------------------------------");
Console.Write("Employee Name: ");
Console.WriteLine(employeeName);
303
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;)" Console.Write("Hourly Salary:
;)Console.WriteLine(hourlySalary
;)" Console.Write("Weekly Time:
;)Console.WriteLine(weeklyTime
;)" Console.Write("Weekly Salary:
;)Console.WriteLine(weeklySalary
;)"=============================="(Console.WriteLine
;)(System.Console.ReadKey
;return 0
}
}
==============================
Payroll Summary
------------------------------
Employee Name: Patricia Katts
Hourly Salary: 22.75
Weekly Time: 38.5
Weekly Salary: 875.875
==============================
قابلیت همکاری
یکی از اهداف اصلی که در .NETدنبال می شود ،فراهم کردن امکان همکاری بین زبان های مختلف است
(مانند به اشتراک گذاری کد) .یکی از روش هایی که این امر را امکان پذیر می کند ،توانایی استفاده از
قابلیت های یک زبان در برنامه ای است که توسط زبان برنامه نویسی دیگر نوشته شده است.
به طور مثال ،می توان از (کتابخانه ی غنی) توابع Visual Basicدر یک برنامه ی کاربردی C#بهره جست.
به این خاطر که هیچ کتابخانه ای صد در صد کامل نیست ،ممکن است به قابلیتی نیاز پیدا کنید که در خود
زبان انتخابی (زبانی که هم اکنون برای برنامه نویسی به کار می برید) موجود نباشد.
همچنین ممکن است با تیم برنامه نویسی همکاری داشته باشید که از زبان های برنامه نویسی مختلفی
استفاده کرده و توابع یا عملیات پیچیده ای نوشته باشند که شما مجبور به استفاده در برنامه ی خود
هستید.
304
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
کتابخانه ی win32
اصل سیستم عامل مایکروسافت ویندوز در محیط زبان Cنوشته شده است (زبان والدِ C# ،C++و.)Java
برای ایجاد امکان برنامه نویسی (ایجاد برنامه های کاربردی) ،مایکروسافت کتابخانه ای به نام Win32
را منتشر کرد .کت ابخانه ی نام برده متشکل از یک سری تابع و کالس هست که از قبل استفاده می کردید.
امروزه ،شما دیگر برای ایجاد برنامه ی کاربردی ویندوز ملزوم به استفاده از Win32نیستید.
با این وجود ،هنوز شمار زیادی از عملیاتی که ملزم با انجام آن ها در برنامه کاربردی ویندوز هستید
تنها در Win32موجود هستند .خوشبختانه ،به کاربردن تعداد زیادی از این توابع در زبان C#دشوار
مثال
;using System
;using System.Runtime.InteropServices
class Program
{
])"[DllImport("Kernel32.dll
;)public static extern bool SetConsoleTitle(string strMessage
)(static void Main
{
;)"SetConsoleTitle("C# Programming
}
}
در زمان های قبل ایجاد یک کتابخانه (به خصوص در )C++کار بسیار دشواری بود .خوشبختانه ،برنامه ی Microsoft Visual C++اکنون
ایجاد کتابخانه را به فرایندی فوق العاده ساده تبدیل کرده .برای این منظور ،ابتدا باید پنجره ی محاوره ای New Projectرا باز کنید .پس از
انتخاب ،Visual C++در لیست میانی ،روی گزینه ی Class Libraryکلیک کرده و اسم آن را مشخص کنید .حال می توانید در بدنه ی فایل،
مثال
// Business.h
305
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
#pragma once
;using namespace System
public ref class Finance
{
public:
double CalculateDiscount(double MarkedPrice,
)double DiscountRate
{
;return MarkedPrice * DiscountRate / 100
}
;}
پس از آماده شدن پروژه ،باید به ساختن آن پرداخت (فهرست گزینه ی اصلی .)Build -> Build Business ،در نتیجه compiler ،فایلی با
ایجاد کتابخانه در محیط C++بسیار آسان است .برای استفاده از آن ،قواعدی هست که باید رعایت شود .در وهله ی اول ،باید مطمئن شوید
که پروژه ی شما می تواند کتابخانه ی موردنظر را پیدا کند .آسان ترین روش برای این منظور ،کپی کردن فایل dllو جای گذاری آن در فولدر
دربردارنده ی فایل اجرایی ( )executableپروژه است .این کار را می توان به طور مستقیم (از طریق )Microsoft Visual Studioبا وارد
306
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
پیش از کتابخانه (پیش از. را در پروژه ی خود دخیل کنیدSystem.Runtime.InteropServices الزم است فضای نام
)string( ) اسم کتابخانه را که در قالب رشتهAttribute( این ویژگی. را وارد کنیدDllImport صفت مشخصه ی،)("Business.dll")
مثال
using System;
using System.Runtime.InteropServices;
using Business;
class Exercise
{
[DllImport("Business.dll")]
public static extern double CalculateDiscount(double price, double discount);
static int Main()
{
Finance fin = new Finance();
double markedPrice = 275.50;
double discountRate = 25.00; // %
double discountAmount = fin.CalculateDiscount(markedPrice,discountDate);
double netPrice = markedPrice - discountAmount);
Console.Write("Marked Price: ");
Console.WriteLine("markedPrice");
Console.Write("Discount Rate: ");
Console.WriteLine("discountRate / 100");
Console.Write("Discount Amount: ");
Console.WriteLine("discountAmount");
Console.Write("Net Price: ");
Console.WriteLine("netPrice");
return 0;
}
}
استاتیک
باید در وهله ی اول متغیر آن را تعریف،Main() در متدBook برای دسترسی به کالس.Book تصور کنید کالسی به وجود آورده اید به نام
به همین شکل می توان هر تعداد نمونه که مورد نیاز است از کالس. نمونه ای از آن کالس نیز اطالق می گردد، متغیر تعریف شده ی کالس.کنید
307
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
public short yearPublished;
public int numberOfPages;
public char coverType;
}
public class Exercise
{
static int Main()
{
var written = new Book();
var bought = new Book();
return 0;
}
}
ولی باید در نظر داشت که هر نمونه تنها مقدارهای خاص. دسترسی به عضوهای کالس مربوط را فراهم می کند،هر یک از نمونه های گفته شده
. توجه خود را به مثال زیر جلب کنید.اعضای نمونه ی مختص به خود را نگه می دارد
Book Characteristics
Title: Psychology and Human Evolution
Author: Jeannot Lamm
Year: 1996
Pages: 872
Cover: H
Book Characteristics
Title: C# First Step
Author: Alexandra Nyango
Year: 2004
Pages: 604
Cover: P
کلیه ی متغیرهای عضو و متدهای کالس که تاکنون به کار برده ایم تحت عنوان متغیر نمونه یا instance variableتعریف می شوند زیرا ،به
منظور دسترسی به آن ها ملزوم به تعریف نمونه ی کالس در کالسی دیگر هستید (منظور کالسی است که می خواهید در آن به متغیر نمونه
می توانید متغیری در برنامه ی کاربردی خود ،صرفنظر از اینکه کدام نمونه از (یک) شی را برای این منظور استفاده می کنید ،تعریف کرده و به
برای تعریف متغیر (عضو یک) کالس به عنوان ایستا ،باید کلید واژه ی staticرا در سمت چپ آن تایپ کنید .به مثال زیر توجه کنید.
می توانید،modifier در صورت استفاده از. (تنظیم کننده های سطح دسترسی) استفاده می شودmodifier دسترسی به فیلد های کالس از
.) را پیش یا پس از آن به کار ببردید (البته مادام اینکه قبل از نوع داده استفاده شودstatic کلیدواژه ی
مثال
این کار مستلزم.) باید ابتدا مکان به کار گیری آن را تعریف کنید ( این که کجا می خواهید از آن استفاده کنید،برای دسترسی به متغیر ایستا
مثال
310
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Console.WriteLine(first.Pages);
Console.Write("Cover: ");
Console.WriteLine(first.coverType);
var second = new Book();
Book.title = "C# First Step";
Book.author = "Alexandra Nyango";
second.yearPublished = 2004;
second.pages = 604;
second.coverType = 'P';
Console.WriteLine("Book Characteristics");
Console.Write("Title: ");
Console.WriteLine(Book.title);
Console.Write("Author: ");
Console.WriteLine(Book.author);
Console.Write("Year: ");
Console.WriteLine(second.yearPublished);
Console.Write("Pages: ");
Console.WriteLine(second.Pages);
Console.Write("Cover: ");
Console.WriteLine(second.coverType);
Console.ReadKey();
return 0;
}
}
دیگر نیازی به نمونه ی کالس برای دسترسی به،همان طور که در مثال باال مشاهده می کنید زمانی که متغیری به عنوان ایستا تعریف می شود
دیگر الزم نیست برای، بر این اساس چنانچه همه ی اعضای کالس را به عنوان ایستا معرفی کنید.آن متغیر (عضو) از بیرون کالس نیست
) بدون استفاده از نمونه یBook (از کالسTitle وAuthor فلیدهای، در مثال ذیل.دسترسی به آن ها متغیری از کالسشان تعریف کنید
using System;
using System;
public class Book
{
public static string title;
static public string author;
}
public class Exercise
{
static void Main()
{
Book.title = "Psychology and Human Evolution";
Book.author = "Jeannot Lamm";
Console.WriteLine("Book Characteristics");
Console.WriteLine("Title: ");
Console.WriteLine(Book.title);
311
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;)" Console.WriteLine("Author:
;)Console.WriteLine(Book.author
;"Book.title = "C# First Step
;"Book.author = "Alexandra Miles
;)"Console.WriteLine("Book Characteristics
;)" Console.WriteLine("Title:
;)Console.WriteLine(Book.title
;)" Console.WriteLine("Author:
;)Console.WriteLine(Book.author
;)(Console.ReadKey
}
}
به طور مشابه ،می توان ترکیبی از متغیرهای ایستا و غیر ایستا برای کالس تعریف کرد .فقط به خاطر داشته باشید که برای دسترسی به متغیر
ایستا ،شما ملزم به تعریف یا ایجاد نمونه ای از کالس نیستید .در حالی که به منظور دسترسی به متغیر غیر ایستا ،باید متغیری برای کالس
متدهای ایستا
درست مشابه متغیر عضو ،می توان متد ک الس را به عنوان ایستا معرفی کرد .متد مذکور قابلیت دسترسی به تمامی اعضای کالس را دارد (البته
سطح دسترسی متد به اعضای کالس بستگی به این دارد که متغیر عضو چگونه تعریف شده باشد) .به یاد داشته باشید که اعضای کالس می
توانند ایستا یا غیر ایستا باشند.
برای تعریف متدی به عنوان ایستا ،کافی است کلیدواژه ی staticرا سمت چپ آن تایپ کنید.
مثال
public class Book
{
)(static void CreateBook
{
}
}
متد ایستا همچنین اجازه ی استفاده از تنظیم کننده ی سطح دسترسی ( )access modifierرا دارد .می توان کلیدواژه ی staticرا پیش یا
پس از تنظیم کننده ی سطح دسترسی قرار دهید.
مثال
;using System
public class Book
{
;private static string title
312
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
static private string author;
private static int pages;
static private double price;
static public void CreateBook()
{
title = "Psychology and Human Evolution";
author = "Jeannot Lamm";
pages = 472;
price = 24.95;
}
internal static void ShowBook()
{
Console.WriteLine("Book Characteristics");
Console.Write("Title: ");
Console.WriteLine(Book.title);
Console.Write("Author: ");
Console.WriteLine(Book.author);
Console.Write("Pages: ");
Console.WriteLine(pages);
Console.Write("Price: ");
Console.WriteLine(price);
Console.ReadKey();
}
public static int Main()
{
return 0;
}
}
استفاده از متد ایستا نیز بستگی به مکان دسترسی آن دارد (منظور جایی است که متد،) ذکر شدstatic field( همان طور که برای فیلد ایستا
می توان از اسم عضو ایستا استفاده، به منظور دستیابی به عضو ایستا از طریق متد ایستای همان کالس.)ایستا در آن قابل دسترس است
.کرد
مثال
using System;
public class Book
{
static string title;
static string author;
static int pages;
static double price;
static void CreateBook()
{
title = "Psychology and Human Evolution";
author = "Jeannot Lamm";
pages = 472;
price = 24.95;
}
313
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
static void ShowBook()
{
Console.WriteLine("Book Characteristics");
Console.Write("Title: ");
Console.WriteLine(Book.title);
Console.Write("Author: ");
Console.WriteLine(Book.author);
Console.Write("Pages: ");
Console.WriteLine(pages);
Console.Write("Price: ");
Console.WriteLine(price);
Console.ReadKey();
}
public static int Main()
{
CreateBook();
ShowBook();
return 0;
}
}
. به مثال های زیر توجه کنید. عضو مورد نظر را را تایپ کرد،همچنین می توان ابتدا اسم کالس و به دنبال آن نقطه
using System;
public class Book
{
. . . No Change
static void CreateBook()
{
. . . No Change
}
static void ShowBook()
{
. . . No Change
}
public static int Main()
{
Book.CreateBook();
Book.ShowBook();
return 0;
314
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
}
}
به منظور دسترسی به عضوی ایستا از بیرون کالس ،ابتدا اسم کالس ،به دنبال آن نقطه و عضو موردنظر را تایپ کنید .نظر خود را به مثال های
زیر جلب کنید.
;using System
public class Book
{
. . . No Change
)(static public void CreateBook
{
. . . No Change
}
)(internal static void ShowBook
{
. . . No Change
}
}
public class Exercise
{
)(public static int Main
{
;)(Book.CreateBook
;)(Book.ShowBook
;return 0
}
}
کالس هم می تواند درست مثل متد و متغیر ایستا باشد .کالس ایستا کالسی هست که برای دسترسی به اعضای آن به هیچ وجه نیازی به
نمونه ی کالس نیست .به عبارتی روشن تر ،دسترسی به اعضای کالس ایستا فقط و فقط با استفاده از اسم کالس (مستقیم از خود کالس) و
عملگر نقطه امکان پذیر می باشد.
کالسی هست که اعضای آن باید ایستا باشند (در قالب ایستا ایجاد شوند) .به عبارت دیگر ،نمی توان عضوی غیر ایستا ( )non-staticبه
کالسی ایستا افزود :کلیه ی اعضا به استثنای ثابت ها ،باید ایستا باشند.
برای ایجاد کالسی ایستا ،کلیدواژه ی staticرا پیش از کلیدواژه ی classبه کار ببرید.
مثال
;using System
public static class Square
315
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
{
;public static double side
)(public static double Perimeter
{
;return side * 4
}
)(public static double Area
{
;return side * side
}
}
public class Exercise
{
)(public static int Main
{
;Square.Side = 36.84
;)"Console.WriteLine("Square Characteristics
;)" Console.Write("Side:
;)Console.WriteLine(Square.side
;)" Console.Write("Perimeter:
;))(Console.WriteLine(Square.Perimeter
;)" Console.Write("Area:
;))(Console.WriteLine(Square.Area
;)(Console.ReadKey
;return 0
}
}
نتیجه ی زیر را به دست می دهد.
Square Characteristics
Side: 36.84
Perimeter: 147.36
Area: 1357.1856
Press any key to continue . . .
می توان constructorرا مانند دیگر توابع معمول در Static ،C#تعریف کرد .برای این منظور قوانینی وجود دارد که می بایست از آن ها
پیروی کنید .برای استفاده از تابع سازنده ای که staticتعریف شده (برای استفاده از آن خارج از کالس خودش نیازی به ساختن نمونه یا شی
از آن کالس نیست) ،بایستی آن را به طور صریح ایجاد نمایید (کامپایلر خودکار آن را برای شما ایجاد نمی کند).
تابع سازنده ی staticباید به عنوان constructorپیش فرض مورد استفاده قرار گیرد ،به عبارتی روشن تر باید constructorای تعریف
316
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
public class Person
{
public string firstName;
static Person()
{
}
}
: کالس مورد نظر وجود نداردstatic آن وقت دیگر امکان استفاده از فیلدها یا اعضای غیر، ایجاد کنیدstatic اگر یک تابع سازنده ی
: مثال. شما این اجازه را دارید که به فیلدهای کالس دسترسی داشته باشید،با این حال
using System;
public class Person
{
public string firstName;
static Person()
{
}
}
public class Exercise
{
public static int Main()
{
Person pers = new Person();
pers.firstName = "Gertrude";
Console.WriteLine("Personal Identification");
Console.Write("Name: ");
Console.WriteLine(pers.firstName);
Console.ReadKey();
return 0;
}
}
317
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
برای استفاده از constructorای که دارای خاصیت staticمی باشد ،چند گزینه پیشرو دارید .برای مقداردهی اولیه ی متغیر عضوی در تابع
سازنده ی ،staticابتدا الزم است یک متغیر برای آن کالس اعالن کرده ،سپس به آن متغیر عضو دسترسی پیدا کنید .مثال:
public class Person
{
;public string firstName
)(static Person
{
;)(Person pers = new Person
;"pers.firstName = "Gertrude
}
}
در واقع ،یکی از دالیل استفاده از تابع سازنده ی ،staticمقداردهی اولیه ی فیلدهای staticکالس و یا انجام عملیاتی است که بین تمامی
نمونه های کالس به اشتراک گذاشته می شود .بنابراین ،دیگر مورد استفاده ی تابع سازنده ،مقداردهی اولیه ی متغیرهای عضو staticآن
کالس می باشد .حال ،در زمان دسترسی به فیلدهای staticکه در تابع سازنده مقداردهی اولیه شدند ،می بینید که آن فیلدها مقادیر
از آنجایی که تابع سازنده staticمی باشد ،دسترسی به آن از طریق اعالن متغیر برای کالس مورد نظر امکان پذیر نمی باشد.
318
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
قانون دیگری که در کار با تابع سازنده ی staticباید رعایت کرد این است که نباید تحت هیچ شرایطی به آن تنظیم کننده ی سطح دسترسی
می توانید یک کالس تعریف کنید که ترکیبی از تابع سازنده ی staticو یک یا چند تابع constructorغیر staticمی باشد .مثال:
اگر چنین کالسی تعریف کرده و متغیری برای آن اعالن کنید constructor ،پیش فرضی برای آن وجود نداشته یا در حال حاضر دسترس پذیر
نمی باشد .اگر هم می خواهید متغیری برای آن تعریف کنید ،بایستی از یک constructorکه دو پارامتر ورودی می گیرد (آن متغیر را به عنوان
319
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
)(public static int Main
{
;)"Person pers = new Person("Gertrude", "Monay
;)"Console.WriteLine("Personal Identification
;)" Console.Write("First Name:
;)Console.WriteLine(pers.firstName
;)" Console.Write("Last Name:
;)Console.WriteLine(pers.lastName
;)(Console.ReadKey
;return 0
}
}
خروجی:
Personal Identification
First Name: Gertrude
Last Name: Monay
Press any key to continue . . .
با توجه به آنچه گفته شد ،تنها زمانی مجاز به تعریف constructorهستید که دلیل خوبی برای ایجاد آن داشته باشید.
مثال
;using System
public class Exercise
{
)(public static int Main
{
;int number
;return 0
}
}
در برخی موارد ،ممکن ا ست متغیری نیاز داشته باشید که توسط متدهای مختلف یک کالس قابل دسترسی و اصالح باشند .برای این منظور ،می
توانید متغیر مورد نظر را بیرون از محدوده ی (تمامی) متدها تعریف کنید .به چنین متغیری ،متغیر سراسری ( )global variableمی گویند.
همان طور که پیش تر ذکر شد ،برای ایجاد متغیر سراسری ،باید آن را (در) بیرون متدها ولی در محدوده ی کالس تعریف کرد.
320
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
مثال
using System;
public class Exercise
{
int number;
public static int Main()
{
return 0;
}
}
مثال های زیر را در نظر. از قبیل اصالح مقدار آن، می توان از هر متدی داخل کالس برای دسترسی به آن استفاده کرد،پس از تعریف متغیر
.بگیرید
using System;
public class Exercise
{
int number;
public void Modify()
{
number = 28;
}
public void Change()
{
number = 405;
}
public static int Main()
{
Exercise exo = new Exercise();
Console.Write("Number: ");
Console.WriteLine(exo.number);
exo.Modify();
Console.Write("Number: ");
Console.WriteLine(exo.number);
exo.Change();
Console.Write("Number: ");
Console.WriteLine(exo.number);
Console.ReadKey();
return 0;
}
}
.نتیجه ی زیر به دست می آید
Number: 0
Number: 28
Number: 405
Press any key to continue...
321
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
.همچنین می توان از متد برای نشان دادن مقدار متغیر سراسری بهره گرفت
using System;
public class Exercise
{
int number;
public void Modify()
{
number = 28;
}
public void Change()
{
number = 405;
}
public void Show()
{
Console.Write("Number: ");
Console.WriteLine(number);
Console.ReadKey();
}
public static int Main()
{
Exercise exo = new Exercise();
exo.Show();
exo.Modify();
exo.Show();
exo.Change();
exo.Show();
return 0;
}
}
سپس، راه حل آن تعریف متغیر خارج از محدوده ی متد است.( امکان تعریف متغیر ایستا درون متد وجود نداردC# )در،C++ درست برخالف
.می توان به متغیر مورد نظر از هر متدی که به آن نیاز دارد دست پیدا کرد
مثال
using System;
public class Exercise
{
static int number;
public void Modify()
{
number = 28;
}
public void Change()
322
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
{
;number = 405
}
)(public void Show
{
;)" Console.Write("Number:
;)Console.WriteLine(number
;)(Console.ReadKey
}
)(public static int Main
{
;)(Exercise exo = new Exercise
;)(exo.Show
;)(exo.Modify
;)(exo.Show
;)(exo.Change
;)(exo.Show
;return 0
}
}
ثابت ها
برخالف زبان های ،C/C++در ،C#امکان ایجاد متغیر ثابت ( )constant variableدر کالس وجود دارد .همان طور که در درس 1بحث کردیم
برای تعریف متغیر ثابت ،کافی است کلید واژه ی constرا در سمت چپ متغیر مربوطه تایپ کنید .توجه داشته باشید که هنگام تعریف یک
ثابت ،باید آن را با مقدار مناسب و مقتضی مقداردهی اولیه کرد.
نمونه ی this
چنانچه کالس ی حاوی فیلد و متد باشد ،عضوهای فیلد (غیر ایستا) خودکار در دسترس متدهای کالس مورد نظر قرار می گیرند ،حتی آن دسته
فیلدهایی که خصوصی ( )privateهستند .هنگام دسترسی به فیلد یا متدی از متد دیگر (همان) کالس ،برای این که نشان دهیم عضوی که
خواهان دسترسی به آن هستیم متعلق به همین کالس است ،از شی ای به نام thisو به دنبال آن عملگر نقطه پیش از متد یا فیلد مورد نظر
استفاده می کنیم (نمونه ی thisدر واقع ارجاع به کالس جاری می باشد).
مثال
323
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
{
;)"=Console.WriteLine("=//= Altair Realtors =//
; ;)"Console.WriteLine("Properties Inventory
;)" Console.Write("Property Type:
;)Console.WriteLine(this.propertyType
;)" Console.Write("Bedrooms:
;)Console.WriteLine(this.bedrooms
;)(Console.ReadKey
}
}
public class Exercise
{
)(public static int Main
{
;)(House h = new House
;)(h.Display
;return 0
}
}
هنگام بکارگیری کلید واژه ی thisپیروی از قوانین زیر الزامی می باشد.شی thisهیچگاه تعریف نمی شود ،بلکه هنگام ایجاد کالس خودکار به
از thisنمی توان در کالس Aاستفاده کرد ،سپس از آن برای دسترسی پیدا کردن به عضوی از کالس Bکمک گرفت.
زبان ،C#برخالف زبان های Visual Basic ،Pascal ،C++ ،Cو ،Javaاز ریاضی پشتیبانی نمی کند (امکان پشتیبانی توکار برای ریاضی
ندارد) و مجبور است این قابلیت را از کتابخانه ها یا زبان های دیگر وام بگیرد.
برای انجام ساده ترین عملیات جبری و هندسی در ،C#می توانید از متدهای کالس Math.NET Frameworkاستفاده کنید .همچنین می
توان از کتابخانه ی بسیار غنی توابع visual basicبرای این منظور کمک گرفت .کتابخانه ی باال یکی از گسترده ترین مجموعه توابع حوضه
راه های مختلفی برای تعریف متغیر (از) نوع عددی وجود دارد که نمونه های آن را زیر مشاهده می کنید.
;using System
class Program
{
324
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
)(static int Main
{
;short sNumber
;int iNumber
;double dNumber
;decimal mNumber
;return 0
}
}
عالمت اعداد
یکی از قوانین پایه و اولیه ی C#این است که پس از تعریف متغیر و پیش از به کار بردن آن ،متغیر باید مقداردهی اولیه شده باشد .نمونه
;using System
class Program
{
)(static int Main
{
;short sNumber = 225
;int iNumber = -847779
;double dNumber = 9710.275D
;decimal mNumber = 35292742.884295M
;)Console.WriteLine("Short Integer: {0}", sNumber
;)Console.WriteLine("Integral Number: {0}", iNumber
;)Console.WriteLine("Double-Precision: {0}", dNumber
;)Console.WriteLine("Extended Precision: {0}", mNumber
;)(Console.ReadKey
;return 0
}
}
هنگام مقداردهی اولیه متغیر با یک ثابت ( ،)constantدر واقع مشخص می کنید که متغیر نام برده مثبت باشد یا منفی و یا 2که سرانجام
عالمت آن متغیر محسوب می شود .در صورتی که مقدار متغیر را از راه دیگری به دست آورید ،ممکن است عالمت آن مشخص نشود .اگر چه
325
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
متدی در اختیار شماmath اما کالس،می توان با استفاده از عملگر های مقایسه عالمت متغیر (مثبت یا منفی بودن عدد) را به دست آورد
) آن ها به شکل زیرsyntax( البته متد مذکور در نسخه های مختلف که دستور نحوی. را فراخواندMath.Sign() برای این منظور باید متد
. متد نتایج زیر را بر می گرداند. متغیر یا مقدار دلخواه را به عنوان آرگومان ارسال کنید،هنگام فراخوانی این متد
using System;
class Program
{
static int Main()
{
short sNumber = 225;
int iNumber = -847779;
double dNumber = 9710.275D;
decimal mNumber = 35292742.884295M;
Console.WriteLine("Number: {0} => Sign: {1}",sNumber, Math.Sign(sNumber));
Console.WriteLine("Number: {0} => Sign: {1}",iNumber, Math.Sign(iNumber));
Console.WriteLine("Number: {0} => Sign: {1}",dNumber, Math.Sign(dNumber));
Console.WriteLine("Number: {0} => Sign: {1}\n",mNumber, Math.Sign(mNumber));
Console.ReadKey();
return 0;
}
}
نتیجه
326
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Number: 225 => Sign: 1
umber: -847779 => Sign: -1
umber: 9710.275 => Sign: 1
umber: 35292742.884295 => Sign: 1
ress any key to continue...
همان طور که در درس 1تشریح کردیم ،عدد ممیز شناور از دو بخش اصلی تشکیل شده ،یک بخش عدد صحیح و یک بخش اعشار و این دو
بخش مذکور توسط نقطه ی اعشار " " .از هم جدا می شوند .در برخی موارد (عملیات) الزم است بخش عدد صحیح یک مقدار را بدست آورید.
برای به دست آوردن بخش عدد صحیح یک رقم دهدهی ،کالس Mathبا متد )( Trancateاین امکان را برای شما فراهم می کند .متد باال در
دو نسخه ی زیر اضافه بار گذاری شده و دستور نحوی آن به شرح زیر است.
هنگام فراخوانی این متد ،یک عدد یا متغیر از نوع شناور ،دابل و دهدهی به آن ارسال کنید .متد نام برده بخش عدد صحیح یک مقدار را باز
می گرداند.
مثال
;using System
class Program
{
)(static int Main
{
;float number = 225.75f
;))Console.WriteLine("The integral part of {0} is {1}\n",number, Math.Truncate(number
;)(Console.ReadKey
;return 0
}
}
327
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
The integral part of 225.75 is 225
Press any key to continue...
کمینه ی دو مقدار
متد.Min مجهز به متدی است به نامMath برای این منظور کالس.می توان کمینه ی دو مقدار را بدون نیاز به نوشتن کد (خود) بدست آورد
دستورهای. تطبیق داده شده استfloating-point یاintegral مزبور در ورژن های متفاوت اضافه بارگذاری شده که هر نسخه با نوع داده ی
: برای تعریف متغیرهای مورد نظر استفاده کردdynamic وvar به خاطر داشته باشید که می توان از کلیدواژه های
328
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
using System;
class Program
{
static int Main()
{
var number1 = 8025;
dynamic number2 = 73;
Console.WriteLine("The minimum of {0} and {1} is {2}",number1, number2, Math.Min(number1, number2));
Console.ReadKey();
return 0;
}
}
. دستور نحوی این متد به ترتیب زیر است.) فراخواندMath را (از کالسMax() می توان متد،برای بدست آوردن بیشینه ی دو عدد
using System;
class Program
{
static int Main()
{
int number1 = 8025;
int number2 = 73;
Console.WriteLine("The maximum of {0} and {1} is {2}",number1, number2, Math.Max(number1, number2));
Console.ReadKey();
return 0;
}
}
329
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
نتیجه
تبدیل مقادیر
تبدیل ضمنی
با نحوه ی تعریف نوع های رشته ،ممیز شناور و صحیح ( )integralآشنا شدیم .طریقه ی مقداردهی اولیه ی آن ها نیز تشریح شد .در صورت
داشتن برنامه ای که متغیرهای مختلفی در آن به کار گرفته شده ،می توان مقدار یک متغیر را به (مقدار) متغیر دیگری تبدیل کرد .در درس 8
با مقدار حافظه ی مورد نیاز برای ذخیره سازی متغیر هر نوع داده آشنا شدیم.
330
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
double عدد با ( Double-Precision Floating-Point Number 64 bits
long )عدد صحیح بزرگ عالمت دار( Signed Long Integer 64 bits
همان طور که در جدول باال مشاهده می کنید ،مقدار یک متغیر Byteمی تواند در مقدار حافظه ی تخصیص یافته برای متغیر intجای گیرد و
سرانجام مقدار متغیر intخود در متغیر longقابلیت ذخیره شدن را دارد .بر این اساس ،می توان مقدار یک Byteرا به متغیر intاختصاص
داد و یا متغیر intرا به متغیر .longهمچنین به این خاطر که حافظه ی رزرو شده برای متغیر intبیشتر از مقدار حافظه ی تخصیص یافته به
متغیر doubleمی باشد ،می توان متغیر اولی را به متغیر دومی اختصاص داد .مثال زیر را در نظر بگیرید.
;using System
class Program
{
)(static int Main
{
;int iNumber = 2445
;double dNumber = iNumber
;)Console.WriteLine("Number = {0}", iNumber
;)Console.WriteLine("Number = {0}\n", dNumber
;)(Console.ReadKey
;return 0
}
}
نتیجه
Number = 2445
Number = 2445
Press any key to continue...
331
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
تبدیل صریح
به دلیل مقررات و الزامات حافظه ،عکس فرایند تبدیل ضمنی امکان پذیر نمی باشد .به این خاطر که حافظه ی تخصیص یافته برای متغیر
shortکمتر از مقدار حافظه است که برای متغیر intرزرو شده ،نمی توان مقدار متغیر intرا به shortاختصاص داد .برنامه ی زیر را در نظر
بگیرید.
;using System
class Program
{
)(static int Main
{
;int iNumber = 168
;short sNumber = iNumber
;)Console.WriteLine("Number = {0}", iNumber
;)Console.WriteLine("Number = {0}\n", sNumber
;)(Console.ReadKey
;return 0
}
}
تبدیل (نوع) مقدار عبارتند از تبدیل یک مقدار به مقداری با نوع متفاوت .برای مثال ،مقداری integerداریم و می خواهیم آن مقدار مورد
نظر را در عبارتی که مقدار shortمی طلبد داشته باشیم .از این فرایند با عنوان تبدیل صریح نیز یاد می شود.
به منظور تبدیل یک مقدار یا متغیر ،نوع داده ی دلخواه را پیش از مقدار مورد نظر داخل پرانتز تایپ می کنید.
مثال
;using System
class Program
{
)(static int Main
{
;int iNumber = 168
;short sNumber = (short)iNumber
;)Console.WriteLine("Number = {0}", iNumber
332
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;)Console.WriteLine("Number = {0}\n", sNumber
;)(Console.ReadKey
;return 0
}
}
Number = 168
Number = 168
Press any key to continue...
هنگام اجرای تبدیل صریح ،توجه دقیق به نوع تبدیلی (نوعی که می خواهید تبدیل کنید) از اهمیت بسیار باالیی برخوردار است .اگر می
خواهید مقدار integerبه متغیر shortتخصیص یابد ،مقدار مورد نظر باید در 16بیت جای گیرد ،به این معنا که باید در محدوده (طیف)
عددی -32768تا 12424قرار گیرد .هر مقدار دیگری فراتر از این رنج نتیجه ی غیرقابل پیش بینی بدست خواهد داد.
مثال
;using System
class Program
{
)(static int Main
{
;int iNumber = 680044
;short sNumber = (short)iNumber
;)Console.WriteLine("Number = {0}", iNumber
;)Console.WriteLine("Number = {0}\n", sNumber
;)(Console.ReadKey
;return 0
}
}
Number = 680044
Number = 24684
Press any key to continue...
همان طور که مشاهده می کنید نتیجه ی نادرست حاصل شده.
333
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
کالس Convert
در درس 81و 12توضیح داده خواهد شد که هر نوع داده ی زبان ،C#که خود از ساختار NET Framework.اقتباس شده ،مجهز به متد
)( ToStringاست که قابلیت تبدیل مقدار نوع داده به نوع Stringرا فراهم می کند .البته به امکان تبدیل مقداری از یک نوع اولیه
( )primitive typeبه نوع اولیه ی دیگر پرداخته نشد .برای پشتیبانی از این امکان (تبدیل مقداری از یک نوع به نوع دیگر) .NET
Frameworkکالسی به نام Convertرا ارائه می دهد .کالس مذکور مجهز به چندین متد ایستا است که در این مبحث امکان تشریح همه ی
به خاطر داشته باشید که هر نوع داده ی اولیه ی C#از NET Framework.برگرفته شده است.
334
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
float Single-Precision Floating-Point Single
Point Number
Type
NET . آغاز شده و با اسمTo کالس مزبور مجهز به متد ایستایی است که نام آن با،C# به نوع داده هایConvert برای تطبیق دادن کالس
به منظور تبدیل عدد، بر این اساس. آن نوعی را می گیرد که باید تبدیل شود، ساختارش پایان می یابد و به عنوان آرگومانFramework
را به عنوان آرگومان ارسال double را فراخواند سپس متغیرToInt32() می توان متد،int به عددی از نوعdouble دهدهی از نوع
using System;
class Program
{
static int Main()
{
double dNumber = 34987.68D;
int iNumber = Convert.ToInt32(dNumber);
Console.WriteLine("Number: {0}", dNumber);
Console.WriteLine("Number: {0}", iNumber);
Console.ReadKey();
return 0;
}
}
)Arithmetic( حساب
335
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
مقادیر مطلق
سیستم عدد اعشاری ( )decimalاز منفی بی نهایت آغاز شده و به مثبت بی نهایت ختم می شود .به عبارت دیگر ،بسته به موقعیت آن ها
(این که بعد از صفر قرار می گیرند یا قبل آن) اعداد یا منفی هستند یا مثبت .البته به جز عدد 2که خنثی تلقی می گردد .در برخی عملیات
عدد حتماً باید مثبت باشد ،حتی اگر در قالب منفی ارائه شده باشد .مقدار مطلق عدد xهمان xاست ،البته در صورتی که عدد مورد نظر مثبت
باشد .چنانچه عددی منفی بود ،مقدار مطلق آن معادل مثبت آن عدد محسوب می شود .برای مثال ،مقدار مطلق 82همان 82هست ،این در
برای به دست آوردن مقدار مطلق یک عدد ،کالس Mathمجهز به متدی است به نام ،Absکه در نسخه های متعدد اضافه بار گذاری
;using System
class Program
{
)(static int Main
{
;int number = -6844
;)Console.WriteLine("Original Value = {0}", number
;))Console.WriteLine("Absolute Value = {0}\n", Math.Abs(number
;)(Console.ReadKey
;return 0
}
}
نتیجه ی زیر را بدست می دهد.
336
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
سقف (بیشترین مقدار) یک عدد
عددی با ممیز اعشار مثل 82.855را در نظر بگیرید .این عدد بین integer 12و integer 13قرار دارد.
به همین نحو ،عددی مثل -24.06را در نظر بگیرید که منفی بوده و بین اعداد -24و -25قرار می گیرد .الزم به ذکر نیست که -24بزرگ تر
است.
در علم حساب سقف یک عدد ،نزدیک ترین عدد صحیح ( )integerهست که از عدد مورد نظر بزرگ تر باشد .در مثال اول سقف ،82.855عدد
81است زیرا 81نزدیک ترین عدد صحیح بزرگتر از (یا برابر با) 82.855می باشد .حال سقف عدد -24 ،-24.06می باشد.
337
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
برای به دست آوردن سقف یک عدد ،کالس Mathمجهز به متدی است به نام Ceilingکه در دو نسخه اضافه بارگذاری شده است .دستور
متد باال به عنوان آرگومان یک متغیر عدد با ممیز اعشار می گیرد که سقف آن را باید به دست آورد.
مثال
;using System
class Program
{
)(static int Main
{
;double value1 = 155.55; double value2 = -24.06
;))Console.WriteLine("The ceiling of {0} is {1}",value1, Math.Ceiling(value1
;))Console.WriteLine("The ceiling of {0} is {1}\n",value2, Math.Ceiling(value2
;)(Console.ReadKey
;return 0
}
}
نتیجه
The ceiling of 155.55 is 156
he ceiling of -24.06 is -24
ress any key to continue...
جدا از کالس ،Mathساختار Doubleپیاده سازی خودش از متد نام برده را با دستور نحوی زیر ارائه می دهد.
دو عدد اعشاری 128.44و -36.72را در نظر بگیرید 128.44 .بین دو عدد 128و 129قرار دارد که 821عدد کوچکتر محسوب می شود- .
36.72بین دو عدد -37و -36قرار گرفته که -37عدد کوچکتر محسوب می شود .کمترین یا پایین ترین ولی در عین حال نزدیک ترین مقدار
برای بدست آوردن کمترین مقدار یک عدد کالس ،Mathمتد )( Floorرا ارائه می دهد .این متد در دو نسخه ی زیر اضافه بارگذاری می
شود.
338
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;)public static double Floor(double d
;)public static decimal Floor(decimal d
متد )( Floorمقدار مربوط را به عنوان آرگومان گرفته و عدد صحیحی ( )integerرا برمی گرداند که کوچکتر از (یا برابر با) آرگومان نام برده
باشد.
مثال
;using System
class Program
{
)(static int Main
{
;double value1 = 1540.25
;double value2 = -360.04
;))Console.WriteLine("The floor of {0} is {1}",value1, Math.Floor(value1
;))Console.WriteLine("The floor of {0} is {1}\n",value2, Math.Floor(value2
;)(Console.ReadKey
;return 0
}
}
نتیجه ی زیر حاصل می گردد.
به جای استفاده از کالس ،Mathمی توان ساختار Doubleرا به کار برد که متدی ویژه ی بدست آوردن کم ترین مقدار (کف) عدد اعشاری
توان یک عدد
ReturnValue = X y
کالس Mathبرای انجام عملیات توان ،متد Powرا در اختیار شما قرار می دهد که دستور نحوی آن به شکل زیر است :
مثال
using System;
class Program
{
static int Main()
{
const double source = 25.38;
const double exp = 3.12;
double result = Math.Pow(source, exp);
Console.WriteLine("Pow({0}, {1}) = {2}\n",source, exp, result);
Console.ReadKey();
return 0;
}
}
نتیجه
دستور نحوی آن به شکل زیر.() را برای این منظور در نظر گرفته استExp متد،Math کالس.می توان مقدار نمایی یک عدد را محاسبه کرد
.می باشد
using System;
class Program
{
static int Main()
{
Console.WriteLine("The exponential of {0} is {1}",709.78222656, Math.Exp(709.78222656));
Console.ReadKey();
return 0;
}
}
340
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
نتیجه ی زیر به دست می آید :
چنانچه مقدار xاز عدد (تقریبی) -708.395996093کوچکتر بود ،مقدار صفر برگردانده می شود و وضعیت پاریز ( )underflowرخ می
دهد .در صورتی که مقدار آرگومان xبزرگتر از عدد (تقریبی) 709.78222656بود( ،نتیجه) وضعیت سرریز ( )overflowرخ می دهد.
لگاریتم طبیعی
برای محاسبه لگاریتم طبیعی یک عدد ،می توان متد )(Math.Logرا فراخواند .متد مزبور به دو صورت زیر ارائه می شود .دستور نحوی یکی از
آن دو
;using System
class Program
{
)(static int Main
{
;double log = 12.48D
;))Console.WriteLine("Log of {0} is {1}", log, Math.Log(log
;)(Console.ReadKey
;return 0
}
}
نتیجه ی زیر حاصل می شود.
متد )(Math.Log10لگاریتم پایه ی 82یک عدد را محاسبه می کند .دستور نحوی متد نام برده به صورت زیر است.
341
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
عددی که ارزیابی می شود به عنوان آرگومان ارسال می گردد .متد ،لگاریتم مورد نظر را با فرمول زیر بر مبنای 82بر می گرداند.
y = log10x
که معادل
x = 10y
مثال
;using System
class Program
{
)(static int Main
{
;double log10 = 12.48D
;))Console.WriteLine("Log of {0} is {1}", log10, Math.Log10(log10
;)(Console.ReadKey
;return 0
}
}
نتیجه ی زیر حاصل می گردد.
لگاریتم به هر مبنایی
متد )(Math.Logنسخه ی دیگری فراهم می کند که دستور نحوی آن بدین صورت است.
متغیری که مقدار لگاریتمی آن محاسبه می شود ،به عنوان اولین آرگومان به متد ارسال می گردد .آرگومان دوم به شما اجازه می دهد مبنای
(لگاریتم) دلخواه خود را تعیین کنید .چنین متدی از فرمول زیر استفاده می کند.
Y = logNewBasex
که با فرمول زیر یکی است.
x = NewBasey
342
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
مثال
using System;
class Program
{
static int Main()
{
double logN = 12.48D;
Console.WriteLine("Log of {0} is {1}", logN, Math.Log(logN, 4));
Console.ReadKey();
return 0;
}
}
نتیجه
که دستورSqrt مجهز به متدی است به نامMath کالس، برای این منظور.می توان ریشه ی مربع یک عدد مثبت اعشاری را به دست آورد
. را برمی گرداندx ) متد ریشه ی مربع (جذر، پس از محاسبه.متد باال یک آرگومان به عنوان عدد با ممیز شناور مثبت می گیرد
using System;
class Program
{
static int Main()
{
double sqrt = 8025.73D;
Console.WriteLine("The square root of {0} is {1}", sqrt, Math.Sqrt(sqrt));
Console.ReadKey();
return 0;
}
}
نتیجه
343
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
The square root of 8025.73 is 89.5864387058666
…Press any key to continue
مثلثات
دایره (مکان هندسی) ،نقاطی از صفحه است که فاصله شان از نقطه ی ثابتی واقع در آن صفحه ،مقدار ثابتی باشد .شعاع ) (rخطی مستقیم
است که مرکز دایره ) (Cرا به نقطه ای از محیط دایره وصل می کند .خطی که نقاطی از صفحه که فاصله شان از نقطه ی ثابتی واقع در آن
صفحه ،مقدار ثابتی باشد را به هم وصل کند محیط دایره خوانده می شود .فاصله ی بین دو نقطه از محیط دایره تا مرکز آن قطر دایره نامیده
می شود ،به عبارت دیگر ،قطر دایره دو برابر شعاع دایره می باشد.
به منظور مدیریت اندازه گیری و دیگر عملیات مرتبط ،محیط دایره به 162بخش تقسیم می شود .هر یک از بخش های بیان شده یک درجه
اطالق می گردد .واحد اندازه گیری آن درجه می باشد که با این عالمت نشان داده می شود ." ˚ " :اندازه گیری دو نقطه ی Aو Dمحیط دایره
شامل 85بخش می شود .در این مثال ،اندازه گیری مورد نظر به صورت ˚ 15نمایش داده می شود.
فاصله ی بین دو نقطه ی Aو Bشکلی گرد است که در هندسه کمان ( )arcخوانده می شود .زاویه نسبت فصله ی بین دو نقطه Aو Bمحیط
دایره است که توسط شعاع دایره ( )rتقسیم شده ( به عبارت دیگر از برخورد دو نیم خط زاویه تشکیل می شود) .تعریف فوق را می توان به
344
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
بنابراین ،زاویه نسبت کمان بر شعاع دایره می باشد .به این خاطر که زاویه یک نسبت است نه اندازه گیری هندسی (به عبارت روشن تر
زاویه یک بعد نیست) ،کامالً مستقل از اندازه ی یک دایره محسوب می شود .بدیهی است که این زاویه نشانگر تعداد بخش هایی می باشد
که توسط سه نقطه ی اشغال شده .واحد دیگر (یا شاید بگیم بهتر) برای اندازه گیری و سنجش زاویه رادیان ( )radianمی باشد.
دَوَران ( )cycleواحد اندازه گیری چرخش ،گِردِ یک دایره است .به این خاطر که چرخش لزوماً کامل صورت نمی گیرد ،بسته به شرایط ،سنجش
بر اساس زاویه ای انجام می شود که در گردش طی شده .برای مثال ممکن است دَوَران تنها بخشی از یک دایره را طی کند که در آن صورت
چرخش کامل نخواهد بود .همچنین ممکن است دوران ،کل مساحت یک دایره را طی کند (˚ .)360دَوَران برابر است با رادیان تقسیم بر .2
ثابت PI
کلمه ی ،пکه به صورت Piنیز نوشته می شود ،عدد ثابتی است که در محسابات گوناگون در علم ریاضی به کار می رود .مقدار تقریبی آن
معادل 3.1415926535897932می باشد .ماشین حساب سیستم عامل ویندوز آن را بدین صورت نمایش می دهد :
3.1415926535897932384626433832795
برای پشتیبانی از قابلیت عدد ،Piکالس Mathمجهز به ثابتی به نام PIمی باشد.
345
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
یک قطر در واقع دوبرابر شعاع دایره است .در علم هندسه ،بدین صورت نوشته می شود .2R :در زبان برنامه نویسی C++قطر به صورت 2
* Rیا R * 2نمایش داده می شود (به این خاطر که ضرب متقارن و برابر است) .محیط یک دایره از ضرب (کردن) قطر آن در ثابت Piبه دست
یک رادیان از فرمول 2Rп/Rیا 2Rп/R radبه دست می آید که برابر است با 2пیا .2 * Pi rad
برای انجام عملیات تبدیل بین درجه و رادیان (تبدیل درجه به رادیان) ،می توان از فرمول زیر استفاده کرد :
کسینوس یک مقدار
حال ABرا ،طول نقطه ی Aتا Bدر نظر بگیرید که از آن به عنوان وتر ( )hypotenuseیاد می شود .همچنین تصور کنید ACطول نقطه ی A
تا Cاست که ضلع مجاور ( )Adjacentنقطه ی Aنیز خوانده می شود .کسینوس زاویه ی نقطه ی Aنسبت AC/ABمی باشد .به عبارت
مقدار باز گردانده شده حاصل تقسیم ،عددی با دو رقم اعشار بین -1و 8می باشد.
برای محاسبه ی کسینوس یک زاویه ،کالس Mathمتد )( Cosرا به کار می برد .دستور نحوی آن به شکل زیر است.
346
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
using System;
class Program
{
static int Main()
{
int number = 82;
Console.WriteLine("The cosine of {0} is {1}", number, Math.Cos(number));
Console.ReadKey();
return 0;
}
}
نتیجه
سینوس یک مقدار
که ضلع مقابل،B تا نقطه یC طول نقطه ی، را در نظر بگیریدCB همچنین. در نظر بگیرید که همان وتر نام داردB تاA را طول نقطه یAB
.AB بر وترCB ، نسبت ضلع مقابل،؛ به عبارت دیگرCB/AB سینوس یک مقدار عبارتند از نسبت.نامیده می شود
دستور نحوی آن. فراخواندMath را از کالسSin() می توان متد،برای محاسبه ی سینوس یک مقدار
using System;
class Program
{
static int Main()
{
double number = 82.55;
Console.WriteLine("The sine of {0} is {1}", number, Math.Sin(number));
Console.ReadKey();
return 0;
}
}
نتیجه
347
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
تانژانت
برBC نسبت، هست؛ به عبارت روشن ترBC/AC تانژانت نتیجه ی. در نظر بگیریدC تاB را طول نقطه یBC وC تاA را طول نقطه یAC
. که دستور نحوی آن به شکل زیر می باشدTan مجهز به متدی است به نامMath کالس، برای کمک در محاسبه ی تانژانت یک عدد.AC
using System;
class Program
{
static int Main()
{
uint number = 225;
Console.WriteLine("The tangent of {0} is {1}", number, Math.Tan(number));
Console.ReadKey();
return 0;
}
}
نتیجه
Arc Tangent
arc به منظور محاسبه ی. استBC/AC نسبتarc tangent . در نظر بگیریدB تا نقطه یA را طولAC وC تاB را طول نقطه یBC
using System;
class Program
{
static int Main()
{
short number = 225;
Console.WriteLine("The arc tangent of {0} is {1}",number, Math.Atan(number));
Console.ReadKey();
return 0;
}
348
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
}
نتیجه
در اغلب انتساب های ( که به آن دستور /assignmentتساوی نیز می گویند و با عالمت = نشان داده می شود و کار آن کپی مقدار در متغیر
است ) کدنویسی ،هنگام نوشتن برنامه ی کاربردی از مقدار رشته ( )string valueخبر نداریم .به منظور درخواست دریافت مقدار رشته (یا
هر متغیر دیگری که در این مبحث به آن می پردازیم) ،باید توابع )( Console.Readیا )( Console.ReadLineرا فراخوانده ،سپس تابع
مثال
برای راه اندازی پروژه ی جدید به فهرست گزینه ی اصلی برنامه مراجعه کرده ،گزینه ی File -> New Projectرا انتخاب کنید. .2
در پنجره ی ،Solution Explorerروی gdcs5راست کلیک کرده ،سپس gdcs5 -> Add -> New Item... : .6
اکنون ،به منظور درخواست رشته ها از کاربر ،فایل مورد نظر را به صورت زیر اصالح کنید. .1
349
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
using System;
public class CleaningOrder
{
public static int Main()
{
string customerName, homePhone;
Console.Title = "Georgetown Dry Cleaning Services";
Console.WriteLine("-/- Georgetown Dry Cleaning Services -/-");
// Request customer information from the user
Console.Write("Enter Customer Name: ");
customerName = Console.ReadLine();
Console.Write("Enter Customer Phone: ");
homePhone = Console.ReadLine();
Console.Clear();
// Display the receipt
Console.WriteLine("====================================");
Console.WriteLine("-/- Georgetown Dry Cleaning Services -/-");
Console.WriteLine("====================================");
Console.Write("Customer: ");
Console.WriteLine(customerName);
Console.Write("Home Phone: ");
Console.WriteLine(homePhone);
Console.WriteLine("====================================\n");
System.Console.ReadKey();
return 0;
}
}
James Watson ً اسم مورد نظر را وارد کنید مثال، هنگامی که از شما نام مشتری درخواست می شود. برنامه را اجرا کنید.82
. را بزنیدEnter کلید.88
. (410) 493-2005 ً شماره ی تلفن همراه مورد نظر را وارد می کنیم مثال، حال.82
====================================
/- Georgetown Dry Cleaning Services -/-
===================================
ustomer: James Watson
ome Phone: (410) 493-2005
===================================
350
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
.84اکنون پنجره ی DOSرا بسته و به محیط برنامه نویسی بازگردید.
درخواست عدد
در زبان C#هر آنچه تایپ می کنید ،یک رشته محسوب می شود و تا زمانی که شما از compilerدرخواست نکنید ،رشته های مزبور تحلیل و
پردازش نمی شوند .بنابراین ،برای دریافت عدد مورد نظر از کاربر ،ابتدا باید رشته را درخواست کنید.
مثال
;using System
public class Exercise
{
)(public static void Main
{
;int number
;string strNumber
;)(strNumber = Console.ReadLine
}
}
پس از دریافت رشته ،باید آن را به عدد تبدیل کرد .برای این منظور هر یک از نوع داده های NET Framework.مکانیسمی به نام Parseرا
دارند .برای به کار بردن تابع )( ،Parseنوع داده و به دنبال آن عملگر نقطه " ".و پرانتز را تایپ کنید .در پرانتز های ،parseرشته ای را که از
مثال
;using System
public class Exercise
{
)(public static void Main
{
;int number
;string strNumber
;)(strNumber = Console.ReadLine
;)number = int.Parse(strNumber
}
}
351
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
است که همان نتیجه را به دست میParse در پرانتزهای تابعConsole.ReadLine() تایپ کردن دستور،روشی پیچیده ولی سریع تر
.دهد
مثال
using System;
public class Exercise
{
public static int Main()
{
int number;
number = int.Parse(Console.ReadLine());
return 0;
}
}
. فایل را به صورت زیر تغییر دهید،برای دریافت اعداد مورد نظر از کاربر .8
using System;
public class CleaningOrder
{
public static int Main()
{
// Price of items
const double PriceOneShirt = 0.95;
const double PriceAPairOfPants = 2.95;
const double PriceOneDress = 4.55;
const double TaxRate = 0.0575; // 5.75%
// Customer personal infoirmation
string customerName, homePhone;
// Unsigned numbers to represent cleaning items
uint numberOfShirts, numberOfPants, numberOfDresses;
// Each of these sub totals will be used for cleaning items
double subTotalShirts, subTotalPants, subTotalDresses;
// Values used to process an order
double totalOrder, taxAmount, salesTotal;
double amountTended, moneyChange;
Console.Title = "Georgetown Dry Cleaning Services";
Console.WriteLine("-/- Georgetown Dry Cleaning Services -/-");
// Request customer information from the user
Console.Write("Enter Customer Name: ");
customerName = Console.ReadLine();
Console.Write("Enter Customer Phone: ");
homePhone = Console.ReadLine();
352
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
// Request the quantity of each category of items
Console.Write("Number of Shirts: ");
string strShirts = Console.ReadLine();
numberOfShirts = uint.Parse(strShirts);
Console.Write("Number of Pants: ");
string strPants = Console.ReadLine();
numberOfPants = uint.Parse(strPants);
Console.Write("Number of Dresses: ");
string strDresses = Console.ReadLine();
numberOfDresses = uint.Parse(strDresses);
// Perform the necessary calculations
subTotalShirts = numberOfShirts * PriceOneShirt;
subTotalPants = numberOfPants * PriceAPairOfPants;
subTotalDresses = numberOfDresses * PriceOneDress;
// Calculate the "temporary" total of the order
totalOrder = subTotalShirts + subTotalPants +subTotalDresses;
// Calculate the tax amount using a constant rate
taxAmount = totalOrder * TaxRate;
// Add the tax amount to the total order
salesTotal = totalOrder + taxAmount;
// Communicate the total to the user...
Console.Write("\nThe Total order is: ");
Console.WriteLine(salesTotal);
// and request money for the order
Console.Write("Amount Tended? ");
amountTended = double.Parse(Console.ReadLine());
// Calculate the difference owed to the customer
// or that the customer still owes to the store
moneyChange = amountTended - salesTotal;
Console.Clear();
// Display the receipt
Console.WriteLine("====================================");
Console.WriteLine("-/- Georgetown Dry Cleaning Services -/-");
Console.WriteLine("====================================");
Console.Write("Customer: ");
Console.WriteLine(customerName);
Console.Write("Home Phone: ");
Console.WriteLine(homePhone);
Console.WriteLine("------------------------------------");
Console.WriteLine("Item Type Qty Unit/Price Sub-Total");
Console.WriteLine("------------------------------------");
Console.Write("Shirts ");
Console.Write(numberOfShirts);
Console.Write(" ");
Console.Write(PriceOneShirt);
Console.Write(" ");
Console.WriteLine(subTotalShirts);
Console.Write("Pants ");
Console.Write(numberOfPants);
Console.Write(" ");
353
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Console.Write(PriceAPairOfPants);
Console.Write(" ");
Console.WriteLine(subTotalPants);
Console.Write("Dresses ");
Console.Write(numberOfDresses);
Console.Write(" ");
Console.Write(PriceOneDress);
Console.Write(" ");
Console.WriteLine(subTotalDresses);
Console.WriteLine("------------------------------------");
Console.Write("Total Order: ");
Console.WriteLine(totalOrder);
Console.Write("Tax Rate: ");
Console.Write(TaxRate * 100);
Console.WriteLine('%');
Console.Write("Tax Amount: ");
Console.WriteLine(taxAmount);
Console.Write("Net Price: ");
Console.WriteLine(salesTotal);
Console.WriteLine("------------------------------------");
Console.Write("Amount Tended: ");
Console.WriteLine(amountTended);
Console.Write("Difference: ");
Console.WriteLine(moneyChange);
Console.WriteLine("====================================");
System.Console.ReadKey();
return 0;
}
}
مثال
===============================
-/- Georgetown Dry Cleaning Services -/-
====================================
354
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Customer: Genevieve Alton
Home Phone: (202) 974-8244
------------------------------------
Item Type Qty Unit/Price Sub-Total
------------------------------------
Shirts 8 0.95 7.60
Pants 2 2.95 5.90
Dresses 3 4.55 13.65
------------------------------------
Total Order: 27.15
Tax Rate: 5.7500%
Tax Amount: 1.561125
Net Price: 28.711125
------------------------------------
Amount Tended: 30
Difference: 1.288875
====================================
هما ن فرایندی که برای دریافت هر رقم دیگری انجام می شود ،می توان برای درخواست مقدار تاریخ پیاده کرد .برای این منظور ابتدا الزم است
;using System
namespace ValueRequests
{
class Exercise
{
)(static void Main
{
;string strDateHired
;)(strDateHired = Console.ReadLine
}
}
}
پس از اینکه کاربر رشته ی مربوطه را وارد کرد ،می توانید آن را به مقدار DateTimeتبدیل کنید .درست مثل هر مقدار دیگری که از کاربر
درخواست می کنید ،مقدار تاریخ یا زمان وارد شده باید معتبر و صحیح باشد ،در غیر این صورت برنامه پیغام خطا می دهد .به این خاطر که
مقادیر تاریخ و زمان قوانین خاصی برای قالب بندی ( )formatدارند ،باید سعی کنید به کاربر بفهمانید که مقادیر نام برده را با فرمت الزم و
355
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
compiler ) (پس از اینکه کاربر تاریخ مورد نظر را تایپ کرد، چنانچه از کاربر تنها مقدار تاریخی (معتبر) را تقاضا کنید،به صورت پیش فرض
تاریخ جاری را بهCompiler ، در صورتی که از کاربر فقط مقدار زمانی (معتبر) را درخواست کنید. را اضافه می کندmidnight به آن مقدار
. برنامه را به صورت زیر اصالح کنید، به منظور درج تاریخ و مقدار جدید.8
using System;
public class OrderProcessing
{
public static int Main()
{
// Price of items
const double PriceOneShirt = 0.95;
const double PriceAPairOfPants = 2.95;
const double PriceOneDress = 4.55;
const double TaxRate = 0.0575; // 5.75%
// Basic information about an order
string customerName, homePhone;
DateTime orderDate;
// Unsigned numbers to represent cleaning items
uint numberOfShirts, numberOfPants, numberOfDresses;
// Each of these sub totals will be used for cleaning items
double subTotalShirts, subTotalPants, subTotalDresses;
// Values used to process an order
double totalOrder, taxAmount, salesTotal;
double amountTended, moneyChange;
Console.Title = "Georgetown Dry Cleaning Services";
Console.WriteLine("-/- Georgetown Dry Cleaning Services -/-");
// Request order information from the user
Console.Write("Enter Customer Name: ");
customerName = Console.ReadLine();
Console.Write("Enter Customer Phone: ");
homePhone = Console.ReadLine();
Console.WriteLine("Enter the order date and " + "time (mm/dd/yyyy hh:mm AM/PM)");
orderDate = DateTime.Parse(Console.ReadLine());
// Request the quantity of each category of items
Console.Write("Number of Shirts: ");
string strShirts = Console.ReadLine();
numberOfShirts = uint.Parse(strShirts);
Console.Write("Number of Pants: ");
string strPants = Console.ReadLine();
numberOfPants = uint.Parse(strPants);
Console.Write("Number of Dresses: ");
string strDresses = Console.ReadLine();
356
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
numberOfDresses = uint.Parse(strDresses);
// Perform the necessary calculations
subTotalShirts = numberOfShirts * PriceOneShirt;
subTotalPants = numberOfPants * PriceAPairOfPants;
subTotalDresses = numberOfDresses * PriceOneDress;
// Calculate the "temporary" total of the order
totalOrder = subTotalShirts +subTotalPants + subTotalDresses;
// Calculate the tax amount using a constant rate
taxAmount = totalOrder * TaxRate;
// Add the tax amount to the total order
salesTotal = totalOrder + taxAmount;
// Communicate the total to the user...
Console.Write("\nThe Total order is: ");
Console.WriteLine(salesTotal);
// and request money for the order
Console.Write("Amount Tended? ");
amountTended = double.Parse(Console.ReadLine());
// Calculate the difference owed to the customer
// or that the customer still owes to the store
moneyChange = amountTended - salesTotal;
Console.Clear();
// Display the receipt
Console.WriteLine("====================================");
Console.WriteLine("-/- Georgetown Dry Cleaning Services -/-");
Console.WriteLine("====================================");
Console.Write("Customer: ");
Console.WriteLine(customerName);
Console.Write("Home Phone: ");
Console.WriteLine(homePhone);
Console.Write("Date & Time: ");
Console.WriteLine(orderDate);
Console.WriteLine("------------------------------------");
Console.WriteLine("Item Type Qty Unit/Price Sub-Total");
Console.WriteLine("------------------------------------");
Console.Write("Shirts ");
Console.Write(numberOfShirts);
Console.Write(" ");
Console.Write(PriceOneShirt);
Console.Write(" ");
Console.WriteLine(subTotalShirts);
Console.Write("Pants ");
Console.Write(numberOfPants);
Console.Write(" ");
Console.Write(PriceAPairOfPants);
Console.Write(" ");
Console.WriteLine(subTotalPants);
Console.Write("Dresses ");
Console.Write(numberOfDresses);
Console.Write(" ");
Console.Write(PriceOneDress);
357
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Console.Write(" ");
Console.WriteLine(subTotalDresses);
Console.WriteLine("------------------------------------");
Console.Write("Total Order: ");
Console.WriteLine(totalOrder);
Console.Write("Tax Rate: ");
Console.Write(TaxRate * 100);
Console.WriteLine('%');
Console.Write("Tax Amount: ");
Console.WriteLine(taxAmount);
Console.Write("Net Price: ");
Console.WriteLine(salesTotal);
Console.WriteLine("------------------------------------");
Console.Write("Amount Tended: ");
Console.WriteLine(amountTended);
Console.Write("Difference: ");
Console.WriteLine(moneyChange);
Console.WriteLine("====================================");
System.Console.ReadKey();
return 0;
}
}
====================================
-/- Georgetown Dry Cleaning Services -/-
====================================
Customer: Alexander Pappas Home Phone: (301) 397-9764
Date & Time: 6/22/1998 8:26:00 AM
------------------------------------
Item Type Qty Unit/Price Sub-Total
------------------------------------
358
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Shirts 2 0.95 1.90
Pants 6 2.95 17.70
Dresses 0 4.55 0
------------------------------------
Total Order: 19.60
Tax Rate: 5.7500%
Tax Amount: 1.127000
Net Price: 20.727000
------------------------------------
Amount Tended: 50
Difference: 29.273000
====================================
. به محیط برنامه نویسی برگردید.4
. برای این منظور فایل مورد نظر را به صورت زیر اصالح کنید.8
using System;
public class OrderProcessing
{
public static int Main()
{
// Price of items
const double PriceOneShirt = 0.95;
const double PriceAPairOfPants = 2.95;
const double PriceOneDress = 4.55;
const double TaxRate = 0.0575; // 5.75%
double Difference;
// Basic information about an order
string customerName, homePhone;
DateTime orderDate;
// Unsigned numbers to represent cleaning items
uint numberOfShirts, numberOfPants, numberOfDresses;
// Each of these sub totals will be used for cleaning items
double subTotalShirts, subTotalPants, subTotalDresses;
// Values used to process an order
double totalOrder, taxAmount, salesTotal;
double amountTended, moneyChange;
Console.Title = "Georgetown Dry Cleaning Services";
Console.WriteLine("-/- Georgetown Dry Cleaning Services -/-");
// Request order information from the user
Console.Write("Enter Customer Name: ");
customerName = Console.ReadLine();
Console.Write("Enter Customer Phone: ");
homePhone = Console.ReadLine();
Console.WriteLine("Enter the order date and " +"time (mm/dd/yyyy hh:mm AM/PM)");
359
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
orderDate = DateTime.Parse(Console.ReadLine());
// Request the quantity of each category of items
Console.Write("Number of Shirts: ");
numberOfShirts = uint.Parse(Console.ReadLine());
Console.Write("Number of Pants: ");
numberOfPants = uint.Parse(Console.ReadLine());
Console.Write("Number of Dresses: ");
numberOfDresses = uint.Parse(Console.ReadLine());
// Perform the necessary calculations
subTotalShirts = numberOfShirts * PriceOneShirt;
subTotalPants = numberOfPants * PriceAPairOfPants;
subTotalDresses = numberOfDresses * PriceOneDress;
// Calculate the "temporary" total of the order
totalOrder = subTotalShirts +subTotalPants + subTotalDresses;
// Calculate the tax amount using a constant rate
taxAmount = totalOrder * TaxRate;
// Add the tax amount to the total order
salesTotal = totalOrder + taxAmount;
// Communicate the total to the user...
Console.Write("\nThe Total order is: ");
Console.WriteLine(salesTotal);
// and request money for the order
Console.Write("Amount Tended? ");
amountTended = double.Parse(Console.ReadLine());
// Calculate the difference owed to the customer
// or that the customer still owes to the store
Difference = amountTended - salesTotal;
Console.Clear();
// Display the receipt
Console.WriteLine("====================================");
Console.WriteLine("-/- Georgetown Dry Cleaning Services -/-");
Console.WriteLine("====================================");
Console.WriteLine("Customer: {0}", customerName);
Console.WriteLine("Home Phone: {0}", homePhone);
Console.WriteLine("Date & Time: {0}", orderDate);
Console.WriteLine("------------------------------------");
Console.WriteLine("Item Type Qty Unit/Price Sub-Total");
Console.WriteLine("------------------------------------");
Console.WriteLine("Shirts {0} {1} {2}",numberOfShirts,PriceOneShirt, subTotalShirts);
Console.WriteLine("Pants {0} {1} {2}", numberOfPants,PriceAPairOfPants, subTotalPants);
Console.WriteLine("Dresses {0} {1} {2}",numberOfDresses, PriceOneDress, subTotalDresses);
Console.WriteLine("------------------------------------");
Console.WriteLine("Total Order: {0}", totalOrder);
Console.WriteLine("Tax Rate: {0}%", TaxRate * 100);
Console.WriteLine("Tax Amount: {0}", taxAmount);
Console.WriteLine("Net Price: {0}", salesTotal);
Console.WriteLine("------------------------------------");
Console.WriteLine("Amount Tended: {0}", amountTended);
Console.WriteLine("Difference: {0}", Difference);
Console.WriteLine("====================================");
360
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;)(System.Console.ReadKey
;return 0
}
}
}
.2برنامه را اجرا کرده تا نتیجه ی آن را مشاهده کنید.
تبدیل به رشته
پیش تر ذکر شد که هر آنچه در محیط C#با صفحه کلید تایپ می شود عمدتاً رشته است و تبدیل آن به نوع مورد نیاز ،دیگر وظیفه ی برنامه
نویس می باشد و برعکس ،چنانچه مقداری داشته باشید که (در قالب) رشته نبود می توان به راحتی آن را به رشته تبدیل کرد .برای
پشتیبانی از چنین امکان و قابلیتی ،تمامی نوع داده های NET Framework.مکانیسمی به نام ToStringرا ارائه می دهند .در زبان C#
پروسه ی تبدیل معموالً به صورت اتوماتیک توسط compilerانجام می شود .با این وجود ،در برخی موارد شما خود مجبور به انجام فرایند
تبدیل هستید.
را تایپ کنید .توجه خود به منظور تبدیل مقداری از داده های نوع اولیه به رشته ،اسم متغیر و به دنبال آن عملگر نقطه و تابع )(ToString
;using System
public class Exercise
{
)(public static void Main
{
;"var fullName = "Anselme Bogos
;var age = 15
;var hSalary = 22.74
;)Console.WriteLine("Full Name: {0}", fullName
;))(Console.WriteLine("Age: {0}", age.ToString
;))(Console.WriteLine("Distance: {0}", hSalary.ToString
;)(Console.WriteLine
}
}
در برخی حاالت می توان داده داخل پرانتز تابع )( ToStringقرار داد.
361
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
using System;
public class OrderProcessing
{
public static int Main()
{
// Price of items
const double PriceOneShirt = 0.95;
const double PriceAPairOfPants = 2.95;
const double PriceOneDress = 4.55;
const double TaxRate = 0.0575; // 5.75%
// Basic information about an order
string customerName, homePhone;
DateTime orderDate;
// Unsigned numbers to represent cleaning items
uint numberOfShirts, numberOfPants, numberOfDresses;
// Each of these sub totals will be used for cleaning items
double subTotalShirts, subTotalPants, subTotalDresses;
// Values used to process an order
double totalOrder, taxAmount, salesTotal;
double amountTended,Difference, moneyChange;
Console.Title = "Georgetown Dry Cleaning Services";
Console.WriteLine("-/- Georgetown Dry Cleaning Services -/-");
// Request order information from the user
Console.Write("Enter Customer Name: ");
customerName = Console.ReadLine();
Console.Write("Enter Customer Phone: ");
homePhone = Console.ReadLine();
Console.WriteLine("Enter the order date and " +"time (mm/dd/yyyy hh:mm AM/PM)");
orderDate = DateTime.Parse(Console.ReadLine());
// Request the quantity of each category of items
Console.Write("Number of Shirts: ");
numberOfShirts = uint.Parse(Console.ReadLine());
Console.Write("Number of Pants: ");
numberOfPants = uint.Parse(Console.ReadLine());
Console.Write("Number of Dresses: ");
numberOfDresses = uint.Parse(Console.ReadLine());
// Perform the necessary calculations
subTotalShirts = numberOfShirts * PriceOneShirt;
subTotalPants = numberOfPants * PriceAPairOfPants;
subTotalDresses = numberOfDresses * PriceOneDress;
// Calculate the "temporary" total of the order
totalOrder = subTotalShirts + subTotalPants + subTotalDresses;
// Calculate the tax amount using a constant rate
taxAmount = totalOrder * TaxRate;
// Add the tax amount to the total order
salesTotal = totalOrder + taxAmount;
// Communicate the total to the user...
Console.Write("\nThe Total order is: ");
Console.WriteLine(salesTotal);
// and request money for the order
362
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Console.Write("Amount Tended? ");
amountTended = double.Parse(Console.ReadLine());
// Calculate the difference owed to the customer
// or that the customer still owes to the store
Difference = amountTended - salesTotal;
Console.Clear();
// Display the receipt
Console.WriteLine("====================================");
Console.WriteLine("-/- Georgetown Dry Cleaning Services -/-");
Console.WriteLine("====================================");
Console.WriteLine("Customer: {0}", customerName);
Console.WriteLine("Home Phone: {0}", homePhone);
Console.WriteLine("Date & Time: {0}", orderDate);
Console.WriteLine("------------------------------------");
Console.WriteLine("Item Type Qty Unit/Price Sub-Total");
Console.WriteLine("------------------------------------");
Console.WriteLine("Shirts {0} {1:C} {2}",numberOfShirts.ToString(),
PriceOneShirt,subTotalShirts.ToString("C"));
Console.WriteLine("Pants {0} {1:C} {2:C}", numberOfPants, PriceAPairOfPants,subTotalPants);
Console.WriteLine("Dresses {0} {1:C} {2:C}", numberOfDresses, PriceOneDress,subTotalDresses);
Console.WriteLine("------------------------------------");
Console.WriteLine("Total Order: {0:C}", totalOrder);
Console.WriteLine("Tax Rate: {0:P}", TaxRate);
Console.WriteLine("Tax Amount: {0}",taxAmount.ToString("C"));
Console.WriteLine("Net Price: {0:F}", salesTotal);
Console.WriteLine("------------------------------------");
Console.WriteLine("Amount Tended: {0:C}", amountTended);
Console.WriteLine("Difference: {0:C}", Difference);
Console.WriteLine("====================================");
System.Console.ReadKey();
return 0;
}
}
====================================
-/- Georgetown Dry Cleaning Services -/-
363
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
====================================
Customer: Gretchen McCormack
Home Phone: (410) 739-2884
Date & Time: 4/9/2001 10:25:00 AM
------------------------------------
Item Type Qty Unit/Price Sub-Total
------------------------------------
Shirts 5 $0.95 $4.75
Pants 12 $2.95 $35.40
Dresses 8 $4.55 $36.40
------------------------------------
Total Order: $76.55
Tax Rate: 5.75 %
Tax Amount: $4.40
Net Price: 80.95
------------------------------------
Amount Tended: $100.00
Difference: $19.05
====================================
.4پنجره ی DOSرا ببندید.
در برنامه های فوق به منظور نمایش خطی از یک متن ،از توابع )( Writeیا )( WriteLineاستفاده می کردیم .برای قرار دادن متنی با طول
متفاوت باالی متن دیگری ،با استفاده ی بیش از حد از فضاهای خالی ،یک رشته را خراب می کردیم .چنین تکنیکی تاحدی غیر حرفه ای و
نامطمئن تلقی می شود .خوشبختانه ،قالب بندی خط و متن ،همچنین نحوه ی نمایش آن ها را می توان تاحدی زیادی مدیریت کرد .همان طور
که انتظار می رفت .NET Framework ،به منظور تنظیم مقدار فضای مورد نیاز برای نمایش رشته ای از متن و نحوه ی قرار گیری رشته ی
به منظور تعیین مقدار فضای مورد نیاز برای نمایش رشته ،می توان از placeholderداخل پرانتز )( Writeیا )( WriteLineاستفاده کرد.
برای این منظور ،داخل 2 ،placeholderیا تعدادی عدد تصاعدی ( )incrementing numberرا به همراه کاراکتر قالب بندی آن
( )formatting characterتایپ کنید .سپس ،ویرگول و به دنبال آن تعداد کاراکترهایی که با فضای (پهنا) دلخواه همخوانی دارد /برابر
مثال
;using System
public class Exercise
{
364
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
)(public static void Main
{
;"var fullName = "Anselme Bogos
;var age = 15
;var hSalary = 22.74
;)Console.WriteLine("Full Name: {0,20}", fullName
;))(Console.WriteLine("Age:{0,14}", age.ToString
;))(Console.WriteLine("Distance: {0:C,8}", hSalary.ToString
;)(Console.WriteLine
}
}
نتیجه
عالمتی که برای پهنا ( )widthدر نظر می گیرید بسیار مهم است .اگر مثبت بود ،خط متن در سمت راست قرار می گیرد که باید alignment
مرجع ،به خصوص برای مقادیر عددی باشد .حال چنانچه عالمتی که ارائه می دهید منفی باشد ،متن در سمت چپ قرار می گیرد.
همان طور که پیش تر ذکر شد ،هنگامی که کاربر مقدار زمان برای متغیر DateTimeوارد می کند compiler ،خود یک بخش زمان به مقدار
مذکور اضافه می کند .اگر بخواهید تنها بخش زمان یا بخش تاریخ بررسی شود ،الزم است این امر را برای compilerمشخص کنید .برای این
منظور ،نوع داده ی DateTimeیک سری حروف در نظر گرفته است که با استفاده از آن می توان نحوه ی نمایش مقدار (نوع قالب بندی آن)
برای کاربر را تعیین کرد .کاراکتر مورد نظر داخل placeholderمتغیر DateTimeپس از 2یا مقدار عددی افزایشی ( incremental
.7برای تنظیم قالب بندی زمان و تاریخ ،فایل را به صورت زیر اصالح کنید.
;using System
public class OrderProccessing
{
)(public static int Main
{
//Price of items
;const double PriceOneShirt = 0.95
365
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
const double PriceAPairOfPants = 2.95;
const double PriceOneDress = 4.55;
const double TaxRate = 0.0575; //5.75%
//Basic information about an order
string customerName, homephone;
DateTime orderDate, orderTime;
//Unsigned numbers to represent cleaning items
uint numberOfShirts, numberOfPants, numberOfDresses;
//Each of these sub totals will be used for cleaning items
double subTotalShirts, subTotalPants, subTotalDresses;
//Values used to process an order
double totalOrder, taxAmount, salesTotal;
double amountTended, moneyChange;
Console.Title = "Georgetown Dry Cleaning Services";
Console.WriteLine("-/- Georgetown Dry Cleaning Services -/-");
//Request order information from the user
Console.Write("Enter Customer Name: ");
customerName = Console.ReadKey().ToString();
Console.Write("Enter Customer Phone: ");
homephone = Console.ReadLine();
Console.Write("Enter the order date(mm/dd/yyyy): ");
orderDate = DateTime.Parse(Console.ReadLine());
Console.Write("Enter the order time(hh:mm AM/PM): ");
orderTime = DateTime.Parse(Console.ReadLine());
//Request the quantity of each category of items
Console.Write("Number of Shirts: ");
numberOfShirts = uint.Parse(Console.ReadLine());
Console.Write("Number of Pants: ");
numberOfPants = uint.Parse(Console.ReadLine());
Console.Write("Number of Dresses: ");
numberOfDresses = uint.Parse(Console.ReadLine());
//Perform the necessary calculations
subTotalShirts = numberOfShirts * PriceOneShirt;
subTotalPants = numberOfPants * PriceAPairOfPants;
subTotalDresses = numberOfDresses * PriceOneDress;
//Calculate the "temporary" total of the order
totalOrder = subTotalShirts + subTotalPants +subTotalDresses;
//Calculate the tax amount using a constant rate
taxAmount = totalOrder * TaxRate;
//Add the tax amount to the total order
salesTotal = totalOrder + taxAmount;
//Communicate the total to the user...
Console.WriteLine("\nThe Total order is: {0:C}", salesTotal);
//and request money for the order
Console.Write("Amount Tended? ");
amountTended = double.Parse(Console.ReadLine());
//Calculate the difference owed to the customer
//or that the customer still owes to the store
moneyChange = amountTended - salesTotal;
Console.Clear();
366
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
//Display the receipt
Console.WriteLine("====================================");
Console.WriteLine("-/- Georgetown Dry Cleaning Services -/-");
Console.WriteLine("====================================");
Console.WriteLine("Customer: {0}", customerName);
Console.WriteLine("Home Phone: {0}", homephone);
Console.WriteLine("Order Date: {0:D}", orderDate);
Console.WriteLine("Order Time: {0:t}", orderTime);
Console.WriteLine("------------------------------------");
Console.WriteLine("Item Type Qty Unit/Price Sub-Total");
Console.WriteLine("------------------------------------");
Console.WriteLine("Shirts {0} {1} {2}",numberOfShirts.ToString(),PriceOneShirt.ToString("C"), subTotalShirts.ToString("C"));
Console.WriteLine("Pants {0} {1} {2}",numberOfPants.ToString(),PriceAPairOfPants.ToString("C"),subTotalPants.ToString("C"));
Console.WriteLine("Dresses {0} {1} {2}", numberOfDresses.ToString(),PriceOneDress.ToString("C"),subTotalDresses.ToString("C"));
Console.WriteLine("------------------------------------");
Console.WriteLine("Total Order: {0}",totalOrder.ToString("C"));
Console.WriteLine("Tax Rate: {0}",TaxRate.ToString("P"));
Console.WriteLine("Tax Amount: {0}", taxAmount.ToString("C"));
Console.WriteLine("Net Price: {0}", salesTotal.ToString("C"));
Console.WriteLine("------------------------------------");
Console.WriteLine("Amount Tended: {0}", amountTended.ToString("C"));
Console.WriteLine("Difference: {0}",moneyChange.ToString("C"));
Console.WriteLine("====================================");
System.Console.ReadKey();
return 0;
}
}
}
می توان کالسی را در دل کالسی دیگر گنجاند .به کالسی که داخل کالسی دیگر ایجاد می شود ،کالس nestedیا تودرتو می گویند .برای این
منظور
داخل کالس موجود کلیک کرده و کد مورد نیاز را برای کالس جدید وارد کنید ،ابتدا کلید واژه ی ،classسپس یک اسم و کاراکتر {} را
تایپ کنید.
حال ،کل کالس را انتخاب کنید .روی انتخاب راست کلیک کرده و گزینه ی Surround With...را انتخاب کنید .در لیستی که ظاهر می
در مثال زیر کالسی به نام Insideداخل کالس دیگری به نام Outsideقرار گرفته
368
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
طبق دستور باال می توان هر تعداد کالس که الزم است در کالس های دیگر جای گذاری کرد .طریقه ی مدیریت و کنترل کالس تودرتو هیچ
تفاوتی با (مدیریت) یک کالس عادی ندارد .برای مثال ،می توان تمامی فیلدها ،متدها و propertiesمورد نیاز را داخل کالس تودرتو یا
کالس میزبان (کالس تودرتو) تعریف کرد .هنگامی که کالسی را در کالس دیگر جای گذاری می کنید ،هیچ گونه ارتباط (برنامه ای) خاصی بین
دو کالس به وجود نمی آید :یعنی تنها به صرف قرار گرفتن یک کالس در کالس دیگر ،کالس تودرتو ( nested classیا کالس گنجانده شده)
به اعضای کالس میزبان ( )nesting classدسترسی فوری پیدا نخواهد کرد .در حقیقت ،این دو کالس از هم مجزا هستند.
اسم کالس تودرتو (کالس گنجانده شده) بیرون از کالس میزبان قابل رویت نیست .برای دسترسی به کالس تودرتو بیرون از کالس میزبان،
باید اسم کالس تودرتو را هر جایی که می خواهید از آن استفاده کنید ،تعریف کنید .اگر می خواهید متغیر Insideرا جایی درون برنامه ولی
مثال
;using System
public class Outside
{
public class Inside
{
)(public Inside
{
;)"Console.WriteLine(" -= Inside =-
}
}
)(public Outside
{
;)"=Console.WriteLine(" =- Outside -
}
}
public class Exercise
{
)(static int Main
{
;)(Outside recto = new Outside
;)(Outside.Inside ins = new Outside.Inside
;return 0
}
}
نتیجه ی زیر را به دست می دهد.
369
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
به این خاطر که هیچ گونه ارتباط خاصی بین کالس گنجانده شده و کالس میزبان (دربردارنده) وجود ندارد ،برای دسترسی به کالس گنجانده
شده در کالس میزبان ،باید از اعضای ایستا ( )static membersآن استفاده کرد .به عبارت دیگر ،می توانید همه ی اعضای کالس گنجانده
شده را که می خواهید در کالس میزبان دسترسی داشته باشید به عنوان ایستا تعریف کنید .به مثال زیر توجه کنید.
;using System
public class Outside
{
public class Inside
{
;public static string InMessage
)(public Inside
{
;)"Console.WriteLine(" -= Insider =-
;"InMessage = "Sitting inside while it's raining
}
)(public static void Show
{
;)"Console.WriteLine("Show me the wonderful world of C# Programming
}
}
)(public Outside
{
;)"=Console.WriteLine(" =- The Parent -
}
)(public void Display
{
;)Console.WriteLine(Inside.InMessage
;)(Inside.Show
}
}
class Exercise
{
)(static int Main
{
;)(Outside recto = new Outside
;)(Outside.Inside ins = new Outside.Inside
;)(recto.Display
;return 0
}
}
به همین نحو ،برای دسترسی به کالس میزبان در کالس گنجانده شده ،می توان از اعضای ایستا کالس میزبان استفاده کرد ( کلیه ی اعضای
کالس میزبان را که می خواهید در کالس گنجانده شده دسترسی داشته باشید به عنوان ایستا تعریف کنید).
مثال
370
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
using System;
public class Outside
{
public class Inside
{
public static string InMessage;
public Inside()
{
Console.WriteLine(" -= Insider =-");
InMessage = "Sitting inside while it's raining";
}
public static void Show()
{
Console.WriteLine("Show me the wonderful world of C# Programming");
}
public void FieldFromOutside()
{
Console.WriteLine(Outside.OutMessage);
}
}
private static string OutMessage;
public Outside()
{
Console.WriteLine(" =- The Parent -=");
OutMessage = "Standing outside! It's cold and raining!!";
}
public void Display()
{
Console.WriteLine(Inside.InMessage);
Inside.Show();
}
}
public class Exercise
{
static int Main()
{
Outside recto = new Outside();
Outside.Inside Ins = new Outside.Inside();
recto.Display();
Console.WriteLine();
Ins.FieldFromOutside();
return 0;
}
}
.نتیجه ی زیر به دست می آید
=- The Parent -=
-= Insider =-
371
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Sitting inside while it's raining
متغیر کالس، اگر می خواهید به اعضای کالس گنجانده شده در کالس میزبان دسترسی داشته باشید،همچنین می توان به جای اعضای ایستا
گنجانده شده را در کالس میزبان تعریف کنید و بر عکس (عکس این قضیه را برای دسترسی به اعضای کالس میزبان در کالس گنجانده شده
.)پیاده کنید
مثال
using System;
public class Outside
{
// A member of the nesting class
private string OutMessage;
// The nested class
public class Inside
{
// A field in the nested class
public string InMessage;
// A constructor of the nested class
public Inside()
{
Console.WriteLine(" -= Insider =-");
this.InMessage = "Sitting inside while it's raining";
}
// A method of the nested class
public void Show()
{
// Declare a variable to access the nesting class
Outside outsider = new Outside();
Console.WriteLine(outsider.OutMessage);
}
} // End of the nested class
// A constructor of the nesting class
public Outside()
{
this.OutMessage = "Standing outside! It's cold and raining!!";
Console.WriteLine(" =- The Parent -=");
}
// A method of the nesting class
public void Display()
{
372
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;)Console.WriteLine(insider.InMessage
}
// Declare a variable to access the nested class
;)(Inside insider = new Inside
}
public class Exercise
{
)(static int Main
{
;)(Outside recto = new Outside
;)(Outside.Inside Ins = new Outside.Inside
;)(Ins.Show
;)(recto.Display
;return 0
}
}
نتیجه ی زیر به دست می آید.
م ثل تمامی متغیرهایی که تاکنون به کار برده ایم ،می توان یک کالس یا ساختار را متغیر عضو کالسی دیگر کرد .برای این که بتوانید کالس
دیگری را در کالس خود به کار ببرید ،در وهله ی اول الزم است آن کالس را در دسترس داشته باشید .هم می توانید از کالس های آماده ی
C#برای این منظور استفاده کنید ،هم می توانید کالس خود را ایجاد کنید.
مثال
عنوان متغیر عضو کالسی دیگر ،کافی است متغیر آن را تعریف کنید .به مثال زیر توجه کنید.
373
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
public class Point
{
;internal short x
;internal short y
}
public class CoordinateSystem
{
;public Point start
}
پس از تعریف کالسی به عنوان عضو متغیر کالس دیگر ،می توان از متغیر مزبور به طور منظم استفاده کرد .به این خاطر که عضو مورد نظر یک
کالس است ،که به عنوان (یک) ارجاع ( )referenceمعرفی شده ،قوانینی وجود دارد که هنگام استفاده از آن باید رعایت کرد .پس از
تعریف متغیر عضو ،باید مطمئن شوید که حافظه ی کافی به آن تخصیص داده شده است .همچنین الزم است متغیر مذکور صحیح و به طور
مقتضی مقداردهی (اولیه) شده باشد .در غیر این صورت ،هنگام ترجمه ی ( )compileبرنامه با errorمواجه می شوید.
.2برای ایجاد برنامه ی جدید ،در فهرست اصلی برنامه روی File -> New Project...کلیک کنید.
.5به منظور ایجاد کالس جدید ،در پنجره ی ،Solution Explorerروی اسم پروژه راست کلیک کرده ،اکنون نشانگر موس را روی
;using System
;using System.Collections.Generic
;using System.Linq
;using System.Text
namespace ElectronicStore1
{
public class StoreItem
{
;private long nbr
;private char cat
;private string mk
;private string mdl
374
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
private double price;
public long GetItemNumber()
{
return nbr;
}
public void SetItemNumber(long number = 0)
{
this.nbr = number;
}
public char GetCategory()
{
return cat;
}
public void SetCategory(char category = 'A')
{
this.cat = category;
}
public string GetMake()
{
return mk;
}
public void SetMake(string make = "Unknown")
{
this.mk = make;
}
public string GetModel()
{
return mdl;
}
public void SetModel(string model = "Unknown")
{
this.mdl = model;
}
public double GetUnitPrice()
{
return price;
}
public void SetUnitPrice(double unitPrice = 0.00D)
{
this.price = unitPrice;
}
}
}
. را انتخاب کنیدProject -> Add New Item... ، فهرست گزینه ی اصلی را باز کرده، برای ایجاد فایل جدید.1
375
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
.88فایل را به ترتیب زیر اصالح کنید.
;using System
namespace ElectronicStore1
{
public class OrderProcessing
{
)(public static int Main
{
;"string strTitle1 = "=-= Nearson Electonics =-=\n
;"****** string strTitle2 = "******* Store Items
;)(System.Console.ReadKey
;return 0
}
}
}
بازگرداندن شی از متد
می توان مقدار یک کالس را از متد یک کالس بازگرداند .برای این منظور ،ابتدا متد را تعریف کرده ،سپس کالس را به عنوان نوع بازگشتی
مثال
کامپایل برنامه با errorمواجه می شوید .بنابراین ،ابتدا متغیر کالس را در بدنه ی متد تعریف می کنید ،در این خالل متغیر را مقداردهی
376
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
مثال
پس از ایجاد کالس ،می توان آن را مثل هر متغیر دیگری به کار برد .برای مثال ،می توان متغیر آن را به عنوان آرگومان به متد کالس
دیگری ارسال کرد .زمانی که کالسی به عنوان آرگومان ارسال می شود ،اعضای عمومی ( )public membersکالس در اختیار متدی که از آن
استفاده می کند قرار می گیرد .همچنین می توان چندین (بیش از یک) کالس به عنوان آرگومان به یک متد ارسال کرد.
مثال
;using System
namespace Geometry
{
public class Point
{
;internal short x
;internal short y
}
public class CoordinateSystem
{
;public Point start
;public Point end
377
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
public Point GetThePoint()
{
Point pt = new Point();
Console.Write("Enter the x coordinate of the point: ");
pt.x = short.Parse(Console.ReadLine());
Console.Write("Enter the y coordinate of the point: ");
pt.y = short.Parse(Console.ReadLine());
return pt;
}
public double DistanceFromOrigin(Point pt)
{
double sqr1 = Math.Pow(pt.x, 2);
double sqr2 = Math.Pow(pt.y, 2);
double distance = Math.Sqrt(sqr1 + sqr2);
return distance;
}
public double DistanceBetween2Points(Point pt1, Point pt2)
{
double sqr1 = Math.Pow(pt2.x - pt1.x, 2);
double sqr2 = Math.Pow(pt2.y - pt1.y, 2);
double distance = Math.Sqrt(sqr1 + sqr2);
return distance;
}
}
public class Program
{
private static CoordinateSystem IdentifyCoordinates()
{
CoordinateSystem coord = new CoordinateSystem();
Console.WriteLine("Start Point");
coord.start = coord.GetThePoint();
Console.WriteLine("End Point");
coord.end = coord.GetThePoint();
return coord;
}
private static void Show(CoordinateSystem c)
{
Console.WriteLine("Coordinate System");
Console.WriteLine("Starting Point: P({0}, {1})", c.start.x, c.start.y);
Console.WriteLine("Ending Point: Q({0}, {1})", c.end.x, c.end.y);
Console.WriteLine("Distance Between Both Points: {0:F}",c.DistanceBetween2Points(c.start, c.end));
}
static int Main()
{
CoordinateSystem coord = IdentifyCoordinates();
Console.WriteLine();
Show(coord);
return 0;
}
}
378
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
}
.زیر نمونه ای از (اجرای) برنامه مورد نظر را مشاهده می کنید
Start Point
Enter the x coordinate of the point: -2
Enter the y coordinate of the point: 2
End Point
Enter the x coordinate of the point: 3
Enter the y coordinate of the point: -6
Coordinate System
Starting Point: P(-2، 2)
Ending Point: Q(3، -6)
Distance Between Both Points: 9.43
Press any key to continue...
کالس، هنگام ارسال کالس به عنوان آرگومان،) مورد استفاده قرار می گیرندreference( به این خاطر که کالس ها همیشه به عنوان ارجاع
. را در سمت چپ آرگومان تایپ کنیدref برای این منظور می توانید کلیدواژه ی.نام برده (به صورت ضمنی) با ارجاع فرستاده می شود
مثال
using System;
namespace ConsoleApplication1
{
public class Point
{
internal short x;
internal short y;
}
public class CoordinateSystem
{
public Point start;
public Point end;
public Point GetThePoint()
{
Point pt = new Point();
Console.Write("Enter the x coordinate of the point: ");
pt.x = short.Parse(Console.ReadLine());
Console.Write("Enter the y coordinate of the point: ");
pt.y = short.Parse(Console.ReadLine());
return pt;
}
public double DistanceFromOrigin(ref Point pt)
{
double sqr1 = Math.Pow(pt.x, 2);
double sqr2 = Math.Pow(pt.y, 2);
379
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
double distance = Math.Sqrt(sqr1 + sqr2);
return distance;
}
public double DistanceBetween2Points(ref Point pt1, ref Point pt2)
{
double sqr1 = Math.Pow(pt2.x - pt1.x, 2);
double sqr2 = Math.Pow(pt2.y - pt1.y, 2);
double distance = Math.Sqrt(sqr1 + sqr2);
return distance;
}
}
public class Program
{
private static CoordinateSystem IdentifyCoordinates()
{
CoordinateSystem coord = new CoordinateSystem();
Console.WriteLine("Start Point");
coord.start = coord.GetThePoint();
Console.WriteLine("End Point");
coord.end = coord.GetThePoint();
return coord;
}
private static void Show(CoordinateSystem c)
{
Console.WriteLine("Coordinate System");
Console.WriteLine("Starting Point: P({0}, {1})", c.start.x, c.start.y);
Console.WriteLine("Ending Point: Q({0}, {1})", c.end.x, c.end.y);
Console.WriteLine("Distance Between Both Points: {0:F}", c.DistanceBetween2Points(ref c.start, ref c.end));
}
static int Main()
{
CoordinateSystem coord = IdentifyCoordinates();
Console.WriteLine();
Show(coord);
return 0;
}
}
}
. را به صورت زیر اصالح کنیدOrderProcessing.cs فایل، برای بازگرداندن کالس یا ارسال آن به عنوان آرگومان.8
using System;
namespace ElectronicStore1
{
public class SaleItem
{
380
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
double DiscountAmount;
double NetPrice;
int Quantity;
double SaleTotal;
public double GetDiscountRate()
{
Console.Write("Discount Applied (Enter 0 to 100, 0 if no discount): ");
double discount = double.Parse(Console.ReadLine());
return discount;
}
public int GetQuantity()
{
Console.Write("Enter Quantity: ");
int q = int.Parse(Console.ReadLine());
return q;
}
public StoreItem Create()
{
long itemNumber;
char category;
string make;
string model;
//double discount;
double price;
StoreItem saleItem = new StoreItem();
Console.Write("Enter the Item #: ");
itemNumber = long.Parse(Console.ReadLine());
Console.WriteLine("Category");
Console.WriteLine("A - Audio Cables");
Console.WriteLine("B - Instructional and Tutorials (Books)");
Console.WriteLine("C - Cell Phones and Accessories");
Console.WriteLine("D - Bags and Cases");
Console.WriteLine("E - Headphones");
Console.WriteLine("F - Instructional and Tutorials (VHS & DVD)");
Console.WriteLine("G - Digital Cameras");
Console.WriteLine("H - Cables and Connectors");
Console.WriteLine("I - PDAs and Accessories");
Console.WriteLine("J - Telephones and Accessories");
Console.WriteLine("K - Surge Protector");
Console.WriteLine("L - TVs and Videos");
Console.WriteLine("U - Unknown");
Console.Write("Your Choice? ");
category = char.Parse(Console.ReadLine());
Console.Write("Make: ");
make = Console.ReadLine();
Console.Write("Model: ");
model = Console.ReadLine();
Console.Write("Unit Price: ");
price = double.Parse(Console.ReadLine());
saleItem.SetItemNumber(itemNumber);
381
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
saleItem.SetCategory(category);
saleItem.SetMake(make);
saleItem.SetModel(model);
saleItem.SetUnitPrice(price);
return saleItem;
}
public void ShowSaleItem(StoreItem item)
{
double discountRate = GetDiscountRate();
int quantity = GetQuantity();
DiscountAmount = item.GetUnitPrice() * discountRate / 100;
NetPrice = item.GetUnitPrice() - DiscountAmount;
SaleTotal = NetPrice * quantity;
Console.WriteLine("\nStore Item Description");
Console.WriteLine("Item Number: {0}", item.GetItemNumber());
Console.WriteLine("Category: {0}", item.GetCategory());
Console.WriteLine("Make {0}", item.GetMake());
Console.WriteLine("Model: {0}", item.GetModel());
Console.WriteLine("Unit Price: {0:C}", item.GetUnitPrice());
Console.WriteLine("Discount Rate: {0:P}", discountRate / 100);
Console.WriteLine("Discount Amount: {0:C}", DiscountAmount);
Console.WriteLine("Price/Item: {0:C}", NetPrice);
Console.WriteLine("Quantity: {0}", quantity);
Console.WriteLine("Sale Total: {0:C}", SaleTotal);
}
}
public class OrderProcessing
{
public static int Main()
{
StoreItem item = new StoreItem();
SaleItem sale = new SaleItem();
string strTitle1 = "=-= Nearson Electonics =-=\n";
string strTitle2 = "******* Store Items ******";
Console.Title = "Electronic Super Store";
Console.WriteLine(strTitle1);
Console.WriteLine(strTitle2);
Console.Clear();
item = sale.Create();
sale.ShowSaleItem(item);
System.Console.ReadKey();
return 0;
}
}
}
. برنامه را اجرا کنید.2
. را بزنیدEnter کلید.1
382
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
=-= Nearson Electonics =-=
******* Store Items ******
Enter the Item #: 927374
Category
A - Audio Cables
B - Instructional and Tutorials (Books)
C - Cell Phones and Accessories
D - Bags and Cases
E - Headphones
F - Instructional and Tutorials (VHS & DVD)
G - Digital Cameras
H - Cables and Connectors
I - PDAs and Accessories
J - Telephones and Accessories
K - Surge Protector
L - TVs and Videos
U - Unknown
Your Choice? L
Make: NEC
Model: VT48 Video Projector
Unit Price: 705.95
Discount Applied (Enter 0 to 100، 0 if no discount): 15
Enter Quantity: 1
. را فشار دهیدEnter کلید.4
آرگومان را مثل هر کالس، برای این منظور.می توان نمونه ای از یک کالس را به عنوان آرگومان به یکی از متدهای خود آن کالس فرستاد
مثال
استفاده از آرگومان گفته شده ،الزم است به خاطر داشته باشید ،همگی (دیگر) اعضای کالس از طریق آرگومان قابل دسترسی هستند .ساده
ترین روش استفاده از آرگومان ،تخصیص (هر یک از) مقادیر آن به عضو های معادل و مربوط در کالس است.
مثال
ارسال می کنیم.
مثال
;using System
public class Point
{
;internal int x
;internal int y
)public void Equivalent(Point Same
{
;this.x = Same.x
;this.y = Same.y
}
}
public class Program
{
)private static void ShowPoint(Point pt
{
;)" Console.Write("Point Coordinates:
384
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Console.WriteLine("A({0}, {1})", pt.x, pt.y);
}
static int Main(string[] args)
{
Point pt = new Point();
pt.x = 4;
pt.y = 6;
ShowPoint(pt);
Point One = new Point();
One.Equivalent(pt);
ShowPoint(One);
return 0;
}
}
.نتیجه ی زیر حاصل می گردد
(calling می توانید نمونه ای از کالس مورد نظر را داخل پرانتز های متد فراخوان،به جای اینکه اول کالس را تعریف و مقداردهی اولیه کنید
( دارید که مقادیر فیلد های کالس مربوط را مشخص کرده تاconstructor) البته برای این منظور نیاز به سازنده ای.ایجاد کنیدmethod)
مثال
using System;
public class Point
{
internal int x;
internal int y;
public Point()
{
}
public Point(int XCoord, int YCoord)
{
this.x = XCoord;
this.y = YCoord;
}
public void Equivalent(Point Same)
{
this.x = Same.x;
this.y = Same.y;
}
385
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
}
public class Program
{
private static void ShowPoint(Point pt)
{
Console.Write("Point Coordinates: ");
Console.WriteLine("A({0}, {1})", pt.x, pt.y);
}
static int Main(string[] args)
{
Point pt = new Point();
pt.x = 4;
pt.y = 6;
ShowPoint(pt);
Point One = new Point();
One.Equivalent(new Point(-3, 2));
ShowPoint(One);
return 0;
}
}
حال می توانید در. می توان سازنده ای از کالس را برای ارسال نمونه ای از همان کالس به کار برد،(formal method) به جای متد رسمی
.) آرگومان را بر اساس نیازتان به کار ببرید (نظر به اینکه تمامی اعضای کالس در دسترس هستند،سازنده
مثال
386
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
با استفاده،.NET Framework در حقیقتC# زبان.هدف ما از ارسال یک کالس به متدهای خود همان کالس پیدا کردن معادل آن نیست
می توان متدی ایجاد کرد که نمونه ای از همان کالس را می گیرد ولی نمونه ی، در عوض. ترتیب فرایند باال را می دهدEquals() از متد توکار
Point جدیدی ایجاد کنیم که به اندازه ی یک واحد از شیpoint ،Point شاید بخواهیم برای کالس، برای مثال.نام برده را اصالح می کند
using System;
public class Point
{
internal int x;
internal int y;
public Point()
{
}
public Point(int XCoord, int YCoord)
{
this.x = XCoord;
this.y = YCoord;
}
public void Equivalent(Point Same)
{
this.x = Same.x;
this.y = Same.y;
}
public void CreatePointOneUnitAway(Point AddUnit)
{
this.x = AddUnit.x + 1;
this.y = AddUnit.y + 1;
}
}
public class Program
{
private static void ShowPoint(Point pt)
{
Console.Write("Point Coordinates: ");
Console.WriteLine("A({0}, {1})", pt.x, pt.y);
}
387
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;))One.CreatePointOneUnitAway(new Point(-8, -3
;)ShowPoint(One
;return 0
}
}
نتیجه ی زیر به دست می آید.
می توانید متدی در کالس ایجاد کنید که نمونه ای از همان کالس را بر می گرداند .برای شروع کار ،اسم کالس مربوط را در سمت چپ متد وارد
کنید.
مثال
تعریف و مقداردهی اولیه کرده ،سپس آن را برگردانید .به مثال زیر توجه کنید.
;using System
public class Point
{
;internal int x
;internal int y
)(public Point
{
}
)public Point(int XCoord, int YCoord
{
;this.x = XCoord
;this.y = YCoord
}
)public Point(Point Same
{
;this.x = Same.x
388
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
this.x = Same.x;
}
public Point AdvanceBy5()
{
Point Some = new Point();
Some.x = 5;
Some.y = 5;
return Some;
}
}
public class Program
{
private static void ShowPoint(Point pt)
{
Console.Write("Point Coordinates: ");
Console.WriteLine("A({0}, {1})", pt.x, pt.y);
}
static int Main(string[] args)
{
Point pt = new Point();
pt.x = 4;
pt.y = 6;
ShowPoint(pt);
Point Away5 = pt.AdvanceBy5();
ShowPoint(Away5);
return 0;
}
}
نتیجه
مقادیر جاری کالس را همراه با مقدارهای نمونه ی کالس به کار ببرید تا مقادیر جدیدی به دست،می توانید نمونه ای از کالس را تعریف کرده
مثال
using System;
public class Point
{
internal int x;
389
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
internal int y;
public Point()
{
}
public Point(int XCoord, int YCoord)
{
this.x = XCoord;
this.y = YCoord;
}
public Point(Point Same)
{
this.x = Same.x;
this.x = Same.x;
}
public Point AdvanceBy5()
{
Point Some = new Point();
Some.x = this.x + 5;
Some.y = this.y + 5;
return Some;
}
}
public class Program
{
private static void ShowPoint(Point pt)
{
Console.Write("Point Coordinates: ");
Console.WriteLine("A({0}, {1})", pt.x, pt.y);
}
static int Main(string[] args)
{
Point pt = new Point();
pt.x = 4;
pt.y = 6;
ShowPoint(pt);
Point Away5 = pt.AdvanceBy5();
ShowPoint(Away5);
return 0;
}
}
.نتیجه ی زیر را به دست می دهد
390
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
تعریف، الزم است نمونه ی کالس را از آن جایی که متد را فرا می خوانید، چنانچه متد ایستا نبود،به یاد داشته باشید که برای فراخوانی متد
می توانید مقادیری به فیلدهای آن، برای مثال. نوع دیگر پیاده سازی ( روش دوم آن) اصالح نمونه ای است که متد را فرا می خواند.کنید
.( پیاده کنیدcalling instance) یا هر عملیات دیگری که نیاز دارید روی اعضای نمونه ی فراخوان،اضافه کنید
مثال
using System;
public class Point
{
internal int x;
internal int y;
public Point()
{
}
public Point(int XCoord, int YCoord)
{
this.x = XCoord;
this.y = YCoord;
}
public Point(Point Same)
{
this.x = Same.x;
this.x = Same.x;
}
// This method adds 1 to each field of the class
// to get a new point away North-East of the current point
public Point CreatePointOneUnitAway()
{
this.x = this.x + 1;
this.y = this.y + 1;
return this;
}
}
public class Program
{
private static void ShowPoint(Point pt)
{
Console.Write("Point Coordinates: ");
Console.WriteLine("A({0}, {1})", pt.x, pt.y);
}
static int Main(string[] args)
{
Point pt = new Point();
pt.x = 4;
pt.y = 6;
ShowPoint(pt);
391
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;)Point One = new Point(-8, 5
;)(Point Another = One.CreatePointOneUnitAway
;)ShowPoint(Another
;return 0
}
}
نتیجه ی زیر حاصل می گردد.
شایان توجه است که می توان متدی ساخت که عالوه بر گرفتن آرگومان با کالس والد خود هم نوع باشد .در متد ،می توان به تمامی اعضای
کالس دسترسی داشت که از جمله ی آن فراخواندن دیگر متدهای کالس مربوط می باشد.
هنگام تعامل با کامپیوتر ،کاربر ممکن است مقادیری را به برنامه ی در حال اجرا عرضه کند که برخی از این مقادیر معتبر هستند ولی برخی
دیگر نیاز به اصالحاتی دارند یا توسط رایانه رد می شوند .برای جلوگیری از این رخداد مقادیر باید مرتب مورد بررسی قرار بگیرند .اعتبار یک
مقدار در رابطه با نوعش بررسی می شود .برای مثال ،یک شرط می تواند درست باشد یا یک عدد مساوی عدد دیگری باشد.
برای اعتبار سنجی مقادیر ،زبان C#یک سری نشانه عرضه می کند که از آن ها به عنوان عملگرهای Booleanیاد می شود.
برای ایجاد برنامه ی جدید ،به فهرست اصلی مراجعه کرده ،روی File -> New Project...کلیک کنید. .2
برای ایجاد فایل جدید ،در پنجره ی ،Solution Explorerراست کلیک کرده سپس NationalBank2 -> Add -> New Item... .5
392
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
. تغییر دهیدEmployee اسم فایل را به .4
. را کلیک کنیدAdd .1
.NationalBank2 -> Add -> New Item... : راست کلیک کرده سپس،Solution Explorer در پنجره ی، برای ایجاد فایل جدید.82
تغییر دهید و کلیدManagement اسم آن را به. انتخاب شده باشدCode File توجه داشته باشید که در لیست میانی گزینه ی.88
. را بزنیدEnter
using System;
public class Management
{
private static Employee HireEmployee()
{
Employee empl = new Employee();
Console.Title = "National Bank";
Console.WriteLine("=======================");
Console.WriteLine("==-= National Bank =-==");
Console.WriteLine("To hire a new employee, enter the following information");
Console.WriteLine("-----------------------");
Console.Write("Employee #: ");
empl.EmployeeNumber = Console.ReadLine();
Console.Write("First Name: ");
empl.FirstName = Console.ReadLine();
Console.Write("Last Name: ");
empl.LastName = Console.ReadLine();
Console.Write("Hourly Salary: ");
393
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
empl.HourlySalary = double.Parse(Console.ReadLine());
Console.WriteLine("=======================");
return empl;
}
private static void ShowEmployeeRecord(Employee empl)
{
Console.Title = "National Bank";
Console.WriteLine("=======================");
Console.WriteLine("==-= National Bank =-==");
Console.WriteLine(" Employee Record");
Console.WriteLine("-----------------------");
Console.WriteLine("Employee #: {0}", empl.EmployeeNumber);
Console.WriteLine("First Name: {0}", empl.FirstName);
Console.WriteLine("Last Name: {0}", empl.LastName);
Console.WriteLine("Hourly Salary: {0}", empl.HourlySalary);
Console.WriteLine("=======================");
}
public static int Main()
{
Employee clerk = null;
clerk = HireEmployee();
Console.Clear();
ShowEmployeeRecord(clerk);
Console.ReadKey();
return 0;
}
}
. کلیک کنیدDebug -> Start Debugging سپس روی، به فهرست اصلی مراجعه کرده، برای اجرای برنامه.81
Employee # 88-602
394
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
=======================
====-= National Bank =-
Employee Record
-----------------------
Employee #: 88-602
First Name: Joan
Last Name: Bergman
Hourly Salary: 16.85
=======================
.86حال Enterرا زده تا پنجره ی DOSبسته شود.
به متغیری Booleanگفته می شود که مقدار آن از دو حالت trueیا falseخارج نباشد .برای تعریف متغیر ،Booleanمی توان هر یک از دو
کلیدواژه ی varیا boolرا به کار برد .به مثال زیر توجه کنید.
;using System
public class Exercise
{
)(static int Main
{
;bool drinkingUnderAge
;return 0
}
}
می توان از نوع داده ی Booleanبرای تعریف متغیر Booleanاستفاده کرد .نوع داده ی Booleanبخشی از فضای نام Systemمی باشد.
مثال
;using System
public class Exercise
{
)(static int Main
{
;bool drinkingUnderAge
;Boolean theFloorIsCoveredWithCarpet
;return 0
}
}
پس از تعریف متغیر ،باید آن را با (مقدار) trueیا falseمقداردهی اولیه کرد .در حقیقت ،چنانچه متغیر نام برده را به عنوان varتعریف
کنید ،چاره ای جز مقداردهی اولیه ی آن ندارید .توجه خود را به مثال زیر جلب کنید.
395
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
using System;
public class Exercise
{
static int Main()
{
var drinkingUnderAge = true;
return 0;
}
}
تایپconsole کالسWriteLine() یاWrite() می توانید اسم آن را در پرانتزهای متد، در کنسولBoolean به منظور نمایش مقدار متغیر
using System;
public class Exercise
{
static int Main()
{
var drinkingUnderAge = true;
Console.WriteLine("Drinking Under Age: {0}", drinkingUnderAge);
return 0;
}
}
نتیجه
using System;
public class Exercise
{
static int Main()
{
var drinkingUnderAge = true;
Console.WriteLine("Drinking Under Age: {0}", drinkingUnderAge);
drinkingUnderAge = false;
Console.WriteLine("Drinking Under Age: {0}", drinkingUnderAge);
return 0;
}
}
396
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Drinking Under Age: True
Drinking Under Age: False
Press any key to continue...
) را تایپfalse (یاFalse ) یاtrue (یاTrue الزم است کاربر، در این مورد. را از کاربر در خواست کردBoolean می توان مقدار یک متغیر
مثال
using System;
public class Exercise
{
static int Main()
{
var drivingUnderAge = false;
Console.WriteLine("Were you driving under age?");
Console.Write("If Yes, enter True. Otherwise enter False: ");
drivingUnderAge = bool.Parse(Console.ReadLine());
Console.WriteLine("\nWas Driving Under Age: {0}\n", drivingUnderAge);
return 0;
}
}
مثال
متغیر. را به فیلد یک کالس تبدیل کردBoolean می توان متغیر،مثل دیگر نوع متغیر هایی که در مباحث پیشین با آن برخورد داشتیم
. تعریف می کنیدBoolean یا نوع داده یbool البته با کلید واژه ی،مذکور را مثل هر نوع متغیر دیگر
مثال
397
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
int beds;
float baths;
byte stories;
bool hasCarGarage;
int yearBuilt;
double value;
}
به متغیر مربوط اختصاصfalse یاtrue کافی است، یک عضو آن محسوب می شودBoolean هنگام مقداردهی اولیه ی شی ای که متغیر
نمونه های آن را در زیر مشاهده می. را با دسترسی به آن بازیابی یا چک کنیدBoolean می توانید مقدار متغیر عضو، به همین نحو.دهید
.کنید
using System;
public class House
{
public char typeOfHome;
public int beds;
public float baths;
public byte stories;
public bool hasCarGarage;
public int yearBuilt;
public double value;
}
public class Program
{
static int Main()
{
var Condominium = new
{
hasCarGarage = false,
yearBuilt = 2002,
baths = 1.5F,
stories = 18,
value = 155825,
beds = 2,
typeOfHome = 'C'
};
Console.WriteLine("=//= Altair Realtors =//=");
Console.WriteLine("=== Property Listing ===");
Console.WriteLine("Type of Home: {0}", Condominium.typeOfHome);
Console.WriteLine("Number of Bedrooms: {0}", Condominium.beds);
Console.WriteLine("Number of Bathrooms: {0}", Condominium.baths);
Console.WriteLine("Number of Stories: {0}", Condominium.stories);
Console.WriteLine("Year Built: {0}", Condominium.yearBuilt);
Console.WriteLine("Has Car Garage: {0}", Condominium.hasCarGarage);
Console.WriteLine("Monetary Value: {0}\n", Condominium.value);
return 0;
}
398
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
}
چنین آرگومانی می تواند تنها دو مقدار. به متد ارسال کردBoolean یاbool می توان آرگومان (از) نوع،درست مثل پارامترهای انواع دیگر
enumeration
می خواهید برنامه ای که نوشته اید از مشتری نوع خانه ای را، هنگام برنامه نویسی برای شرکتی که معامالت امالک انجام می دهد،تصور کنید
مثال
using System;
public class Exercise
{
static int Main()
{
int typeOfHouse = 0;
int typeOfGarage = 0;
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1 - Single Family");
Console.WriteLine("2 - Townhouse");
Console.WriteLine("3 - Condominium");
Console.Write("Your Choice: ");
typeOfHouse = int.Parse(Console.ReadLine());
Console.WriteLine("Enter the type of garage you want");
Console.WriteLine("0 - Doesn't matter");
399
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;)"Console.WriteLine("1 - Interior
;)"Console.WriteLine("2 - Exterior
;)" Console.Write("Your Choice:
;))(typeOfGarage = int.Parse(Console.ReadLine
;)(Console.Clear
;)Console.WriteLine("\nHouse Type: {0}", typeOfHouse
;)Console.WriteLine("Garage Type: {0}", typeOfGarage
;return 0
}
}
برای چنین برنامه ای ،ارقام ممکن است گنگ یا مبهم باشد .عدد ،8رقمی کلی است ولی در برنامه ی مورد نظر ممکن است نشانگر خانه ای با
ظرفیت گنجایش تنها یک خانوار باشد .حال برنامه ی نام برده از ثابت 8در راه های معنی دار مختلفی بهره می برد .برای ایجاد امکان دادن بیش
از یک معنی یا کاربرد به یک عدد ثابت ،به خصوص هنگامی که قرار است عدد مربوطه جزئی از یک سری باشد ،زبان برنامه نویسی C#به شما
enumerationدر واقع یک سری عدد صحیح ثابت ( )constant integerاست که هر یک موقعیت خاصی در لیست دارد و با اسم مشخصی
شناسایی می شود .بر این اساس ،به جای به خاطر داشتن این که ثابت 8نشانگر تک خانوار است ،می توان لیستی ایجاد کرد که نمونه ی خانه
ی مزبور را شامل می شود .در لیست دیگر ،به جای استفاده ی دوباره از ،8می توان اسم برای آن انتخاب کرد .در نتیجه ،در هر لیست ،اگرچه
ثابت 8باز هم در نظر گرفته می شود ،حداقل معنای آن دقیق خواهد بود.
400
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
ایجاد enumeration
برای این منظور ،کلیدواژه ی enumو به دنبال آن اسم enumerationو همچنین اسمی مختص هر یک از آیتم های لیست را تایپ کنید .اسم
شمارنده ( )enumeratorو همچنین اسم تک تک آیتم های لیست از همان قوانینی که برای انتخاب اسم (ها) نام بردیم پیروی می کند.
برای ایجاد ،enumerationمی توانید کد را به صورت دستی وارد کنید .برای استفاده از ،code snippetروی بخش مورد نظر راست کلیک
کرده ،سپس Insert Snippet...را انتخاب کنید .اکنون روی Visual C#دوبار کلیک کنید .در لیستی که نمایان می شود ،روی enumدوبار
کلیک کنید.
مثال
;using System
public class Exercise
{
401
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
} enum HouseType { Unknown, SingleFamily, TownHouse, Condominium
)(static int Main
{
;return 0
}
}
پس از ایجاد ،enumerationهر یک از اعضای آن ،مقدار عدد طبیعی مثل 25،12 ،4 ،0خواهند داشت.
پس از ایجاد ،enumerationحتی می توان از آن متغیر تعریف کرد .به مثال زیر توجه کنید.
;using System
public class Exercise
{
} enum HouseType { Unknown, SingleFamily, TownHouse, Condominium
)(static int Main
{
;HouseType propType
;return 0
}
}
الزم به ذکر است که می توان متغیر (از) نوع enumerationرا با کلید واژه ی varنیز تعریف کرد.
پس از تعریف متغیر برای نوع ،enumerationبه منظور مقداردهی اولیه ی آن ،مشخص کنید کدام عضو enumerationبه متغیر اختصاص
داده شود .شایان توجه است که تنها عضو شناس enumerationباید به متغیر تخصیص یابد .برای این منظور ،در سمت راست عملگر
جایگزین ،اسم enumerationو به دنبال آن عملگر نقطه ،عضوی که می خواهید مقدار آن را اختصاص دهید ،تایپ کنید.
مثال
;using System
public class Exercise
{
} enum HouseType { Unknown, SingleFamily, TownHouse, Condominium
)(static int Main
402
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
{
;var propType = HouseType.SingleFamily
;return 0
}
}
همچنین می توان مقداری را که متغیر تعریف شده در حال حاضر دارد ،به دست آورد .برای مثال ،می توان آن را در کنسول و با استفاده از
متدهای )( Writeو )( WriteLineنمایش داد .به مثال زیر توجه کنید.
;using System
public class Exercise
{
} enum HouseType { Unknown, SingleFamily, TownHouse, Condominium
)(static int Main
{
;var propType = HouseType.SingleFamily
;)Console.WriteLine("House Type: {0}", propType
;return 0
}
}
enumerationدر واقع لیستی از اعداد است که هر یک توسط اسم معینی شناسایی می شود .به صورت پیش فرض ،اولین آیتم لیست
مقدار 2را دارد ،دومی مقدار 8و غیره ...برای مثال ،در Unknown ،HouseType enumerationمقدار 2را دارد ،در حالی که عضو
Townhouseمقدار .2مقادیر گفته شده پیش فرض هستند .چنانچه ،با مقادیر باال موافق نیستید می توانید مقدار هر یک از اعضای لیست
را خود تعیین کنید .برای مثال ،اگر بخواهیم عضو Unknownدر enumerationفوق مقدار 5داشته باشد ،کافی است عملگر جایگزین " = "
;using System
public class Exercise
{
} enum HouseType { Unknown = 5, SingleFamily, TownHouse, Condominium
)(static int Main
{
;return 0
}
}
403
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
در این مورد عضو ،Unknownمقدار 5را خواهد داشت SingleFamily ،مقدار ،6به این خاطر که پس از عضوی قرار گرفته که مقدار آن 8
می باشد (بنابراین .)5 + 1 = 6عضو Townhouseمقدار 4و Condominiumمقدار 1را خواهد داشت .همچنین می توان مقداری را به
مثال
;using System
public class Exercise
{
} enum HouseType { Unknown = 3, SingleFamily = 12, TownHouse, Condominium = 8
)(static int Main
{
;return 0
}
}
در این مثال Townhouse ،مقدار 81را خواهد داشت زیرا پس از عضو SingleFamilyقرار گرفته که مقدار آن 82می باشد.
به صورت پیش فرض ،پس از ایجاد ،enumerationدسترسی به آن تنها از طریق پروژه ای امکان پذیر می باشد که در آنenumeration ،
ایجاد شده است .درست مثل کالس ،می توان (سطح دسترسی) دسترسی به enumerationرا بیرون از پروژه اش مدیرت و تنظیم کرد .به
عبارت دیگر ،می توان enumerationرا پنهان کرد یا برعکس بیرون از پروژه اش آن را قابل رویت ساخت .برای این منظور ،می توانید
کلیدواژه ی های privateو publicرا پیش از enumerationقرار دهید .نظر خود را به مثال زیر جلب کنید.
;using System
public class Exercise
{
public enum HouseType
{
Unknown,
SingleFamily,
TownHouse,
Condominium
}
)(static int Main
{
;HouseType propType = HouseType.SingleFamily
;)Console.WriteLine("House Type: {0}", propType
404
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;return 0
}
}
پس از ایجاد ،enumerationمی توان از آن به عنوان یک نوع داده برای تعریف متغیر استفاده کرد .برای ایجاد فیلد (از) نوع
،enumerationباید همان قوانینی را که برای داده های نوع اولیه رعایت می کردیم پیاده کنیم :اسم ،enumerationبه دنبال آن اسم
متغیر و نقطه ویرگول " ; " .به مثال زیر توجه کنید :
به همین ترتیب ،می توان هر تعداد متغیر عضو که الزم است ایجاد کرد .پس از تعریف متغیر ،برای مقداردهی اولیه ی آن ،عضو دلخواه
مثال
405
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
به منظور نمایش مقدار متغیر، برای مثال. می توانید آن را هر طور که مایلید مورد استفاده قرار دهید،پس از مقداردهی ا ولیه متغیر عضو
. به مثال زیر توجه کنید. ارسال کردWriteline() یاWrite() عضو می توان آن را به متدهای
using System;
public enum HouseType
{
Unknown,
SingleFamily,
TownHouse,
Condominium
}
public class House
{
public HouseType propertyType;
public House()
{
propertyType = HouseType.Unknown;
}
public void Display()
{
Console.WriteLine("Property Type: {0}", propertyType);
}
}
public class Exercise
{
static int Main()
{
var propType = new House();
propType.Display();
Console.WriteLine();
propType.propertyType = HouseType.SingleFamily;
propType.Display();
Console.WriteLine();
return 0;
}
}
همچنین می توانید. بازمی گرداندenumeration می توانید متدی ایجاد کنید که،چنانچه از آن به عنوان یک نوع داده ی ساده استفاده کنید
همان طور که پیش تر ذکر شد ،پس از این که enumerationایجاد می شود ،دیگر یک نوع تلقی می گردد .می توان آن را به عنوان آرگومان
Enumerationبه همان شکلی که یک نوع داده ی معمولی فرستاده می شود ،باید به عنوان آرگومان ارسال گردد.
مثال
به همین ترتیب ،می توان هر تعداد نوع شمارشی که الزم است ارسال کرد .می توان enumerationرا در بدنه ی رویه ( )procedureبه
کاربرد و مورد استفاده قرار داد یا آن را نادیده گرفت .هنگام فراخوانی رویه ،آرگومانی را ارسال کنید که نوع مقدارش از نوع شمارشی باشد.
مثال
;using System
public enum HouseType
{
Unknown = 2,
SingleFamily = 4,
TownHouse = 6,
Condominium = 8,
}
public class Exercise
{
)private static void ShowHouse(HouseType propType
{
;)Console.WriteLine("Type of house: {0}", propType
}
)(public static int Main
{
;HouseType ht
;ht = HouseType.SingleFamily
;)ShowHouse(ht
;)(Console.ReadKey
;return 0
}
}
407
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
نتیجه
می توان مقدار برای آرگومان گفته شده ارسال کرد یا از، هنگام فراخوانی متد.اختصاص دهیم از عملگر جایگزین " = " استفاده می کنیم
مثال
using System;
public enum HouseType
{
Unknown = 2,
SingleFamily = 4,
TownHouse = 6,
Condominium = 8,
}
public class Exercise
{
private static void ShowHouse(HouseType propType = HouseType.Unknown)
{
Console.WriteLine("Type of house: {0}", propType);
}
public static int Main()
{
HouseType ht;
ht = HouseType.SingleFamily;
ShowHouse();
return 0;
}
}
408
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
: فایل مذکور را به صورت زیر ویرایش نمایید،enumeration برای ایجاد تعدادی.2
using System;
public class Management
{
private static Employee HireEmployee()
{
int? status = null;
Employee empl = new Employee();
409
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Console.Write("First Name: ");
empl.FirstName = Console.ReadLine();
Console.Write("Last Name: ");
empl.LastName = Console.ReadLine();
Console.Write("Title: ");
empl.Title = Console.ReadLine();
Console.Write("Hourly Salary: ");
empl.HourlySalary = double.Parse(Console.ReadLine());
Console.WriteLine("Employment Status");
Console.WriteLine("1. Full-Time");
Console.WriteLine("2. Part-Time");
Console.WriteLine("3. Intern");
Console.Write("Your Choice? ");
Status = int.Parse(Console.ReadLine());
empl.status = (EmploymentStatus)(status - 1);
Console.WriteLine("=======================================");
return empl;
}
410
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Employee # 42-855
First Name Paula
Last Name Meyer
Title Cashier
Hourly Salary 18.25
Employment Status 2
=======================================
==-= National Bank =-==
To hire a new employee, enter the following information
---------------------------------------
Employee #: 42-855
First Name: Paula
Last Name: Meyer
Title: Cashier
Hourly Salary: 18.25
Employment Status
1. Full-Time
2. Part-Time
3. Intern
Your Choice? 2
=======================================
==-= National Bank =-==
Employee Record
---------------------------------------
Employee #: 42-855
First Name: Paula
Last Name: Meyer
Employee Title: Cashier
Hourly Salary: 18.25
Employment Status: PartTime
=======================================
411
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
از متدenumeration برگرداندن
در بدنه ی. مشخص کنیدenumeration نوع بازگشتی آن را به عنوان اسم، باز می گرداندenumeration برای ایجاد متدی که
مطمئن شوید مقداری که بازمی گردانید از نوع شمارشی، پیش از خروج از متد. هر کاری که الزم است انجام دهید،enumeration
. می توان مقدار بازگشتی آن را برای این منظور مورد استفاده قرار داد.می توان متدی را که نوع شمارشی بازمی گرداند با اسم آن فراخواند
مثال
using System;
public enum HouseType
{
Unknown = 2,
SingleFamily = 4,
TownHouse = 6,
Condominium = 8,
}
public class Exercise
{
private static void ShowHouse(HouseType propType = HouseType.Unknown)
{
Console.WriteLine("Type of house: {0}", propType);
}
private static HouseType SpecifyPropertyType()
{
HouseType pt;
pt = HouseType.TownHouse;
return pt;
}
public static int Main()
{
412
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;HouseType ht
;)(ht = SpecifyPropertyType
;)ShowHouse(ht
;return 0
}
}
عملگرهای منطقی
مقدمه
برنامه در واقع مجموعه ای از دستور ها است که از compilerدرخواست می کند شرایط را بسنجد و بر اساس آن شرایط عمل کند .برای
بررسی چنین شرایطی ،کامپیوتر بخش عظیمی از زمان خود را صرف مقایسه ی مقادیر مختلف می کند .فرایند مقایسه در حقیقت همان عملیات
Booleanاست که بسته به مقادیری که مقایسه بر پایه ی آن انجام شده نتیجه ی صحیح ( )trueیا غلط ( )falseمی دهد.
مقایسه بین دو مقدار هم نوع صورت می گیرد ؛ برای مثال ،می توان دو عدد ،دو کاراکتر ،اسامی دو شهر را با هم مقایسه کرد .از سوی دیگر،
مقایسه ی بین دو مقدار متف اوت (از نوع مختلف) کامالً بی معنا می باشد .برای مثال ،نمی توان یک شماره تلفن را با سن کسی مقایسه کرد یا
یک نوع موسیقی را با فاصله ی بین دو نقطه قیاس کرد .مشابه عملیات حسابی دودویی ( ،)binaryعملیات مقایسه بر اساس دو مقدار
صورت می گیرد .بر خالف عملیات حسابی که نتایج حاصله آن متنوع و متفاوت هستند ،نتیجه ی فرایند مقایسه از دو حالت خارج نیست به
طوری که نتیجه یا منطقی صحیح ( )logical trueیا منطقی ناصحیح ( )logical falseاست .در صورتی که مقایسه صحیح باشد ،مقدار توکار 8
یا مثبت را به دست می دهد ،که منظور همان مقداری است که از 2بزرگتر باشد .چنانچه مقایسه صحیح یا trueنباشد ،غلط یا falseتلقی می
زبان C#مجهز به عملگرهای گوناگونی است که به کمک آن ها می توان هر قسم مقاسیه ای بین مقادیر هم نوع انجام داد .مقادیر نام برده
می توانند عددی ،از نوع رشته و یا اشیاء باشند (عملیاتی که بر روی اشیا صورت می گیرد در فرایندی به نام operator overloadingیا
هنگام نوشتن دستورات شرطی (دستوراتی که در شرطی ها به کار می روند) یک سری ملزومات اولیه هست که باید رعایت کرد.
413
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
سادگی و وضوح :یک دستور باید کامالً واضح و تا حد ممکن ساده ولی در عین حال کامل باشد .زمانی که دستوری طوالنی می گردد ،ممکن
است به بخش های کوتاه مختلفی تقسیم شود که وضوح دستور را مختل کرده و منجر به بروز مسائل و مشکالت متعددی می شود.
واقعی :دستور مورد نظر باید به عنوان یک حقیقت عرضه شود و نه یک نظر یا عقیده ،به این معنا که لزومی ندارد شما آن دستور را دوست
داشته باشید بلکه باید مثل اکثریت آن را به عنوان صحیح ( )trueیا غلط ( )falseبپذیرید .در حقیقت ،نیازی نیست که دستور به خودی خود
درست باشد بلکه باید آن را به عنوان صحیح پذیرفت .بر این اساس ،دستوری مثل اینکه " یک ساعت 45دقیقه هست " لزومی ندارد با نظر
شما همخوانی داشته باشد بلکه باید یا به عنوان صحیح یا غلط پذیرفته شود .دستوری مثل " این متقاضی شغل گزینه ی مناسبی است " یک
درستی ضمنی و وابسته به موقعیت :زمانی که دستوری نوشته یا ایجاد می شود باید به عنوان صحیح یا غلط پذیرفته شود ،اگرچه ممکن
است بعده ها تغییر کند .برای مثال ،تصور کنید در سال مشخصی دستوری به این صورت نوشته شود " امسال ماه فبریه 21روز خواهد
داشت " .اگرچه استفاده از آن مجاز می باشد ،باید تا حد ممکن از به کاربردن آن خودداری کرد ،مگر در شرایط اضطراری.
معکوس :باید این امکان وجود داشته باشد که یک دستور عکس خود را پیدا کند .به عبارت روشن تر ،زمانی که دستوری نوشته و به عنوان
صحیح یا غلط پذیرفته می شود ،دستور ضد یا مغایری باید وجود داشته باشد که آن را عکس کند (از غلط به صحیح و بالعکس) .برای مثال،
چنانچه دستوری دارید مانند " این متقاضی کار 81سال سن دارد " باید این امکان وجود داشته باشد که بگویید " این متقاضی کار 81ساله
نیست " یا " این متقاضی کار جوان تر از 81سال به نظر می رسد ".
سعی کنید تا حد ممکن دستورات خود را دقیق و واضح بیان و تنظیم کنید .با این کار برنامه های شما خوانا می شوند و عیب زدایی آن آسان
می گردد.
برای مقایسه ی دو متغیر C# ،عملگر == را به کار می برد .فرمول آن به شرح زیر می باشد.
value1 == Value2
عملیات تساوی به منظور کشف برابری بین دو متغیر (یا یک متغیر و یک ثابت) بکار می رود؛ به عبارت دیگر ،ایا دو متغیر مقدار یکسانی دارند
یا نه compiler .از طریق دستور نحوی ،مقدار value1و value2را با هم مقایسه می کند .چنانچه مقدار این دو valueبا هم یکسان یا
برابر بود ،عملیات مقایسه نتیجه ی صحیح یا trueرا به دست می دهد ،اما در صورتی که دو متغیر فوق با هم متفاوت باشند (مقدار آن ها
414
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
اغلب مقایسه هایی که در زبان C#صورت می گیرد ،برای دستورات شرطی به کار گرفته می شود .نتیجه ی پروسه ی مقایسه را می توان به
یک متغیر نیز اختصاص داد .برای ذخیره ی نتیجه ی مقایسه ،الزم است عملیات مقایسه را داخل پرانتز قرار دهید.
مثال
;using System
public class Exercise
{
)(static int Main
{
;var value1 = 15
;var value2 = 24
;)" = Console.Write("Value 1
;)Console.WriteLine(value1
;)" = Console.Write("Value 2
;)Console.WriteLine(value2
;)" Console.Write("Comparison of value1 == 15 produces
;)Console.WriteLine(value1 == 15
;return 0
}
}
Value 1 = 15
Value 2 = 24
Comparison of value1 == 15 produces True
415
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
الزم است بین عملگر جایگزین " = " و عملگر منطقی تساوی " == " تفاوت قائل شد .عملگر جایگزین برای دادن مقداری جدید به متغیر به کار
می رود مانند عدد .= 244به یاد داشته باشید که عملوندی ( )operandکه در سمت چپ " = " قرار می گیرد باید همیشه یک متغیر باشد و
نه یک ثابت .عملگر " == " هیچگاه برای تخصیص دادن مقدار به کار نمی رود ،و در صورت استفاده از آن برای این منظور با errorمواجه می
شوید .عملگر " == " تنها برای مقایسه ی دو مقدار به کار می رود .عملوندی که در سمت چپ عملگر مزبور قرار می گیرد می تواند متغیر ،ثابت
و یا یکی متغیر و دیگری ثابت باشد .چنانچه از یک عملگر به طور اشتباه به جای دیگری استفاده کنید هنگام ترجمه ی ( )compileبرنامه با
errorمواجه می شوید.
پس از تعریف و مقداردهی متغیر (این کار از طریق مقداردهی اولیه یا تغییر مقدار انجام می شود) ،در واقع متغیر مذکور در برنامه زنده (یا
ایجاد) می شود .حال متغیر می تواند در عملیات الزم شرکت داشته باشد compiler .حساب تمامی متغیرهای موجود در برنامه (و متغیرهایی
که در حال پردازش هستند) را دارد( .چنانچه متغیری مورد استفاده قرار نگیرد یا برای پردازش در دسترس نباشد که در برنامه نویسی
مجازی غیرفعال تلقی می گردد) برای غیرفعال کردن متغیر (به طور موقت) ،باید مقدار آن را ( nullifyتخصیص مقدار nullبه متغیر) کردC# .
متغیری را که مقدار آن تهی ( )Nullباشد sternدر نظر می گیرد .به منظور غیر فعال کردن (غیر قابل استفاده و از دسترس خارج ساختن آن)
متغیر ،حین توسعه و شکل گیری برنامه ،عملگر منطقی " ! " Notرا اعمال کنید .ترکیب نحوی آن به صورت زیر می باشد.
!Value
برای استفاده از عملگر منطقی Notدو گزینه ی اصلی پیش رو دارید .یکی از معمول ترین روش های استفاده از آن ،بررسی وضعیت متغیر
است.
برای تخصیص مقدار nullبه متغیر ،کافی است عالمت تعجب " ! " را سمت چپ متغیر قرار دهید .مانند مثال زیر
;using System
public class Exercise
{
)(static int Main
{
;bool hasAirCondition = true
;bool doesIt
;)" = Console.Write("hasAirCondition
;)Console.WriteLine(hasAirCondition
;doesIt = !hasAirCondition
Console.Write("doesIt ;)" =
;)Console.WriteLine(doesIt
416
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;return 0
}
}
hasAirCondition = True
doesIt= False
زمانی که متغیری مقداری دارد " ،زنده " یا فعال تلقی می شود .برای از دسترس خارج ساختن متغیر می توان عملگر " " Notرا به آن تخصیص
داد .پس از تخصیص مقدار تهی ( )nullبه متغیر ،مقدار منطقی آن تغییر می یابد .اگر مقدار منطقی متغیر trueیا همان 8بود ،حال به falseیا
2تبدیل می شود .به این ترتیب می توان مقدار منطقی متغیر را معکوس کرد.
برای کوچکتر نشان دادن مقداری از مقدار دیگر ،عملگر < را به کار ببرید .ترکیب نحوی عملگر نام برده به این شکل است.
دو عملیات پیشین را می توان با هم ترکیب کرد و با استفاده از آن دو مقدار را با هم مقایسه کرد .با این کار متوجه می شوید که دو مقدار با
هم برابرند یا مقدار اولی از مقدار دومی کوچک تر است .عملگر گفته شده به این شکل است <= :و دستور نحوی آن به ترتیب زیر می باشد.
417
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
عملگر =< درست مثل دو عمگلر پیشین ،عملیات مقایسه انجام می دهد .در صورتی که مقدار value1و value2برابر باشد ،نتیجه صحیح یا
مثبت به دست می آید .چنانچه عملوند طرف چپ ،که در این مورد منظور value1است ،مقداری داشته باشد که از مقدار عملوند دیگر،
برای بزرگتر نشان دادن مقداری از مقدار دیگر ،عملگر > مورد استفاده قرار می گیرد .فرمول آن به صورت زیر است.
هر دو عملگر ،در این مثال value1و ،value2می توانند متغیر باشند ،یا عملگر سمت چپ متغیر و دیگری ثابت باشد .چنانچه مقدار واقع در
سمت چپ عملگر بزرگتر از مقدار طرف راست آن بود ،مقایسه نتیجه ی صحیح یا مثبت را به دست می دهد .در غیر این صورت ،مقایسه نتیجه
418
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
بزرگتر یا مساوی =>
دو عملگر بزرگتر از و تساوی با هم ترکیب شده و عملگر رو به رو را تولید می کند .>= :به این عملگر " بزرگتر از یا مساوی " می گویند .دستور
عملیات مقایسه روی هر دو عملوند value1و value2اجرا می شود .چنانچه مقدار هر دو عملوند برابر باشد ،مقایسه نتیجه ی صحیح یا
مثبت می دهد .در صورتی که مقدار عملوند چپ از مقدار عملوند راست بزرگتر باشد ،باز هم نتیجه صحیح ( )trueخواهد شد .حال اگر مقدار
عملوند سمت چپ از مقدار عملوند سمت راست کوچکتر بود ،نتیجه ی فرایند غلط یا تهی ( )nullخواهد شد.
419
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
جدول زیر چکیده ی عملگرهای منطقی نام برده را فهرست می کند.
to
دستورات شرطی
دستور شرطی ،عبارتی است که نتیجه ی صحیح ( )trueیا غلط ( )falseبدهد .به منظور ایجاد عبارت ) (expressionالزم ،عملگرهای
Booleanرا به کار می ب ریم .در مبحث پیشین ،با نحوه ی اجرإ عملیات و دریافت نتایج و به کاربردن آن ها آشنا شدیم .برای استفاده از
عملیات ،Booleanزبان برنامه نویسی C#عملگر های شرطی خود را ارائه می دهد.
برای ایجاد برنامه ی جدید ،به فهرست گزینه ی اصلی مراجعه کرده ،روی File -> New Project...کلیک کنید. .2
. را بزنیدEnter کلید .5
ElectronicStore2 -> Add -> Class... : راست کلیک کرده سپسClass View در پنجره ی،به منظور ایجاد کالس جدید .6
421
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
}
if ایجاد شرط
using System;
public enum HouseType
{
Unknown,
SingleFamily,
TownHouse,
Condominium
}
public class Exercise
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
Console.WriteLine("\nDesired House Type: {0}", type);
return 0;
}
}
نتیجه
422
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
فرمول آن به. به کار برده می شودif عملگر، آنBoolean است یا نه) و استفاده از نتیجه یtrue/ به منظور بررسی عبارت (اینکه آیا صحیح
if(Condition) Statement;
. به عبارت دیگر می تواند فرمول زیر را داشته باشد، می تواند از همان نوع عملیات بولی باشد که در درس پیش با آن شنا شدیمCondition
) اگر دستور مربوطه (دستوری که باید اجرا شود. را اجرا می کندStatement ، برنامه ی مفسر، نتیجه ی صحیح تولید کندCondition چنانچه
مثال
using System;
public enum HouseType
{
Unknown,
SingleFamily,
TownHouse,
Condominium
}
public class Exercise
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
if (choice == 1) type = HouseType.SingleFamily;
Console.WriteLine("\nDesired House Type: {0}", type);
return 0;
}
}
نتیجه
423
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Enter the type of house you want to purchase
1. Single Family
2. Townhouse
3. Condominium
You Choice? 1
مثال. نوشت یا جای گذاری کردif باید آن را در خطی مجزا از عبارت شرط، طوالنی بودStatement در صورتی که
using System;
public enum HouseType
{
Unknown,
SingleFamily,
TownHouse,
Condominium
}
public class Exercise
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
if (choice == 1)
type = HouseType.SingleFamily;
Console.WriteLine("\nDesired House Type: {0}", type);
return 0;
}
}
در تنها یک خط جاif را در خطی مجزا از عبارت شرط قرار داد حتی اگر دستور مربوط آنقدر کوتاه باشد که با شرطStatement همچنین می توان
.شود
می توان از آن برای اجرای چندین دستور وابسته و تابع استفاده، اغلب برای بررسی تنها یک شرط به کار می رودif )اگر چه دستور (ساده ی
. به مثال زیر توجه کنید. مجموعه دستورات را داخل کاراکتر باز "{" و بسته ی "}" محصور کنید، برای بررسی چندین دستور.کرد
424
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
using System;
public enum HouseType
{
Unknown,
SingleFamily,
TownHouse,
Condominium
}
public class Exercise
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
if (choice == 1)
{
type = HouseType.SingleFamily;
Console.WriteLine("\nDesired House Type: {0}", type);
}
return 0;
}
}
همچنین می توان برای ایجاد دستور شرطی. فقط دستوری که بالفاصله پس از شرط قرار گرفته اجرا می شود،چنانچه کاراکتر {} را حذف کنید
روی، حال. را انتخاب کنیدCode Snippet... گزینه ی، روی بخش مورد نظر (بخشی که مایلید کد در آن اضافه شود) راست کلیک کرده،if
. به مثال های زیر توجه کنید. ایجاد کردif همچنین می توان چندین شرط
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
static int Main()
{
425
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
var type = HouseType.Unknown;
var choice = 0;
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
if (choice == 1)
type = HouseType.SingleFamily;
if (choice == 2)
type = HouseType.Townhouse;
if (choice == 3)
type = HouseType.Condominium;
Console.WriteLine("\nDesired House Type: {0}", type);
return 0;
}
}
نمونه ای از برنامه
. کلیک کنیدProject -> Add New Item... روی، فهرست گزینه ی اصلی را باز کرده،برای ایجاد فایل جدید .8
. دستورات زیر را وارد کنید،در فایل خالی که در اختیار شما قرار می گیرد .4
using System;
using ElectronicStore2;
public class Store
{
StoreItem CreateStoreItem()
{
int? category = null;
StoreItem sItem = new StoreItem();
Console.Title = "Electronic Super Store";
426
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Console.WriteLine("=-= Nearson Electonics =-=");
Console.WriteLine("******* Store Items ******");
Console.WriteLine(
"To create a store item, enter its information");
Console.Write("Item Number: ");
sItem.itemNumber = long.Parse(Console.ReadLine());
Console.WriteLine("Category");
Console.WriteLine("1. Unknown/Miscellaneous");
Console.WriteLine("2. Cables and Connectors");
Console.WriteLine("3. Cell Phones and Accessories");
Console.WriteLine("4. Headphones");
Console.WriteLine("5. Digital Cameras");
Console.WriteLine("6. PDAs and Accessories");
Console.WriteLine("7. Telephones and Accessories");
Console.WriteLine("8. TVs and Videos - Plasma / LCD");
Console.WriteLine("9. Surge Protector");
Console.WriteLine("10. Instructional and Tutorials (VHS & DVD)TVs and Videos");
Console.Write("Your Choice? ");
category = int.Parse(Console.ReadLine());
if (category == 1)
sItem.category = ItemsCategories.Unknown;
if (category == 2)
sItem.category = ItemsCategories.CablesAndConnectors;
if (category == 3)
sItem.category = ItemsCategories.CellPhonesAndAccessories;
if (category == 4)
sItem.category = ItemsCategories.Headphones;
if (category == 5)
sItem.category = ItemsCategories.DigitalCameras;
if (category == 6)
sItem.category = ItemsCategories.PDAsAndAccessories;
if (category == 7)
sItem.category = ItemsCategories.TelephonesAndAccessories;
if (category == 8)
sItem.category = ItemsCategories.TVsAndVideos;
if (category == 9)
sItem.category = ItemsCategories.SurgeProtectors;
if (category == 10)
sItem.category = ItemsCategories.Instructional;
Console.Write("Make: ");
sItem.manufacturer = Console.ReadLine();
Console.Write("Model: ");
sItem.model = Console.ReadLine();
Console.Write("Unit Price: ");
sItem.unitPrice = decimal.Parse(Console.ReadLine());
return sItem;
}
void DescribeStoreItem(StoreItem item)
{
Console.Title = "Electronic Super Store";
427
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Console.WriteLine("=-= Nearson Electonics =-=");
Console.WriteLine("******* Store Items ******");
Console.WriteLine("Store Item Description");
Console.WriteLine("Item Number: {0}", item.itemNumber);
Console.WriteLine("Category: {0}", item.category);
Console.WriteLine("Make: {0}", item.manufacturer);
Console.WriteLine("Model: {0}", item.model);
Console.WriteLine("Unit Price: {0:C}", item.unitPrice);
}
public static int Main()
{
Store st = new Store();
StoreItem saleItem = st.CreateStoreItem();
Console.Clear();
st.DescribeStoreItem(saleItem);
System.Console.ReadKey();
return 0;
}
}
. کلیک کنیدDebug -> Start Debugging روی، در فهرست گزینه ی اصلی،به منظور اجرای برنامه .5
. را بزنیدEnter اکنون، تایپ کرده369.00 ،) (قیمت محصول انتخابیunit price برای گزینه ی.82
428
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Your Choice? 5
Make: Canon
Model: PowerShot SX20IS
Unit Price: 369.00
. را بزنیدEnter کلید.88
if...else
:در زیر نمونه ای از آنچه در بخش پیشین آموختیم تشریح شده است
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
if (choice == 1)
type = HouseType.SingleFamily;
if (choice == 2)
429
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
type = HouseType.Townhouse;
if (choice == 3)
type = HouseType.Condominium;
Console.WriteLine("\nDesired House Type: {0}", type);
if (type == HouseType.SingleFamily)
Console.WriteLine("\nDesired House Matched");
return 0;
}
}
با توجه به گفته های پیشین می توان دستور مربوطه،) درآیدtrue( استفاده بکنید ونتیجه ی آن صحیحif چنانچه برای اجرای عملیات از شرط
if به عنوان یک جایگزین برای شرط. هر نتیجه ی دیگری نادیده گرفته می شود، همان طور که در بخش پیشین به آن پرداختیم.را اجرا کرد
: فرمول آن به ترتیب زیر است.) اجرا می شودelse اجرا نشدif استفاده می شود (به این معنا که اگرelse در چنین مواقعی از
if(Condition)
Statement1;
else
Statement2;
در. مشابه آنچه در مبحث پیشین به آن پرداختیم، باشدBoolean می تواند یک عملیاتCondition به خاطر داشته باشید این بار هم
راStatement2 کامپایلر،) بودfalse( غلطCondition چنانچه. را اجرا می کندStatement1 کامپایلر، درست بودCondition صورتی که
.اجرا می کند
مثال
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Program
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
430
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
if (choice == 1)
type = HouseType.SingleFamily;
if (choice == 2)
type = HouseType.Townhouse;
if (choice == 3)
type = HouseType.Condominium;
Console.WriteLine("\nDesired House Type: {0}", type);
if (type == HouseType.SingleFamily)
Console.WriteLine("Desired House Matched");
else
Console.WriteLine("No House Desired");
return 0;
}
}
نمونه ای دیگر
432
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
sItem.manufacturer = Console.ReadLine();
Console.Write("Model: ");
sItem.model = Console.ReadLine();
Console.Write("Unit Price: ");
itemPrice = decimal.Parse(Console.ReadLine());
if (itemPrice <= 0)
sItem.unitPrice = 0.00m;
else
sItem.unitPrice = itemPrice;
return sItem;
}
string GetItemCategory(ItemsCategories cat)
{
string strCategory = "Unknown";
if (cat == ItemsCategories.CablesAndConnectors)
strCategory = "Cables & Connectors";
if (cat == ItemsCategories.CellPhonesAndAccessories)
strCategory = "Cell Phones & Accessories";
if (cat == ItemsCategories.Headphones)
strCategory = "Headphones";
if (cat == ItemsCategories.DigitalCameras)
strCategory = "Digital Cameras";
if (cat == ItemsCategories.PDAsAndAccessories)
strCategory = "PDAs & Accessories";
if (cat == ItemsCategories.TelephonesAndAccessories)
strCategory = "Telephones & Accessories";
if (cat == ItemsCategories.TVsAndVideos)
strCategory = "TVs & Videos";
if (cat == ItemsCategories.SurgeProtectors)
strCategory = "Surge Protectors";
if (cat == ItemsCategories.Instructional)
strCategory = "Instructional";
return strCategory;
}
void DescribeStoreItem(StoreItem item)
{
string strCategory = GetItemCategory(item.category);
Console.Title = "Electronic Super Store";
Console.WriteLine("=-= Nearson Electonics =-=");
Console.WriteLine("******* Store Items ******");
Console.WriteLine("Store Item Description");
Console.WriteLine("Item Number: {0}", item.itemNumber);
Console.WriteLine("Category: {0}", strCategory);
Console.WriteLine("Make: {0}", item.manufacturer);
Console.WriteLine("Model: {0}", item.model);
Console.WriteLine("Unit Price: {0:C}", item.unitPrice);
}
public static int Main()
{
Store st = new Store();
433
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
StoreItem saleItem = st.CreateStoreItem();
Console.Clear();
st.DescribeStoreItem(saleItem);
System.Console.ReadKey();
return 0;
}
}
Debug -> Start Debugging : سپس, فهرست گزینه ی اصلی را باز کرده, برای اجرای برنامه.2
. را فشار دهیدEnter حال مقادیر را به ترتیب زیر وارد کنید و پس از هر کدام کلید.1
. را بزنیدEnter .4
یا دستور دوم اجراelse ، غلط بود و اجرا نشدif (اگرelse بررسی شود در غیر این صورت به عنوانif چنانچه شرطی دارید که ابتدا به عنوان
. " می باشد: " می توان از عملگر سه تایی استفاده کرد که ترکیبی از" ? " و،)شد
فرمول
اجرا میStatement2 در غیر این صورت، اجرا می شودStatement1 درست بودCondition اگر. را چک می کندCondition کامپایلر ابتدا
. برنامه ی زیر با استفاده از عملگر شرطی دو عدد را باهم مقایسه کرده و عدد بزرگ تر را مشخص می کند.شود
using System;
public class Exercise
{
static int Main()
{
var Number1 = 0;
var Number2 = 0;
var Maximum = 0;
var Num1 = "";
var Num2 = "";
Console.Write("Enter first numbers: ");
Num1 = Console.ReadLine();
Console.Write("Enter second numbers: ");
Num2 = Console.ReadLine();
Number1 = int.Parse(Num1);
Number2 = int.Parse(Num2);
Maximum = (Number1 < Number2) ? Number2 : Number1;
Console.Write("\nThe maximum of ");
Console.Write(Number1);
Console.Write(" and ");
Console.Write(Number2);
Console.Write(" is ");
Console.WriteLine(Maximum);
Console.WriteLine();
return 0;
}
}
مثال
435
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Enter first numbers: 244
Enter second numbers: 68
The maximum of 244 and 68 is 244
به خاطر دارید که هنگام تعریف متغیر (از) نوع اولیه ،می توان یک عالمت سوال به نوع داده اضافه کرد که از این طریق مشخص شود متغیر
مثال
;using System
public class Exercise
{
)(public static int Main
{
;double? distance = null
;)(Console.WriteLine
;return 0
}
}
ممکن است الزم شود مقدار چنین متغیری را به متغیر دیگری تخصیص دهید .چنانچه مقدار متغیر nullباشد (به این معنا که مقداری نداشته
باشد یا مقدار آن تهی باشد) ،دیگر تخصیص آن به متغیر دیگر بی معنا خواهد بود .بنابراین ،ابتدا باید بررسی شود که مقدار متغیر مزبور،
مقداری تهی است یا مقدار واقعی .به عبارت دیگر از compilerدرخواست بررسی متغیر را می کنید تا مشخص شود مقدار آن مقداری تهی
در صورتی که متغیر مقداری حقیقی دارد ،نه تهی ،می توان مقدار آن را به متغیر جدید تخصیص داد
چنانچه متغیر تهی ( )nullبود ،مقداری جایگزین به متغیر نام برده اختصاص می دهید
برای پشتیبانی از این امکان ،زبان C#عملگر "??" را در اختیار شما قرار می دهد .فرمول آن به ترتیب زیر است.
436
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
را تعریف کرده و این متغیر باید قادر به نگه داشتن مقدار تهی باشد که از طریق افزودن عملگرOriginalVariable در وهله ی اول الزم است
را پیش از مقداردهی اولیه تعریف کرد و هم حینTargetVariable توجه داشته باشید که هم می توان.? به آن امکان پذیر می شود
. مثال ذیل عملگر ?? را به کار می برد. الزم به ذکر است که هر دو متغیر باید سازگار با هم باشند.مقداردهی آن
using System;
public class Exercise
{
public static int Main()
{
double? distance = null;
double? fromTo = null;
Console.WriteLine("Distance 1: {0}", distance);
Console.WriteLine("Distance 2: {0}", fromTo);
fromTo = distance ?? 135.85;
Console.WriteLine("Distance 1: {0}", distance);
Console.WriteLine("Distance 2: {0}", fromTo);
Console.WriteLine();
return 0;
}
}
. تخصیص دهیدfromTo مقدار مورد نظر را به متغیر،) داردnon-null( در حال حاضر مقدار غیر تهیdistance اگر متغیر
را به آن تخصیص دهید135.85 مقدار، در حال حاضر مقداری تهی داردdistance اما اگر متغیر
Distance 1:
Distance 2:
Distance 1:
Distance 2: 135.85
Press any key to continue...
نسخه ی دیگر برنامه
using System;
public class Exercise
{
public static int Main()
{
double? distance = null;
double? fromTo = null;
Console.WriteLine("Distance 1: {0}", distance);
Console.WriteLine("Distance 2: {0}", fromTo);
437
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Console.WriteLine("---------------------");
fromTo = distance ?? 135.85;
Console.WriteLine("Distance 1: {0}", distance);
Console.WriteLine("Distance 2: {0}", fromTo);
Console.WriteLine("---------------------");
distance = 8284.26;
fromTo = distance ?? 135.85;
Console.WriteLine("Distance 1: {0}", distance);
Console.WriteLine("Distance 2: {0}", fromTo);
Console.WriteLine();
return 0;
}
}
Distance 1:
Distance 2:
---------------------
Distance 1:
Distance 2: 135.85
---------------------
Distance 1: 8284.26
Distance 2: 8284.26
Press any key to continue...
if...else وif...else if
الزم است چندین (بیش ازدو) دستور، در برخی موارد. می توان تنها دو دستور را پردازش کرد،if...else در صورت استفاده از دستور شرطی
. فرمول آن به ترتیب زیر می باشد. استفاده کردif...else if برای این منظور می توان از شرط.را پردازش یا اجرا کنیم
if(Condition1) Statement1;
چنانچه. اجرا می شودStatement1 ،Condition1 ) بودنtrue( در صورت صحیح. را بررسی می کندCondition1 کامپایلر ابتدا
. توجه خود را به مثال زیر جلب کنید. هر نتیجه ی دیگری نادیده گرفته می شود.می کند
using System;
public enum HouseType
438
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var garage = "";
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
if (choice == 1) type = HouseType.SingleFamily;
else if (choice == 2) type = HouseType.Townhouse;
Console.Write("Does the house have an indoor garage (1=Yes/0=No)? ");
var answer = int.Parse(Console.ReadLine());
if (answer == 1)
garage = "Yes";
else
garage = "No";
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Has indoor garage? {0}", garage);
return 0;
}
}
439
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Enter the type of house you want to purchase
1. Single Family
2. Townhouse
3. Condominium
You Choice? 2
Does the house have an indoor garage (1=Yes/0=No)? 6
Desired House Type: Townhouse
Has indoor garage? No
Press any key to continue...
همان طور که مشاهده می کنید تنها دو شرط ارزیابی شده اند .هر شرط دیگری غیر از این دو نادیده گرفته می شود .زبان C#خود به عنوان
)if(Condition1 )if(Condition1
;Statement1 ;Statement1
;Statement2 ;Statement2
;Statement-n ;Statement3
else
;Statement-n
Compilerاولین شرط را بررسی می کند .در صورت درست بودن Statement1 ،Condition1اجرا می شود .چنانچه Condition2صحیح
باشد Statement2 ،اجرا می شود .زمانی که کامپایلر Condition-nرا به trueتفسیر کند ،دستور همخوان (مربوطه ی) آن اجرا می شود.
حال اگر Condition-nغلط باشد ،کامپایلر شرط بعدی را بررسی می کند .به عبارت دیگر ،می توان با استفاده از دستور else ifهر تعداد شرط
440
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
می، باز هم فکر می کنید ممکن است شرطی غیر منتظره وجود داشته باشد، اگر پس از بررسی جمیع شرایط احتمالی.که الزم است شامل کرد
مثال
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
public static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var garage = "";
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
if (choice == 1)
type = HouseType.SingleFamily;
else if (choice == 2)
type = HouseType.Townhouse;
else if (choice == 3)
type = HouseType.Condominium;
else
type = HouseType.Unknown;
Console.Write("Does the house have an indoor garage (1=Yes/0=No)? ");
var answer = int.Parse(Console.ReadLine());
if (answer == 1)
garage = "Yes";
else
garage = "No";
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Has indoor garage? {0}", garage);
return 0;
}
}
441
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Enter the type of house you want to purchase
1. Single Family
2. Townhouse
3. Condominium
You Choice? 3
Does the house have an indoor garage (1=Yes/0=No)? 0
Desired House Type: Condominium
Has indoor garage? No
Press any key to continue...
هنگام تعریف عبارت (که نتیجه ی آن به اجرای برنامه ی خاصی منجر می شود) ،دستور switchنتیجه را ارزیابی و بررسی می کند و براساس
نتیجه ی احتمالی آن عبارت ،دستور را اجرا می کند .به این نتیجه ی احتمالی caseمی گویند.
نتایج حاصله در بدنه ی اصلی دستور switchفهرست شده و هر ( caseنتیجه ی ممکن) در صورت لزوم باید جداگانه اجرا شود .بدنه ی
اصلی دستور switchداخل کاراکترهای " { " و " } " محصور می شود .ترکیب نحوی دستور switchبه صورت زیر می باشد.
)switch(Expression
{
case Choice1:
;Statement1
;break
case Choice2:
;Statement2
;break
case Choice-n:
;Statement-n
442
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;break
}
در زبان ،C++می توان کلید واژه ی breakرا از caseحذف کرد .به عبارت دقیق تر ،پس از اینکه کد مورد نظر در caseاجرا می شود به
دلیل عدم وجود case ،breakبعدی اجرا می شود که منجر به سردرگمی و بروز مشکالت در عملیات می شود .اما در زبان برنامه نویسی ،C#
به منظور جلوگیری از بروز این رخداد ،الزم است انتهای هر caseوقفه در کد ایجاد شود .پروسه ی ایجاد وقفه با استفاده از کلید واژه ی
عبارتی که در دستور caseمورد بررسی قرار می گیرد یک عدد صحیح یا integerمی باشد .به این خاطر که عضو شمارنده ) (enumو نوع
داده های کاراکتر مورد نظر ) (charفرم های دیگر integerهستند ،از آن ها نیز می توان استفاده کرد .در مثال زیر دستور switchمورد
;using System
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
)(public static int Main
{
;var type = HouseType.Unknown
;var choice = 0
;"" = var garage
;)"Console.WriteLine("Enter the type of house you want to purchase
;)"Console.WriteLine("1. Single Family
;)"Console.WriteLine("2. Townhouse
;)"Console.WriteLine("3. Condominium
;)" ?Console.Write("You Choice
;))(choice = int.Parse(Console.ReadLine
)switch (choice
{
case 1:
;type = HouseType.SingleFamily
;break
case 2:
;type = HouseType.Townhouse
;break
case 3:
;type = HouseType.Condominium
;break
443
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
}
;)" ?)Console.Write("Does the house have an indoor garage (1=Yes/0=No
;))(var answer = int.Parse(Console.ReadLine
)if (answer == 1
;"garage = "Yes
else
;"garage = "No
;)Console.WriteLine("\nDesired House Type: {0}", type
;)Console.WriteLine("Has indoor garage? {0}", garage
;return 0
}
}
هنگام تصدیق نتایج احتمالی که دستور switchبررسی می کند ،گاهی احتماالتی جز آنچه فهرست شده وجود دارد case .مزبور با کلیدواژه ی
defaultمدیریت می شود case .پیش فرض ( )default caseزمانی لحاظ می شود که هیچ یک از caseهای فهرست شده با پاسخ یا نتیجه
ی عرضه شده همخوانی یا تطابق نداشته باشد .ترکیب نحوی دستور switchکه caseپیش فرض را مورد بررسی قرار می دهد به ترتیب زیر
می باشد.
)switch(Expression
{
case Choice1:
;Statement1
;break
case Choice2:
;Statement2
;break
case Choice-n:
;Statement-n
;break
default:
;Other-Possibility
;break
}
در ،C++بخش defaultبه این خاطر که آخرین قسمت switchمحسوب می شود نیازی به کلید واژه ی breakنیست .اما در زبان ،C#هر
caseو بخش defaultباید مکانیزم خروج خود را داشته باشد که با کلید واژه ی breakانجام می پذیرد.
;using System
public enum HouseType
{
Unknown,
444
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
public static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var garage = "";
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
switch (choice)
{
case 1:
type = HouseType.SingleFamily;
break;
case 2:
type = HouseType.Townhouse;
break;
case 3:
type = HouseType.Condominium;
break;
default:
type = HouseType.Unknown;
break;
}
Console.Write("Does the house have an indoor garage (1=Yes/0=No)? ");
var answer = int.Parse(Console.ReadLine());
if (answer == 1)
garage = "Yes";
else
garage = "No";
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Has indoor garage? {0}", garage);
return 0;
}
}
445
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
2. Townhouse
3. Condominium
You Choice? 8
Does the house have an indoor garage (1=Yes/0=No)? 2
، می توان با استفاده از حروف، به عنوان مثال. به کار بردswitch می توان دیگر نوع های اعداد صحیح را در دستور،int گذشته از مقدار نوع
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
public static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var garage = "";
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
switch (choice)
{
case 1:
type = HouseType.SingleFamily;
break;
case 2:
type = HouseType.Townhouse;
break;
case 3:
type = HouseType.Condominium;
break;
default:
446
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
type = HouseType.Unknown;
break;
}
Console.Write("Does the house have an indoor garage (y/n)? ");
var answer = char.Parse(Console.ReadLine());
switch (answer)
{
case 'y':
garage = "Yes";
break;
case 'Y':
garage = "Yes";
break;
case 'n':
garage = "No";
break;
case 'N':
garage = "No";
break;
default:
garage = "Not Specified";
break;
}
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Has indoor garage? {0}", garage);
return 0;
}
}
447
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
. کلیک کنیدFile -> New Project... روی، در فهرست گزینه ی اصلی،برای ایجاد برنامه ی جدید .2
. کلیک کنیدProject -> Add New Item... ، به فهرست گزینه ی اصلی مراجعه کرده،به منظور ایجاد فایل جدید .5
NationalBank3 -> : راست کلیک کرده سپسNationalBank3 رویSolution Explorer در پنجره ی، برای ایجاد فایل جدید.82
. را بزنیدEnter تغییر دهید و کلیدManagement اسم آن را به. در لیست میانی باید حتماً انتخاب شده باشدCode File گزینه ی.88
using System;
public class Management
{
private Customer CreateNewAccount()
{
byte typeOfAccount = 0;
448
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Customer client = new Customer();
Console.WriteLine("===========================================");
Console.WriteLine("==-= National Bank =-======================");
Console.WriteLine("-------------------------------------------");
Console.Write("Enter a number for the new account(000-000000-000): ");
client.AccountNumber = Console.ReadLine();
Console.WriteLine("What type of account the customer wants to open");
Console.WriteLine("1 - Checking Account");
Console.WriteLine("2 - Savings Account");
Console.Write("Enter account type: ");
typeOfAccount = byte.Parse(Console.ReadLine());
if (typeOfAccount == 1)
client.Type = AccountType.Checking;
else if (typeOfAccount == 2)
client.Type = AccountType.Saving;
else
client.Type = AccountType.Other;
Console.Write("Enter customer name: ");
client.FullName = Console.ReadLine();
Console.Write("Ask the customer to enter a PIN: ");
client.PIN = short.Parse(Console.ReadLine());
return client;
}
public double GetMoney()
{
double amount = 0;
Console.Write("Amount: ");
amount = double.Parse(Console.ReadLine());
return amount;
}
private void ShowAccountInformation(Customer cust)
{
Console.WriteLine("===========================================");
Console.WriteLine("==-= National Bank =-======================");
Console.WriteLine("Customer Account Information");
Console.WriteLine("-------------------------------------------");
Console.WriteLine("Account #: {0}", cust.AccountNumber);
Console.WriteLine("Account Type: {0}", cust.Type);
Console.WriteLine("Full Name: {0}", cust.FullName);
Console.WriteLine("PIN #: {0}", cust.PIN);
Console.WriteLine("Balance: {0:F}", cust.Balance);
Console.WriteLine("===========================================");
}
public static int Main()
{
double amount = 0;
byte nextAction = 0;
Customer accountHolder = null;
Management registration = new Management();
Console.Title = "National Bank";
449
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
accountHolder = registration.CreateNewAccount();
Console.WriteLine("Enter the customer's initial deposit");
accountHolder.Balance = registration.GetMoney();
Console.Clear();
registration.ShowAccountInformation(accountHolder);
Console.WriteLine("What do you want to do now?");
Console.WriteLine("1 - Check account balance");
Console.WriteLine("2 - Make a deposit");
Console.WriteLine("3 - Withdraw money");
Console.WriteLine("4 - Transfer money from one account to another");
nextAction = byte.Parse(Console.ReadLine());
switch (nextAction)
{
case 1:
break;
case 2:
Console.Write("Enter the Deposit ");
amount = double.Parse(Console.ReadLine());
accountHolder.Balance = accountHolder.Balance + amount;
break;
case 3:
Console.Write("Enter the Withdrawal ");
amount = double.Parse(Console.ReadLine());
accountHolder.Balance = accountHolder.Balance - amount;
break;
case 4:
Console.WriteLine("Operation not available: You have only one account with us");
break;
}
Console.Clear();
registration.ShowAccountInformation(accountHolder);
Console.ReadKey();
return 0;
}
}
Account # 202-410443-240
Account Type: 1
450
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
PIN: 8402
===========================================
==-= National Bank =-======================
-------------------------------------------
Enter a number for the new account(000-000000-000)202-410443-240
What type of account the customer wants to open
1 - Checking Account
2 - Savings Account
Enter account type: 1
Enter customer name: Paul Martin Eloundou
Ask the customer to enter a PIN: 8402
Enter the customer's initial deposit
Amount: 750
. را بزنیدEnter .85
===========================================
==-= National Bank =-======================
Customer Account Information
-------------------------------------------
Account #: 202-410443-240
Account Type: Checking
Full Name: Paul Martin Eloundou
PIN #: 8402
Balance: 750.00
===========================================
What do you want to do now?
1 - Check account balance
2 - Make a deposit
3 - Withdraw money
4 - Transfer money from one account to another
451
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
های ترکیبیCase
همچنین می. تنها یک احتمال را پیش از اجرای دستور مربوطه درنظر گرفته و بررسی می کرد، هایی که تاکنون به کار برده ایمcase هر یک از
سپس مقدار و نقطه،case ابتدا، برای نیل به این هدف. را با هم ترکیب کردcase توان برای اجرای دستور مرتبط (همان دستور) چندین
می توان دستور دلخواه، های مورد نظرcase پس از ایجاد. دیگری تایپ کنیدcase با استفاده از فرمول نام برده، حال.ویرگول را وارد کنید
مثال
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
public static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var garage = "";
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
switch (choice)
{
case 1:
type = HouseType.SingleFamily;
break;
case 2:
type = HouseType.Townhouse;
break;
case 3:
type = HouseType.Condominium;
break;
default:
type = HouseType.Unknown;
break;
}
452
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Console.Write("Does the house have an indoor garage (y/n)? ");
var answer = char.Parse(Console.ReadLine());
switch (answer)
{
case 'y':
case 'Y':
garage = "Yes";
break;
case 'n':
case 'N':
garage = "No";
break;
default:
garage = "Not Specified";
break;
}
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Has indoor garage? {0}", garage);
return 0;
}
}
را بهenumeration باید مقدار، برای این منظور. می باشدswitch پردازش آن در دستور،enumeration یکی از اصلی ترین کاربردهای
مثال
using System;
public enum HouseType
{
Unknown,
453
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
public static int Main()
{
var PropertyType = "";
var choice = 0;
var garage = "";
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
switch ((HouseType)choice)
{
case HouseType.SingleFamily:
PropertyType = "Single Family";
break;
case HouseType.Townhouse:
PropertyType = "Townhouse";
break;
case HouseType.Condominium:
PropertyType = "Condominium";
break;
default:
PropertyType = "Unknown";
break;
}
Console.Write("Does the house have an indoor garage (y/n)? ");
var answer = char.Parse(Console.ReadLine());
switch (answer)
{
case 'y':
case 'Y':
garage = "Yes";
break;
case 'n':
case 'N':
garage = "No";
break;
default:
garage = "Not Specified";
break;
}
Console.WriteLine("\nDesired House Type: {0}", PropertyType);
Console.WriteLine("Has indoor garage? {0}", garage);
454
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
return 0;
}
}
مقدمه
.تصور کنید دالل امالک و مستغالتی که از برنامه ی شما استفاده می کند با یک خریدار بالقوه مالقات دارد و سواالت زیر را از برنامه می پرسد
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Program
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var value = 0D;
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
if (choice == 1)
type = HouseType.SingleFamily;
if (choice == 2)
455
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
type = HouseType.Townhouse;
if (choice == 3)
type = HouseType.Condominium;
Console.Write("Up to how much can you afford? $");
value = double.Parse(Console.ReadLine());
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Maximum value afforded: {0:C}\n", value);
return 0;
}
}
) می خواهد ولی توان پرداختsingle family house( می گوید که خانه ی تک خانوار: تصور کنید مشتری به این سواالت پاسخ می دهد
خانه ی مذکور باید برای تک خانوار تعبیه شده: دو پارامتر باید در نظر گرفته و اعتبار سنجی شود،هنگام بررسی خانه برای چنین مشتریی
. دو دستور به شکل زیر می نویسیم، بر این اساس. باشد001،$550 باشد و قیمت آن زیر مبلغ
چنانچه خانه ای با این مشخصه (تک خانوار بودن آن) پیدا کریدم آن را داخل فهرست امالک مورد نظرمان قرار می،از لیست امالک و مستغالت
.دهیم
456
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
از سوی دیگر ،در صورت پیدا کردن خانه ای با قیمت 000،$550یا پایین تر از آن ،خانه را بررسی می کنیم.
$550،000 True
یکی از راه های ترکیب دو مقایسه ،پیوند دادن آن ها است .برای مشتری مزبور خانه ای را انتخاب می کنیم که (هر) دو مشخصه ی فوق را دارا
باشد .اگر خانه ی مورد نظر town houseباشد ،طبق خواسته ی مشتری ،مقدار شرطی آن غلط ( )falseخواهد بود .اگر قیمت خانه بیش از
مثال
;using System
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
)(static int Main
{
457
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
var type = HouseType.Unknown;
var choice = 0;
var value = 0D;
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
Console.Write("Up to how much can you afford? $");
value = double.Parse(Console.ReadLine());
if (choice == 1)
type = HouseType.SingleFamily;
if (choice == 2)
type = HouseType.Townhouse;
if (choice == 3)
type = HouseType.Condominium;
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Maximum value afforded: {0:C}", value);
if (type == HouseType.SingleFamily && value <= 550000)
Console.WriteLine("\nDesired House Matched");
return 0;
}
}
می توان هر طرف شرط، به منظور بهبود خوانایی برنامه.) دو شرط را با هم ادغام می کندlogical conjunction( ترکیب عطفی منطقی،ًاساسا
458
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
مثال
;using System
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
)(static int Main
{
;var type = HouseType.Unknown
;var choice = 0
;var value = 0D
...
))if ((type == HouseType.SingleFamily) && (value <= 550000
;)"Console.WriteLine("\nDesired House Matched
;return 0
}
}
تصور کنید خانه ای با مشخصه ی اول ( )single familyپیدا کردیم .پس اولین شرط الزم برای مشتری برآورده شد .به کمک عملگر بولی
،ANDبه سراغ معیار دوم می رویم .تصور کنید خانه ای که در نظر گرفته ایم 500،$750 ،است :مبلغ مورد نیاز از قدرت خرید مشتری فراتر
است .بنابراین ،شرط دوم برآورده نمی شود ( falseاست) .در جبر بولی ،ANDاگر هم شرط اول درست باشد ،در صورت ناصحیح بودن شرط
مثال
;using System
public enum HouseType
{
459
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Unknown,
SingleFamily,
Townhouse,
Condominium
}
class Program
{
static void Main()
{
var type = HouseType.Unknown;
int choice;
var value = 0M;
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
if (choice == 1)
type = HouseType.SingleFamily;
if (choice == 2)
type = HouseType.Townhouse;
if (choice == 3)
type = HouseType.Condominium;
Console.Write("Up to how much can you afford? $");
value = decimal.Parse(Console.ReadLine());
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Maximum value afforded: {0:C}", value);
if (type == HouseType.SingleFamily && value <= 550000)
Console.WriteLine("\nDesired House Matched");
else
Console.WriteLine("\nThe House Doesn't Match the Desired Criteria");
}
}
460
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
حال تصور کنید خانه ی از نوع ( townhouseبرای چندین خانوار) پیدا کرده ایم که 000،$420هزینه بر می دارد .اگرچه دومین شرط صحیح
است ،اولین معیار در نظر گرفته نشده .در جبر بولی ،چنانچه حتی یکی از شرایط ناصحیح باشد ،عملیات ANDکالً غلط می شود.
چنانچه خانه ای تک خانوار ( )single familyبا قیمت ،$345,000پیدا کنیم ،هر دو شرط برآورده می شود .در جبر بولی ،در صورتی که هر دو
461
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
نمونه ای از اجرای برنامه ی باال را زیر رویت می کنید.
همان طور که مشاهده می کنید عطف منطقی تنها زمانی به trueارزیابی می شود که هر دو شرط درست باشند .در برخی موارد الزم است
چندین شرط (بیش از دو شرط) را با هم ادغام یا ترکیب کنیم .تصور کنید مراجعه کننده ای قصد خرید خانه ای با گنجایش ظرفیت یک خانوار
( )single family houseو مجهز به پارکینگ ( )indoor garageکه 000،$450قیمت آن است را دارد .به عبارت دیگر خانه ی مذکور باید
462
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
a. The house is a single family home
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var value = 0D;
var hasIndoorGarage = false;
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
if (choice == 1)
type = HouseType.SingleFamily;
if (choice == 2)
type = HouseType.Townhouse;
if (choice == 3)
type = HouseType.Condominium;
Console.Write("Up to how much can you afford? $");
value = double.Parse(Console.ReadLine());
Console.Write("Does the house have an indoor garage (1=Yes/0=No)? ");
int ans = int.Parse(Console.ReadLine());
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Maximum value afforded: {0:C}", value);
Console.Write("House has indoor garage: ");
if (ans == 1)
Console.WriteLine("Yes");
else
Console.WriteLine("No");
if ((type == HouseType.SingleFamily) && (value <= 550000) && (ans == 1))
Console.WriteLine("\nDesired House Matched");
463
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
else
;)"Console.WriteLine("\nThe House Doesn't Match the Desired Criteria
;return 0
}
}
همان طور که پیش تر ذکر شد ،زمانی که دو شرط با هم ترکیب می شوند compiler ،ابتدا شرط اول را چک می کند سپس شرط دوم را مورد
بررسی قرار می دهد .به همین ترتیب ،چنانچه الزم است سه شرط لحاظ شود compiler ،در وهله ی اول درستی اولین شرط را ارزیابی می
کند.
Type of House
A
Town House
False
در صورتی که شرط اول (یا هر یک از شروط) غلط باشد ،کل شرط نادرست اطالق می گردد ،صرفنظر از نتیجه ی شرط دوم .اگر شرط اول صحیح
A B
True False
چنانچه شرط دوم نادرست بود ،کل ترکیب غلط تلقی می گردد.
464
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
A B A && B
حین ارزیابی سه شرط باال اگر شرط اول یا دوم ناصحیح باشد ،به دلیل اینکه کل شرط نادرست محسوب می شود ،دیگر دلیلی برای بررسی
شرط سوم وجود ندارد .اگر هر دو شرط اول و دوم غلط باشند باز هم ارزیابی شرط سوم لزومی ندارد .فقط در صورت صحیح بودن دو شرط
ترکیبی از سه شرط باال در عطف منطقی بدین صورت نمایش داده می شود .A && B && C :بار دیگر ،چنانچه شرط سوم نادرست باشد ،کل
A B A && B C A && B && C
مثال
465
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Desired House Type: SingleFamily
Maximum value afforded: $425،000.00
House has indoor garage: No
The House Doesn't Match the Desired Criteria
Press any key to continue...
A B C A && B && C
.) در نظر گرفته می شود که هر سه شرط درست باشندtrue( کل شرط تنها زمانی صحیح
A B C A && B && C
466
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
فصل منطقی or :
مقدمه
حال در نظر بگیرید بنگاه معمالت امالک هر سه نوع خانه ی townhouse ،single familyو condominiumرا دارد .کلیه
ی condominiumها فقط یک طبقه دارند .برخی از خانه های single familyیک طبقه ،برخی دو طبقه و تعدادی دارای سه طبقه می باشند.
مراجعه کننده ی دیگری قصد خرید خانه را دارد و وی condominiumمی پسندد .حال چنانچه شرکت ما چه خانه داشته باشد چه ،condo
نباید بیشتر از یک طب قه باشد (مشتری به هر دلیلی تمایل به باال رفتن از پله ها را ندارد) .هنگام بررسی امالک بنگاه ،با در نظر گرفتن شرط
در صورت پیدا کردن ،condoبه این خاطر که کلیه ی condoها تنها یک طبقه دارند ،معیار موردنظر برآورده می شود.
Condominium True
امالک دیگر ،به خصوص آن دسته ای که بیش از یک طبقه دارند ،نادیده گرفته می شوند.
3 False
عملگر شرطی (||) orدر صورت ارزیابی عملوند اول به صحیح ،دیگر عملوند دوم را ارزیابی نمی کند .چنانچه عملوند اول به falseارزیابی
شود ،این عملوند دوم است که تعیین یا مشخص می کند که کل عبارت orبه صحیح یا غلط ارزیابی شود .ترتیب عملیات orدر قالب جدول
467
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Condominium One Story Condominium OR 1 Story
مثال
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var stories = 1;
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
if (choice == 1)
type = HouseType.SingleFamily;
if (choice == 2)
type = HouseType.Townhouse;
if (choice == 3)
type = HouseType.Condominium;
Console.Write("How many stories? ");
stories = int.Parse(Console.ReadLine());
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Number of Stories: {0}", stories);
if ((type == HouseType.Condominium) || (stories == 1))
Console.WriteLine("\nDesired House Matched");
else
Console.WriteLine("\nThe House Doesn't Match the Desired Criteria");
return 0;
}
}
468
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Enter the type of house you want to purchase
1. Single Family
2. Townhouse
3. Condominium
You Choice? 3
Number of Stories: 6
. دیگر امالک را در نظر می گیریم، در این صورت. وجود نداردcondominium هیچ،اکنون تصور کنید بین امالک موجود در بنگاه
در صورت پیدا. به دنبال آن خانه ای می گردیم که فقط یک طبقه داشته باشد، موجود استsingle family چنانچه تعداد محدودی گزینه ی
مثال
469
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Number of Stories: 1
Desired House Matched
Press any key to continue...
جدول زیر این. هر دو شرط الزم برآورده می شود، را در امالک موجود پیدا کنیم که یک طبقه داشته باشدcondominium اگر گزینه ی
. تولید می کند که هر دو شرط غلط باشندfalse تنها زمانی کالً نتیجه یor عملیات بولی
470
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
False False False
مثالی دیگر
گاهی اوقات الزم است به جای دوشرط ،سه شرط ارزیابی شود .برای این منظور از فصل های ترکیبی کمک گرفته می شود.
حلقه یک نوع دستور شرطی است که به بررسی شرط و اجرای دستور مورد نظر ادامه می دهد تا شرط بیان شده falseارزیابی شود.
برای ایجاد برنامه ی جدید ،در فهرست گزینه ی اصلی ،روی File -> New Project...کلیک کنید. .2
به منظور ایجاد فایل جدید ،به فهرست گزینه ی اصلی مراجعه کرده ،سپس .Project -> Add New Item... .5
471
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
. تغییر دهیدCustomer اسم فایل مورد نظر را به .4
NationalBank4 -> Add -> New راست کلیک کرده سپس،Solution Explorer در پنجره ی، برای ایجاد فایل جدید.82
. Item...
. را بزنیدEnter تغییر داده و کلیدManagement از لیست میانی اسم مربوطه را بهCode File پس از انتخاب.88
using System;
public class Management
{
private Customer CreateNewAccount()
{
byte typeOfAccount = 0;
Customer client = new Customer();
Console.WriteLine("===========================================");
Console.WriteLine("==-= National Bank =-======================");
Console.WriteLine("-------------------------------------------");
Console.Write("Enter a number for the new account(000-000000-000): ");
client.AccountNumber = Console.ReadLine();
Console.WriteLine("What type of account the customer wants to open");
Console.WriteLine("1 - Checking Account");
Console.WriteLine("2 - Savings Account");
Console.Write("Enter account type: ");
472
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
typeOfAccount = byte.Parse(Console.ReadLine());
if (typeOfAccount == 1)
client.Type = AccountType.Checking;
else if (typeOfAccount == 2)
client.Type = AccountType.Saving;
else
client.Type = AccountType.Other;
Console.Write("Enter customer name: ");
client.FullName = Console.ReadLine();
Console.Write("Ask the customer to enter a PIN: ");
client.PIN = short.Parse(Console.ReadLine());
return client;
}
public double GetMoney()
{
double amount = 0;
Console.Write("Amount: ");
amount = double.Parse(Console.ReadLine());
return amount;
}
private void ShowAccountInformation(Customer cust)
{
Console.WriteLine("===========================================");
Console.WriteLine("==-= National Bank =-======================");
Console.WriteLine("Customer Account Information");
Console.WriteLine("-------------------------------------------");
Console.WriteLine("Account #: {0}", cust.AccountNumber);
Console.WriteLine("Account Type: {0}", cust.Type);
Console.WriteLine("Full Name: {0}", cust.FullName);
Console.WriteLine("PIN #: {0}", cust.PIN);
Console.WriteLine("Balance: {0:F}", cust.Balance);
Console.WriteLine("===========================================");
}
public static int Main()
{
return 0;
}
}
While حلقه ی
. از فرمول زیر استفاده کنیدwhile برای ایجاد حلقه ی. نام داردwhile یکی از عملگرهایی که برای اجرای حلقه به کار می رود
while(Condition) Statement;
473
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
روی بخش دلخواه راست کلیک کرده ،سپس گزینه ی Insert Snippet...را انتخاب کنید .حال دوبار روی لِیبِل Visual C#کلیک کنید .در
به منظور اجرای شرط compiler ،whileابتدا Conditionرا بررسی می کند .در صورت صحیح بودن Statement ،Conditionاجرا می شود.
پس از اجرای Condition ،Statementبار دیگر بررسی می شود .مادام اینکه Conditionصحیح true /باشد Statement ،به صورت تکرار
چک می شود .فقط زمانی که ( Conditionبه) غلط ارزیابی شود ،حلقه اتمام یافته و از آن خارج می شود.
مثال
;using System
public class Exercise
{
)(public static int Main
{
;var stories = 0
)while (stories <= 4
{
;)Console.WriteLine("Number {0}", stories
;stories++
}
;return 0
}
}
Number 0
Number 1
Number 2
Number 3
Number 4
برای اجرای صحیح شرط ،whileباید مکانیزمی برای compilerدر نظر بگیرید تا بتواند از مقدار ارجاع برای شرط ،متغیر یا عبارت مورد نظر
استفاده کند (که گاهی در قالب /فرم متغیری است که مقداردهی اولیه می شود ،اگرچه ممکن است در قالب عبارت های دیگر نیز ظاهر
474
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
while به کاربردن
Account # 202-410443-240
Account Type: 1
475
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
PIN: 8402
Account #: 202-103344-042
Account Type: 2
PIN: 2468
Account # 410-240301-443
Account Type: 2
PIN: 1119
Account # 718-202404-240
Account Type: 1
476
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Customer Name: Alain Gassila
PIN: 2226
دستور do...while
با حلقه ی whileابتدا شرط بررسی می شود ،سپس دستور اجرا می شود .در صورت غلط بودن شرط ،دستور هیچگاه اجرا نمی شود.
مثال
;using System
public class Exercise
{
)(public static int Main
{
;var stories = 5
)while (stories <= 4
{
;)Console.WriteLine("Number {0}", stories
;stories++
}
;return 0
}
}
زمانی که برنامه اجرا می شود هیچ چیز از حلقه ی whileاجرا نمی شود ،زیرا هنگامی که شرط در ابتدای امر بررسی می شود ،به علت غلط بودن
آن compiler ،هیچگاه به اجرای دستور نمی رسد .در برخی موارد ممکن است الزم شود دستوری را پیش از بررسی شرط آن برای اولین بار،
اجرا کنید .برای این منظور دستور do...whileرا به کار ببرید .فرمول آن به شرح زیر است.
477
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
دستور مزبور ( )do...whileابتدا Statementرا اجرا می کند ،به دنبال آن Conditionرا بررسی می کند .اگر Conditionصحیح بود،
سپس Statementرا دوباره اجرا می کند .تا زمانی که Conditionدرست باشد Statement ،به صورت تکرار اجرا می شود .زمانی که
چنانچه دستور مورد نظر کوتاه بود ،به طور مثال متشکل از تنها یک خط بود ،می توان به راحتی آن را پس از doقرار داد .مشابه دستورات ifو
Condition ،whileدستور do...whileباید داخل پرانتز قرار داده شود .به خاطر داشته باشید که کل دستور do...whileباید به عالمت
;using System
public class Exercise
{
)(public static int Main
{
;var stories = 0
do
;)Console.WriteLine("Number {0}", stories++
;)while (stories <= 4
;return 0
}
}
Number 0
Number 1
Number 2
Number 3
Number 4
Press any key to continue...
چنانچه Statementمورد نظر طوالنی بوده و بیش از یک خط جا می گیرد ،آن را با "{" باز آغاز کرده و با "}" بسته به پایان برسانید.
شمارش و تکرار
478
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
{
. . . No Change
public static int Main()
{
double amount = 0;
byte nextAction = 0;
Customer accountHolder = null;
Management registration = new Management();
Console.Title = "National Bank";
accountHolder = registration.CreateNewAccount();
Console.WriteLine("Enter the customer's initial deposit");
accountHolder.Balance = registration.GetMoney();
Console.Clear();
registration.ShowAccountInformation(accountHolder);
do
{
Console.WriteLine("What do you want to do now?");
Console.WriteLine("1 - Check account balance");
Console.WriteLine("2 - Make a deposit");
Console.WriteLine("3 - Withdraw money");
Console.WriteLine("4 - Transfer money from one account to another");
nextAction = byte.Parse(Console.ReadLine());
} while ((nextAction < 1) || (nextAction > 4));
switch (nextAction)
{
case 1:
break;
case 2:
Console.Write("Enter the Deposit ");
amount = double.Parse(Console.ReadLine());
accountHolder.Balance = accountHolder.Balance + amount;
break;
case 3:
Console.Write("Enter the Withdrawal ");
amount = double.Parse(Console.ReadLine());
accountHolder.Balance = accountHolder.Balance - amount;
break;
case 4:
Console.WriteLine("Operation not available: You have only one account with us");
break;
}
registration.ShowAccountInformation(accountHolder);
Console.ReadKey();
return 0;
}
}
Account Type: 1
PIN: 9731
==========================================
==-= National Bank =-======================
Customer Account Information
-------------------------------------------
Account #: 301-240410-202
Account Type: Checking
Full Name: Frank Trombs
PIN #: 9731
Balance: 40.10
===========================================
What do you want to do now?
1 - Check account balance
2 - Make a deposit
3 - Withdraw money
4 - Transfer money from one account to another
Enter your choice:
راEnter را تایپ کنید تا به حساب پول واریز شود سپس کلید2 ،زمانی شما پرسیده شد چه عملیاتی می خواهید انجام دهید .5
.فشار دهید
480
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
.4پس از زدن Enterپنجره ی DOSبسته شده و به محیط برنامه نویسی بازگردانده می شوید.
For
دستور forاغلب به منظور شمارش تعدادی آیتم مورد استفاده قرار می گیرد .در ساختار معمولَش ،حلقه ی forبه سه بخش تقسیم می شود.
اولین بخش ،نقطه ی آغاز شمارش را مشخص می کند .بخش دوم حد شمارش را تعیین می کند .آخرین بخش تکرار یا تناوب شمارش را تعیین
عبارت Startمتغیری است که به عنوان مقدار اولیه (آغازین) تخصیص داده می شود که می تواند ; Count = 0باشد ( Startمقدار آغازین یا
عبارت Endانتهای فرایند شمارش را تعیین می کند (کجا شمارش به پایان برسد) .مثال ; .Count < 24مثال مذکور نشان می دهد که
شمارش تا متغیر Countکه کوچکتر از 24باشد ادامه می یابد ( Endنقطه ی پایان حلقه است که مشخص می کند مقدار countتا عددی
کوچکتر از 24ادامه پیدا کند) .هنگامی که شمارش به 24می رسد ،به این خاطر که در مثال مورد نظر خود عدد 24حساب نمی شود،
شمارش خاتمه می یابد .برای تعیین حد شمارش ،از عملگرهای مقایسه ی => یا =< استفاده می شود.
عبارت Frequencyبرای compilerمشخص می کند چه مقدار (مقدار عددی که در هر بار تکرار حلقه forبه نقطه ابتدایی اضافه و یا کم
شود) پیش از ادامه ی حلقه اضافه یا کسر کند .این عبارت می تواند عملیات افزایشی مثل ++Countباشد.
مثال
;using System
public class Exercise
{
)(public static int Main
{
)for (var stories = 0; stories <= 4; stories++
;)Console.WriteLine("Number {0}", stories
;return 0
}
}
481
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
.نتیجه ی زیر به دست می آید
Number 1
Number 2
Number 3
Number 4
using System;
public class Exercise
{
public static int Main()
{
var typeOfHome = 0;
do
{
Console.WriteLine("What Type of House Would you Like to Purchase?");
Console.WriteLine("1 - Single Family");
Console.WriteLine("2 - Town House");
Console.WriteLine("3 - Condominium");
Console.Write("Your Choice? ");
typeOfHome = int.Parse(Console.ReadLine());
} while ((typeOfHome < 1) || (typeOfHome > 3));
if (typeOfHome == 1)
Console.WriteLine("\nType of Home: Single Family");
else if (typeOfHome == 2)
Console.WriteLine("\nType of Home: Town House");
else if (typeOfHome == 3)
Console.WriteLine("\nType of Home: Condominium");
return 0;
}
}
. پذیرفته نیست1 و بیشتر از8 هر عدد دیگری کمتر از. از کاربر استفاده می شود1 یا8،2 از برنامه ی باال به منظور درخواست یکی از اعداد
مثال
482
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
3 - Condominium
Your Choice? 8
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town Hou 3 - Condominium
Your Choice? 6
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 3
Type of Home: Condominium
Press any key to continue...
برای حل این مسئله می توان دستور شرطی را داخل دستور شرطی دیگر. سوال بار دیگر تکرار می شود،اگر کاربر مقداری نامعتبر وارد کند
. زیر با مثال توضیح داده شده است، نحوه ی تودرتو کردن دستور شرطی. یا تودرتو کردن می گویندnesting گنجاند (نوشت) که به آن
using System;
public class Exercise
{
public static int Main()
{
var typeOfHome = 0;
do
{
Console.WriteLine("What Type of House Would you Like to Purchase?");
Console.WriteLine("1 - Single Family");
Console.WriteLine("2 - Townhouse");
Console.WriteLine("3 - Condominium");
Console.Write("Your Choice? ");
typeOfHome = int.Parse(Console.ReadLine());
if ((typeOfHome < 1) || (typeOfHome > 3))
Console.WriteLine("Invalid Choice: Please try again");
} while ((typeOfHome < 1) || (typeOfHome > 3));
if (typeOfHome == 1)
Console.WriteLine("\nType of Home: Single Family");
else if (typeOfHome == 2)
Console.WriteLine("\nType of Home: Townhouse");
else if (typeOfHome == 3)
Console.WriteLine("\nType of Home: Condominium");
return 0;
}
}
مثالی دیگر
483
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 0
Invalid Choice: Please try again
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 6
Invalid Choice: Please try againe
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 2
Type of Home: Town House
Press any key to continue...
484
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Console.WriteLine("Account Type: {0}", cust.Type);
Console.WriteLine("Full Name: {0}", cust.FullName);
Console.WriteLine("PIN #: {0}", cust.PIN);
Console.WriteLine("Balance: {0:F}", cust.Balance);
Console.WriteLine("===========================================");
}
public static int Main()
{
double amount = 0;
byte nextAction = 0;
Customer accountHolder = null;
Management registration = new Management();
Console.Title = "National Bank";
accountHolder = registration.CreateNewAccount();
Console.WriteLine("Enter the customer's initial deposit");
accountHolder.Balance = registration.GetMoney();
Console.Clear();
registration.ShowAccountInformation(accountHolder);
do
{
Console.WriteLine("What do you want to do now?");
Console.WriteLine("1 - Check account balance");
Console.WriteLine("2 - Make a deposit");
Console.WriteLine("3 - Withdraw money");
Console.WriteLine("4 - Transfer money from one account to another");
Console.Write("Enter your choice: ");
nextAction = byte.Parse(Console.ReadLine());
Console.Clear();
switch (nextAction)
{
case 1:
Console.Clear();
registration.ShowAccountInformation(accountHolder);
Console.Write("Press Enter for next operation");
Console.ReadKey();
break;
case 2:
Console.Write("Enter Deposit ");
amount = registration.GetMoney();
accountHolder.Balance = accountHolder.Balance + amount;
Console.Clear();
registration.ShowAccountInformation(accountHolder);
break;
case 3:
Console.Write("Enter Withdrawal ");
amount = registration.GetMoney();
485
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Console.ReadKey();
}
else
accountHolder.Balance = accountHolder.Balance - amount;
Console.Clear();
registration.ShowAccountInformation(accountHolder);
break;
case 4:
Console.WriteLine("Operation not available: You have only one account with us");
break;
}
if ((nextAction < 1) || (nextAction > 4))
Console.WriteLine("Invalid Action: Please enter a value between 1 and 4");
} while ((nextAction >= 1) && (nextAction <= 4));
Console.ReadKey();
return 0;
}
}
Account # 202-410443-240
Account Type: 1
PIN: 8402
. را بزنیدEnter کلید.4
===========================================
==-= National Bank =-======================
Customer Account Information
-------------------------------------------
Account #: 202-410443-240
Account Type: Checking
Full Name: Paul Martin Eloundou
PIN #: 8402
Balance: 750.00
486
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
===========================================
What do you want to do now?
1 - Check account balance
2 - Make a deposit
3 - Withdraw money
4 - Transfer money from one account to another
Enter your choice:
. را فشار دهیدEnter سپس کلید، را تایپ کنید تا از حساب پول برداشته شود3 .5
You are not allowed to withdraw more money than your account has.
. را بزنیدEnter .88
===========================================
=-= National Bank =-======================
ustomer Account Information
------------------------------------------
ccount #: 202-410443-240
487
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
ccount Type: Checking
ull Name: Paul Martin Eloundou
IN #: 8402
alance: 346.99
==========================================
?hat do you want to do now
- Check account balance
- Make a deposit
- Withdraw money
- Transfer money from one account to another
nter your choice:
.81با زدن Enterاز DOSخارج گشته و به محیط برنامه نویسی باز گردید.
زمانی که شما به ایجاد برنامه های (کاربردی) سرویس گیرنده /سرویس دهنده یا منابع فشرده می پردازید ،خواهید دانست که امکان
دسترسی چندین کاربر یا بیش از یک منبع به برنامه ی شما یا انجام عملیاتی بر شئی از برنامه ی شما وجود دارد .مثال آن تالش چندین
شخص بر افزودن رکورد یا خط جدید به یک فایل یکسان است .در برخی موارد با چنین رخدادی موافق هستید ولی در برخی شرایط سعی دارید
به منظور جلوگیری از دسترسی کاربر یا یک منبع به شئ از برنامه ی کاربردی مورد نظر ،الزم است آن قسمت از تراکنش که عملیات در آن جایز
نیست قفل ایجاد شود .برای نیل به این هدف فرمول زیر را به کارببرید.
Declare a Variable
)lock(Variable
{
// Do what you want here
}
// The variable has been released
488
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
. . . No Change
public static int Main()
{
double amount = 0;
byte nextAction = 0;
Customer accountHolder = null;
Management registration = new Management();
Console.Title = "National Bank";
accountHolder = registration.CreateNewAccount();
Console.WriteLine("Enter the customer's initial deposit");
accountHolder.Balance = registration.GetMoney();
Console.Clear();
registration.ShowAccountInformation(accountHolder);
do
{
Console.WriteLine("What do you want to do now?");
Console.WriteLine("1 - Check account balance");
Console.WriteLine("2 - Make a deposit");
Console.WriteLine("3 - Withdraw money");
Console.WriteLine("4 - Transfer money from one account to another");
Console.Write("Enter your choice: ");
nextAction = byte.Parse(Console.ReadLine());
Console.Clear();
// Don't allow wny other operation on this section
// while this section is executing
lock (registration)
{
switch (nextAction)
{
case 1:
Console.Clear();
registration.ShowAccountInformation(accountHolder);
Console.Write("Press Enter for next operation");
Console.ReadKey();
break;
case 2:
Console.Write("Enter Deposit ");
amount = registration.GetMoney();
accountHolder.Balance = accountHolder.Balance + amount;
Console.Clear();
registration.ShowAccountInformation(accountHolder);
break;
case 3:
Console.Write("Enter Withdrawal ");
amount = registration.GetMoney();
if (amount > accountHolder.Balance)
{
Console.WriteLine(
"You are not allowed to withdraw more money than your account has.");
Console.ReadKey();
489
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
}
else
;accountHolder.Balance = accountHolder.Balance - amount
;)(Console.Clear
;)registration.ShowAccountInformation(accountHolder
;break
case 4:
(Console.WriteLine
;)""Operation not available: You have only one account with us
;break
}
}
// Other objects can access this section now
))if ((nextAction < 1) || (nextAction > 4
;)"Console.WriteLine("Invalid Action: Please enter a value between 1 and 4
;))} while ((nextAction >= 1) && (nextAction <= 4
;)(Console.ReadKey
;return 0
}
}
دستور breakبه منظور ایجاد وقفه در یک حلقه یا متوقف کردن آن به کار می رود .فرمول دستور مذکور به شرح زیر می باشد.
;break
اگرچه breakاز تنها یک کلمه تشکیل شده است ،اما به خودی خود یک دستور کامل تلقی می گردد؛بنابراین ،باید همیشه در خط مختص به
خودش قرار گیرد (که به افزایش و بهبود خوانایی برنامه کمک شایانی می کند).
دستور breakبرای نزدیک ترین دستور پیشین (دستوری که بالفاصله breakپس از آن در خط بعدی قرار گرفته) به کار بسته می شود،
البته منوط به اینکه دستور مذکور (پیشین) قابل اجرا باشد .دستور breakدر شرط do…while ،whileو همچنین در حلقه های forبه
منظور متوقف کردن عمل در حال اجرا بکار می رود .در مثال زیر تعداد طبقات یک ساختمان از 8تا 82شمرده می شود ولی با استفاده از دستور
490
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;using System
public class Exercise
{
)(public static int Main
{
)for (var stories = 1; stories <= 12; stories++
{
;)Console.WriteLine("Story {0}", stories
)if (stories == 3
;break
}
;return 0
}
}
Story 1
Story 2
Story 3
…Press any key to continue
;continue
هنگام پردازش حلقه ،چنانچه دستور مورد نظر به مقدار نادرستی برخورد کرد ،شما می توانید با استفاده از دستور continueدر دستورات
شرطی do...while ،whileو forدستور بعدی را نادیده گرفته یا از مقدار غلط و نامعتبر بولی مستقیم به مقدار معتبر بعدی بروید (این
برخالف دستور breakمی باشد که به طور کلی از حلقه خارج می گردد) .مشابه دستور ،breakکلیدواژه ی continueنزدیک ترین دستور
شرطی پیش از خود را تحت تاثیر قرار می دهد و باید در خطی مجزا قرار گیرد .مثال زیر باید طبقات یک ساختمان را از 8تا 6بشمارد ،به نحوه ی
;using System
public class Exercise
{
)(public static int Main
{
)for (var stories = 1; stories <= 6; stories++
{
)if (stories == 3
491
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
;continue
;)Console.WriteLine("Story {0}", stories
}
;return 0
}
}
نتیجه
Story 1
Story 2
Story 4
Story 5
Story 6
…Press any key to continue
همان طور که مشاهده می کنید compiler ،هنگامی که به عدد 1می رسد آن را به طور کامل نادیده گرفته و بقیه ی فرایند را ادامه می
دهد.
داخل حلقه ،می توان عالمتی گذاشت که بر تکامل یک دستور نظارت می کند ،از این طریق هنگامی که تگ /دستور به مقدار معینی می رسد
به جای نادیده گرفتن تنها یک مقدار (پریدن به اندازه ی یک مقدار /بجای skipکردن یک مقدار ،چندین مقدار جلو برود) به مقدار دلخواه شما
می پرد .برای این منظور ،در حلقه به مقدار جاری توجه کنید و زمانی که به مقدار مورد نظر رسید ،آن را تغییر دهید .در مثال زیر از برنامه
;using System
public class Exercise
{
)(static int Main
{
)for (var story = 0; story < 15; story++
{
)if (story == 6
;story = 10
;)Console.WriteLine("Elevator at: {0}", story
}
;return 0
}
}
نتیجه
492
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Elevator at: 0
Elevator at: 1
Elevator at: 2
Elevator at: 3
Elevator at: 4
Elevator at: 5
Elevator at: 10
Elevator at: 11
Elevator at: 12
Elevator at: 13
Elevator at: 14
Press any key to continue...
همان طور که مشاهده می کنید ،به محض رسیدن به عدد ،6حلقه مستقیم به مقدار 82می پرد.
دستور gotoیکی از دستورات پرش محسوب می شود که کنترل (اجرای برنامه) را به بخش (بخش نام گذاری شده /لیبل تعیین شده)
دیگری از تابع همان برنامه انتقال می دهد .برای استفاده از دستور gotoباید اسمی را در بخش مورد نظر در تابع درج کرد .الزم به ذکر است
که با لیبل (اسم) نشان می دهیم برنامه باید کنترل را به کجا در تابع همان برنامه انتقال دهد .حال ،اسم یا لیبل متشکل از تنها یک کلمه
است و از همان قوانینی که برای تعیین اسم در C++تعریف کردیم پیروی می کند .اسم مورد نظر (اسم متواند هر چیزی باشد) ،به دنبال آن
دونقطه " ." .زیر مثالی را مشاهده می کنید که در آن برنامه طبقات یک ساختمان 84طبقه ای را می شمارد.
;using System
public class Exercise
{
)(public static int Main
{
)for (var stories = 1; stories <= 14; stories++
{
)if (stories == 4
;goto CountUpTo3
;)Console.WriteLine("Story {0}", stories
}
CountUpTo3:
;)"Console.WriteLine("Our homes have only up to 3 levels\n
;return 0
}
}
نتیجه
493
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
Story 1
Story 2
Story 3
Our homes have only up to 3 levels
Press any key to continue…
رفتن به یک لیبل
Account Type: 2
PIN: 2468
===========================================
==-= National Bank =-======================
Customer Account Information
-------------------------------------------
Account #: 202-103344-042
Account Type: Saving
Full Name: Jimmy Simms
PIN #: 2468
Balance: 500.00
===========================================
What do you want to do now?
1 - Check account balance
2 - Make a deposit
3 - Withdraw money
4 - Transfer money from one account to another
Enter your choice:
. را بزنیدEnter سپس، را وارد کنید تا سپرده ایجاد شود2 عدد.5
495
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
?hat do you want to do now
- Close the application
- Check account balance
- Make a deposit
- Withdraw money
- Transfer money from one account to another
nter your choice:
اکنون 2را وارد کرده و Enterرا بزنید. .4
مستحضر هستید هنگامی که متد voidتعریف می کنید ،مقداری بازگردانده نمی شود.
مثال
;using System
public class Exercise
{
)(private void Show
{
;)"!!!Console.WriteLine("C# Programming is fun
}
)(public static int Main
{
;)(Exercise exo = new Exercise
;)(exo.Show
;return 0
}
}
در حقیقت ،متد voidعمل بازگرداندن را انجام می دهد ولی مقداری برنمی گرداند ،با این کار به compilerخبر می دهد که زمان خروج از متد
فرا رسیده است (زمانی که متد voidفراخوان می شود ،هیچ مقدار یا نتیجه ای بازگردانده نمی شود و هیچ متغیری نمی توان تخصیص داد).
برای این منظور ،در بخش مناسب متد ،voidکافی است کلید واژه ی returnرا تایپ کنید .به مثال زیر توجه کنید.
;using System
public class Exercise
496
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
{
private void Show()
{
Console.WriteLine("C# Programming is fun!!!");
return;
}
public static int Main()
{
Exercise exo = new Exercise();
exo.Show();
return 0;
}
}
در بخش بعدی فایده ی استفاده ی آن در دستورات شرطی را توضیح خواهیم. عملیات بازگشت هیچ کار خاصی انجام نمی دهد،در این مثال
.داد
. کلیک کنیدFile -> New Project... روی، در فهرست گزینه ی اصلی،برای ایجاد برنامه ی جدید .2
. را انتخاب کنیدProject -> Add New Item... فهرست اصلی را بازکرده و گزینه ی،به منظور ایجاد فایل جدید .5
.NationalBank5 -> Add -> New Item... : راست کلیک کرده سپس،Solution Explorer در پنجره ی، برای ایجاد فایل جدید.82
. را بزنیدEnter تغییر داده و کلیدManagement اسم مورد نظر را به، از لیست میانیCode File پس از انتخاب.88
498
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
}
private void ShowAccountInformation(Customer cust)
{
Console.WriteLine("===========================================");
Console.WriteLine("==-= National Bank =-======================");
Console.WriteLine("Customer Account Information");
Console.WriteLine("-------------------------------------------");
Console.WriteLine("Account #: {0}", cust.AccountNumber);
Console.WriteLine("Account Type: {0}", cust.Type);
Console.WriteLine("Full Name: {0}", cust.FullName);
Console.WriteLine("PIN #: {0}", cust.PIN);
Console.WriteLine("Balance: {0:F}", cust.Balance);
Console.WriteLine("===========================================");
return;
}
public static int Main()
{
double amount = 0;
byte nextAction = 0;
Customer accountHolder = null;
Management registration = new Management();
Console.Title = "National Bank";
accountHolder = registration.CreateNewAccount();
Console.WriteLine("Enter the customer's initial deposit");
accountHolder.Balance = registration.GetMoney();
Console.Clear();
registration.ShowAccountInformation(accountHolder);
do
{
Console.WriteLine("What do you want to do now?");
Console.WriteLine("1 - Check account balance");
Console.WriteLine("2 - Make a deposit");
Console.WriteLine("3 - Withdraw money");
Console.WriteLine("4 - Transfer money from one account to another");
Console.Write("Enter your choice: ");
nextAction = byte.Parse(Console.ReadLine());
Console.Clear();
switch (nextAction)
{
case 1:
Console.Clear();
registration.ShowAccountInformation(accountHolder);
Console.Write("Press Enter for next operation");
Console.ReadKey();
break;
case 2:
Console.Write("Enter Deposit ");
amount = registration.GetMoney();
accountHolder.Balance = accountHolder.Balance + amount;
Console.Clear();
499
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
registration.ShowAccountInformation(accountHolder);
break;
case 3:
Console.Write("Enter Withdrawal ");
amount = registration.GetMoney();
if (amount > accountHolder.Balance)
{
Console.WriteLine("You are not allowed to withdraw more money than your account has.");
Console.ReadKey();
}
else
accountHolder.Balance = accountHolder.Balance - amount;
Console.Clear();
registration.ShowAccountInformation(accountHolder);
break;
case 4:
Console.WriteLine( "Operation not available: You have only one account with us");
break;
}
if ((nextAction < 1) || (nextAction > 4))
Console.WriteLine("Invalid Action: Please enter a value between 1 and 4");
} while ((nextAction >= 1) && (nextAction <= 4));
Console.ReadKey();
return 0;
}
}
بازگشت شرطی
، می توان دستور شرطی، به عبارت دیگر.بعضی از توابع با توجه به پردازشی که روی عملیات شرطی انجام می دهند مقداری را برمی گردانند
. توجه خود را به مثال زیر جلب کنید. داخل تابع نوشت و مقداری را از شرط مزبور بازگرداند،if مانند
using System;
public class Program
{
enum HouseType { Unknown, SingleFamily, Townhouse, Condominium };
public static int Main()
{
var type = GetHouseType();
switch (type)
{
case HouseType.SingleFamily:
Console.WriteLine("\nType of Home: Single Family");
break;
case HouseType.Townhouse:
Console.WriteLine("\nType of Home: Townhouse");
break;
500
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
case HouseType.Condominium:
Console.WriteLine("\nType of Home: Condominium");
break;
case HouseType.Unknown:
Console.WriteLine("\nType of Home. Unknown");
break;
}
return 0;
}
private static HouseType GetHouseType()
{
var type = 0;
Console.WriteLine("What Type of House Would you Like to Purchase?");
Console.WriteLine("1 - Single Family");
Console.WriteLine("2 - Townhouse");
Console.WriteLine("3 - Condominium");
Console.Write("Your Choice? ");
type = int.Parse(Console.ReadLine());
if (type == 1)
return HouseType.SingleFamily;
else if (type == 2)
return HouseType.Townhouse;
else if (type == 3)
return HouseType.Condominium;
}
}
در حقیقت این متد می تواند مقداری. مشخص می ک ند چه زمانی یکی از سه مقدار نام برده برگردانده شده استGetHouseType() متد
به. متد جاری نمی داند چه کار باید بکند،) اما در آن صورت (چنانچه کاربر چنین مقداری را وارد کند،به جز سه مقدار مذکور دریافت کند
. زیر مواجه می شویدerror باMicrosoft Visual C# ) نمی شود و در محیطcompile( برنامه ترجمه،همین دلیل
return می توان این کار را با نوشتن. باید دستوری ارائه دهید که مقداری غیر از مقدارهای درنظر گرفته را شامل شود،برای حل این مشکل
مثال
using System;
public class Program
{
enum HouseType { Unknown, SingleFamily, Townhouse, Condominium };
public static int Main()
{
var type = GetHouseType();
501
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
switch (type)
{
case HouseType.SingleFamily:
Console.WriteLine("\nType of Home: Single Family");
break;
case HouseType.Townhouse:
Console.WriteLine("\nType of Home: Townhouse");
break;
case HouseType.Condominium:
Console.WriteLine("\nType of Home: Condominium");
break;
case HouseType.Unknown:
Console.WriteLine("\nType of Home. Unknown");
break;
}
return 0;
}
private static HouseType GetHouseType()
{
var type = 0;
Console.WriteLine("What Type of House Would you Like to Purchase?");
Console.WriteLine("1 - Single Family");
Console.WriteLine("2 - Townhouse");
Console.WriteLine("3 - Condominium");
Console.Write("Your Choice? ");
type = int.Parse(Console.ReadLine());
if (type == 1)
return HouseType.SingleFamily;
else if (type == 2)
return HouseType.Townhouse;
else if (type == 3)
return HouseType.Condominium;
else
return HouseType.Unknown;
}
}
503
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Console.WriteLine("Enter the customer's initial deposit");
accountHolder.Balance = registration.Deposit();
Console.Clear();
registration.ShowAccountInformation(accountHolder);
do
{
Console.WriteLine("What do you want to do now?");
Console.WriteLine("0 - Close the application");
Console.WriteLine("1 - Check account balance");
Console.WriteLine("2 - Make a deposit");
Console.WriteLine("3 - Withdraw money");
Console.WriteLine("4 - Transfer money from one account to another");
Console.Write("Enter your choice: ");
nextAction = byte.Parse(Console.ReadLine());
Console.Clear();
switch (nextAction)
{
case 1:
Console.Clear();
registration.ShowAccountInformation(accountHolder);
Console.Write("Press Enter for next operation");
Console.ReadKey();
break;
case 2:
amount = registration.Deposit();
accountHolder.Balance += amount;
Console.Clear();
registration.ShowAccountInformation(accountHolder);
break;
case 3:
amount = registration.Withdraw(accountHolder);
accountHolder.Balance -= amount;
Console.Clear();
registration.ShowAccountInformation(accountHolder);
break;
case 4:
Console.WriteLine(
"Operation not available: You have only one account with us");
break;
default:
return 0;
}
if ((nextAction < 1) || (nextAction > 4))
Console.WriteLine(
"Invalid Action: Please enter a value between 1 and 4");
} while ((nextAction >= 1) && (nextAction <= 4));
Console.ReadKey();
return 0;
}
}
504
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
. را زده تا برنامه اجرا شودF5 کلید.2
Account #: 257-484902-444
Account Type: 1
PIN: 5008
===========================================
=-= National Bank =-======================
------------------------------------------
ew Account Number (000-000000-000): 257-484902-444
hat type of account the customer wants to open
- Checking Account
- Savings Account
nter account type: 1
nter customer name: Josh Nay
sk the customer to enter a PIN: 5008
nter the customer's initial deposit
mount to deposit: 250
===========================================
==-= National Bank =-======================
Customer Account Information
-------------------------------------------
Account #: 257-484902-444
Account Type: Checking
Full Name: Josh Nay
PIN #: 5008
Balance: 250.00
===========================================
505
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
What do you want to do now?
0 - Close the application
1 - Check account balance
2 - Make a deposit
3 - Withdraw money
4 - Transfer money from one account to another
Enter your choice:
. را بزنیدEnter سپس، را وارد کرده3 حال به منظور برداشت مبلغ مورد نظر از حساب.5
===========================================
-------------------------------------------
Account #: 257-484902-444
PIN #: 5008
Balance: 85.63
===========================================
2 - Make a deposit
3 - Withdraw money
===========================================
-------------------------------------------
506
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Account #: 257-484902-444
PIN #: 5008
Balance: 201.81
===========================================
2 - Make a deposit
3 - Withdraw money
You are not allowed to withdraw more money than your account has.
. را بزنیدEnter کلید.88
While (true)
به جای این کار همچنین. وسیله ای برای بررسی شرط مورد نظر نیز گنجاندیم، را بکار بردیمwhile تاکنون در موقعیت های مختلفی که شرط
. قرار دادtrue می توان ثابت صحیح بولی را داخل پرانتزهای مقدار
مثال
using System;
public class Exercise
{
public static int Main()
{
while (true)
507
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
;)"!!!Console.WriteLine("C# Programming is fun
;return 0
}
}
این نوع دستور معتبر بوده و کار می کند ولی هیچ راهی برای متوقف کردن آن وجود ندارد ،زیرا دستور نام برده به کامپایلر می گوید " تا زمانی
که این درست است (" ." )"…،as long as this is trueسوال مطرح این است که منظور از " "thisچیست ؟ در نتیجه ،برنامه بدون هیچ گونه
توقف و برای همیشه ادامه پیدا می کند .بنابراین ،در صورت ایجاد شرط ) ،while(trueدر بدنه ی دستور مزبور ،الزم است وسیله ای برای
متوقف کردن کامپایلر فراهم کرد (به عبارت دیگر ،راهی که از آن طریق شرط به falseارزیابی شود) .برای نیل به این هدف ،باید شرط ifرا
مثال
;using System
public class Exercise
{
)(public static int Main
{
;int i = 0
)while (true
{
)if (i > 8
;break
;)"!!!Console.WriteLine("C# Programming is fun
;i++
}
;return 0
}
}
این بار برنامه از compilerدرخواست می کند جمله ای را در صفحه ی کنسول نمایش دهد که از 2تا 1می شمارد ولی بمحض رسیدن به 1
508
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
!!!C# Programming is fun
در برنامه ی باال ،از عملگر breakاستفاده کردیم .البته می توان از هر مکانیزم دیگری برای متوقف کردن حلقه کمک گرفت مادام اینکه شرط
مورد نظر falseشود .مثال زیر شیوه ی دیگری از متوقف کردن حلقه را به نمایش می گذارد.
;using System
public class Exercise
{
)(public static int Main
{
;int i = 0
)while (true
{
)if (i < 8
;)"!!!Console.WriteLine("C# Programming is fun
else
;return 0
;i++
}
}
}
به جای استفاده از ) ،while(trueمی توان ابتدا متغیر بولی را تعریف و مقداردهی اولیه کرد ،یا می توان متغیر بولی به کاربرد که مقدار آن از
پیش شناس و مشخص است .مقدار مربوط می تواند از یک متد بیاید یا از هر وسیله ی دیگری.
.8برای راه اندازی برنامه (کاربردی) جدید ،به فهرست گزینه ی اصلی مراجعه کرده و File -> New Project...را کلیک کنید.
.4به منظور ایجاد کالس جدید ،در فهرست اصلی ،روی Project -> Add Class...کلیک کنید.
509
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DepartmentStore8
{
public class StoreItem
{
public int itemNumber;
public string itemName;
public string itemSize;
public decimal unitPrice;
public StoreItem()
{
itemNumber = 0;
itemName = "";
itemSize = "";
unitPrice = 0.00M;
}
public StoreItem(int code, string name,
string size, decimal price)
{
itemNumber = code;
itemName = name;
itemSize = size;
unitPrice = price;
}
}
}
DepartmentStore8 -> Add -> New Item... : راست کلیک کرده سپس،Solution Explorer در پنجره ی.4
using System;
using DepartmentStore8;
public class Inventory
{
static int Main()
{
StoreItem si = null;
bool itemIsValid = true;
Console.Title = "Department Store Inventory";
510
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Console.WriteLine("Department Store Inventory");
while (itemIsValid)
{
si = new StoreItem();
Console.WriteLine("------------------------");
Console.Write("Enter Item #: ");
si.itemNumber = int.Parse(Console.ReadLine());
if (si.itemNumber < 0)
itemIsValid = false;
else
{
Console.Write("Enter Item Name: ");
si.itemName = Console.ReadLine();
Console.Write("Enter Item Size: ");
si.itemSize = Console.ReadLine();
Console.Write("Enter Unit Price: ");
si.unitPrice = decimal.Parse(Console.ReadLine());
Console.WriteLine("=-= Store Item =-=");
Console.WriteLine("Item #: {0}", si.itemNumber);
Console.WriteLine("Item Name: {0}", si.itemName);
Console.WriteLine("Size: {0}", si.itemSize);
Console.WriteLine("Unit Price: {0}", si.unitPrice);
}
}
return 0;
}
}
Size: 8
511
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
Size: 36W - 30L
Size: 16
Unit Price: 80
Item Number: -1
بازگشت
تصور کنید می خواهید اعداد فرد مثبت را از بیشنه مشخصی تا کمینه ی معینی بشمارید .به عنوان مثال ،برای شمردن اعداد فرد از 8تا 1به
1، 3، 5، 7،9
توجه داشته باشید که برای انجام این عملیات ،باالترین مقدار را در نظر می گیریم ،سپس 2را از آن کم می کنیم تا مقدار قبلی را به دست
آوریم .در برنامه نویسی برای حل این مشکل ،ابتدا تابع را می نویسیم سپس کاری می کنیم که تابع خود را فرابخواند .این پایه ی بازگشت در
معرفی بازگشت
برای راه اندازی برنامه ی کاربردی جدید ،در فهرست گزینه ی اصلی File -> New Project... ،را کلیک کنید. .8
در پنجره ی ،Solution Explorerراست کلیک کرده سپس Recursions -> Add -> New Item : .4
یکی از فرمول های موجود برای ایجاد متد بازگشتی به صورت زیر می باشد.
513
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
)ReturnValue Function(Arguments, if any
{
Optional Action . . .
;)(Function
Optionan Action . . .
}
متد بازگشتی با یک مقدار بازگشتی شروع می شود .در صورت برنگرداندن یک مقدار ،می توان آن را با کلید واژه ی voidتعریف کرد .پس از
اسمش ،متد قادر است یک یا چند آرگومان بگیرد .اغلب مواقع ،متد بازگشتی حداقل یک آرگومان می گیرد ،سپس آن را اصالح می کند .در
بدنه ی متد ،می توان هر کاری که الزم است انجام داد .دو قاعده ی اصلی وجود دارد که حین پیاده سازی متد بازگشتی باید رعایت کرد.
پیش یا پس از فراخوانی خود ،متد باید شرطی را بررسی کند که به متد اجازه ی توقف بدهد .در غیر این صورت ،متد تا ابد ادامه پیدا می
کند.
برای مثال باال (منظور مثال بازگشت می باشد) ،می توان ابتدا متدی ایجاد کرد که عدد صحیح ( )integerبه عنوان آرگومان می گیرد .به
منظور درک بهتر این مطلب ،فقط اعداد مثبت را در نظر می گیریم .در بدنه ی متد ،مقدار جاری آرگومان را نمایش می دهیم ،سپس 2واحد از آن
;using System
public class Exercise
{
)static void OddNumbers(int a
{
)if (a >= 1
{
;)Console.Write("{0}, ", a
;a -= 2
;)OddNumbers(a
}
}
)(public static int Main
{
;const int number = 9
;)"Console.WriteLine("Odd Numbers
;)OddNumbers(number
;)(Console.WriteLine
;return 0
}
}
514
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
. نتیجه ی زیر به دست می آید.همان طور که مشاهده می کنید متد خود را در بدنه اش فرا می خواند
Odd Numbers
9، 7، 5، 3، 1،
Press any key to continue...
. ابتدا فایل را به صورت زیر اصالح کنید، برای ایجاد تابع بازگشتی.8
using System;
public class Calculator
{
private long Factorial(long number)
{
if (number <= 1)
return 1;
return number * Factorial(number - 1);
}
public static int Main()
{
long factor = 0;
Calculator exo = new Calculator();
Console.Write("To calculate a factorial, enter a (small positive) number: ");
factor = long.Parse(Console.ReadLine());
Console.WriteLine("The factorial of {0} = {1}",factor, exo.Factorial(factor));
System.Console.ReadKey();
return 0;
}
}
515
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
استفاده از متدهای بازگشتی
متد های بازگشتی مکانیزم های ارزشمندی برای ساختن سری ها و لیست ها عرضه می کنند که در حقیقت مقادیر افزایشی یا کاهشی هستند
که از یک الگو پیروی می کنند .تصور کنید به جای تنها نمایش دادن اعداد فرد (همان طور که باال نشان دادیم) ،می خواهیم آن ها را به
صورت تصاعدی /افزایشی اضافه کنیم .در صورت داشتن 8 ،8تولید می کند .اگر 5دارید و 8را به 1اضافه می کنید و بعد نتیجه ی آن را به
( 5اضافه کنید) و غیره ....این فرایند را می توان به ترتیب زیر نمایش داد.
1=1
1+3=4
1+3+5=9
1 + 3 + 5 + 7 = 16
1 + 3 + 5 + 7 + 9 = 25
چنانچه عدد مساوی 8یا کوچک تر از آن بود ،متد 8باز می گرداند .در غیر این صورت 2 ،را .برای اجرای این عملیات ،ابتدا 8را در نظر می گیریم.
به 8اضافه می کنیم ،سپس 2را به نتیجه ی حاصله ( )2+8اضافه می کنیم .این پروسه را ادامه دهید تا به مقدار آرگومان برسید .متد به
;using System
public class Exercise
{
)static int AdditionalOdd(int a
{
)if (a <= 1
;return 1
;)return a + AdditionalOdd(a - 2
}
)static void OddNumbers(int a
{
)if (a >= 1
516
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
{
Console.Write("{0}, ", a);
a -= 2;
OddNumbers(a);
}
}
public static int Main()
{
const int Number = 9;
Console.WriteLine("Odd Numbers");
OddNumbers(Number);
Console.WriteLine();
Console.WriteLine("Sum of Odds: {0}\n", AdditionalOdd(Number));
return 0;
}
}
Odd Numbers
9، 7، 5، 3، 1،
Sum of Odds: 25
Press any key to continue...
517
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
private long Combinatorial(long a, long b)
{
if (a <= 1)
return 1;
return Factorial(a) / ((Factorial(b) * Factorial(a - b)));
}
public static int Main()
{
long factor = 0;
long second = 0;
Calculator exo = new Calculator();
Console.Write("To calculate a factorial, enter a (small positive) number: ");
factor = long.Parse(Console.ReadLine());
Console.Write("To calculate a permutation and the combination, enter a second (small positive) number: ");
second = long.Parse(Console.ReadLine());
Console.WriteLine("Factorial: F({0}) = {1}",factor, exo.Factorial(factor));
Console.WriteLine("Permutation: P({0}, {1}) = {2}", factor, second, exo.Permutation(factor, second));
Console.WriteLine("Combination: C({0}, {1}) = {2}",factor, second, exo.Combinatorial(factor, second));
System.Console.ReadKey();
return 0;
}
}
518
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
در پایان ضمن تشکر از انتخاب شما،امیدواریم مطالب این کتاب برای شما مفید بوده
باشد.
عالوه بر این می توانید پیشنهادات و انتقادات خود را از طریق
با ما در میان بگذارید. رایانامه [email protected]
519
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330