0% found this document useful (0 votes)
24 views519 pages

03 CSharpBook

Uploaded by

fatemeamd81
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
24 views519 pages

03 CSharpBook

Uploaded by

fatemeamd81
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 519

‫‪1‬‬

‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫بسم هللا الرحمن الرحیم‬

‫آموزشگاه تحلیل داده‬

‫تخصصی ترین مرکز برنامه نویسی و دیتابیس در ایران‬

‫کتاب آموزشی برنامه نویسی با ‪C#‬‬

‫نویسنده مهندس افشین رفوآ‬

‫‪2‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫تقدیم به نائب امام عصر‪ ،‬آیت الله خامنه ای‬

‫که عصا زدنش ضرب آهنگ حیدری دارد‪.‬‬

‫تقدیم به همه جویندگان علم که توان و امکان شرکت در کالس های حضوری‬
‫ما را ندارند‪.‬‬

‫‪3‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫فهرست‬

‫آموزشگاه تحلیل داده ‪2 ..................................................................................................‬‬

‫مقدمه ‪81 ...............................................................................................................‬‬

‫توجه ‪81 .................................................................................................................‬‬

‫مقدمه ای بر ‪81 ................................................................................... MS Visual Studio‬‬

‫راه اندازی ‪81 ......................................................................... Microsoft Visual C# Express‬‬

‫رابط (کاربری) ‪22 ..................................................................... The Microsoft Visual Studio‬‬

‫فهرست گزینه ی اصلی (‪02 ............................................................................ )main menu‬‬

‫نوارابزارها (‪02 ........................................................................................... )Toolbars‬‬

‫صفحه شروع (‪02 ................................................................................. )the Start page‬‬

‫نحوه ی بازکردن و بستن پنجره ‪22 ..................................................................................‬‬

‫پنهان سازی پنجره به صورت خودکار (‪22 ............................................................. )auto-hide‬‬

‫قرار دادن پنجره در کناره های برنامه (محیط ویژوال استودیو) ‪21 ...................................................‬‬

‫قرار دادن پنجره ای در باال یا پایین پنجره ای دیگر ‪18 ...............................................................‬‬

‫پنجره های شناور ‪11 ...............................................................................................‬‬

‫قرار دادن چند پنجره در یک ناحیه‪13 ..............................................................................‬‬

‫پنجره های تب دار (‪11 ..................................................................... )Tabbed Windows‬‬

‫معرفی پروژه های‪18 ................................................................................................. C#‬‬

‫برنامه های کاربردی کنسول ‪20 ........................................................................................‬‬

‫راه اندازی پروژه ‪24 ..................................................................................................‬‬

‫ایجاد فایل برای کد مورد نظر ‪22.......................................................................................‬‬

‫ایجاد فایل ‪24 ........................................................................................................‬‬

‫کد اصلی ‪22 ...................................................................................................... C#‬‬

‫نوشتن کد اصلی ‪14 ...............................................................................................‬‬

‫توضیحات ‪24 .........................................................................................................‬‬

‫ایجاد توضیحات ‪11 ................................................................................................‬‬

‫مدیریت فایل ها ‪24 ...................................................................................................‬‬

‫‪4‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫پنجره ‪11 ..................................................................................... Solution Explorer‬‬

‫دسترسی به فایل و باز کردن آن ‪38 ................................................................................‬‬

‫مدیریت ‪ solution‬و پروژه ‪40 ........................................................................................‬‬

‫‪32 ...............................................................................................Code Snippet‬‬

‫ذخیره سازی پروژه ‪32 .............................................................................................‬‬

‫بازکردن پروژه ‪34 .................................................................................................‬‬

‫‪34 ..................................................................................................... Solution‬‬

‫ساختن پروژه ‪31 ..................................................................................................‬‬

‫اجرای پروژه ‪21 .....................................................................................................‬‬

‫اجرای برنامه ‪21 ....................................................................................................‬‬

‫متغییرها (‪21 .............................................................................................. )Variables‬‬

‫مبنع ذخیره سازی ‪24 .................................................................................................‬‬

‫معرفی متغییرها ‪22 ...................................................................................................‬‬

‫نمایش های عددی ‪02 ................................................................................................‬‬

‫سیستم های عددی ‪42 ............................................................................................‬‬

‫عالمت دار و بدون عالمت ‪48 .......................................................................................‬‬

‫تعریف متغییرها ‪07 ...................................................................................................‬‬

‫تعریف متغییر ‪48 ...................................................................................................‬‬

‫مقدار دهی اولیه ی متغییر ‪42 .....................................................................................‬‬

‫مقدار تهی (‪41 ...................................................................................... )null value‬‬

‫‪41 .......................................................................................................... Byte‬‬

‫ترکیبی از چهار ‪41 .............................................................................................. bit‬‬

‫ترکیبی از ‪ 1‬بیت ‪42 ...............................................................................................‬‬

‫محاسبات در سه سیستم عددی مختلف ‪00 ...........................................................................‬‬

‫کاراکترها ‪04 .........................................................................................................‬‬

‫} ‪12 ..............................................................................................................‬‬

‫نکته ‪12 ...........................................................................................................‬‬

‫نکته ‪18 ............................................................................................................‬‬

‫‪5‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫نوع داده ی ‪40 ................................................................................................. Byte‬‬

‫‪12 ..................................................................................................... byte Age‬‬

‫استفاده کردن از ‪11 .........................................................................................Byte‬‬

‫‪ Byte‬عالمت دار ‪11 ...............................................................................................‬‬

‫واژه (‪44 .....................................................................................................)Word‬‬

‫‪12 ...............................................................................................short integers‬‬

‫‪Short integer‬های بدون عالمت ‪11 ..............................................................................‬‬

‫مواجهه با مقادیر بسیار بزرگ ‪11 ........................................................................................‬‬

‫به کار بردن ‪ integer‬های بدون عالمت ‪40 ............................................................................‬‬

‫‪11 ............................................................................................ Signed integers‬‬

‫‪ Integer‬های بدون عالمت ‪13 .....................................................................................‬‬

‫به کابردن ‪ integer‬های بدون عالمت ‪13 ..........................................................................‬‬

‫چهارکلمه ای (‪40 ................................................................................... )Quad – word‬‬

‫‪40 ................................................................................................. Long integers‬‬

‫اعداد حقیقی (‪44 ................................................................................... )real numbers‬‬

‫اعداد ممیز شناور (‪722 .................................................................. )floating-point numbers‬‬

‫اعداد با دو رقم اعشار ‪727 ............................................................................................‬‬

‫به کاربردن متغیری با دو رقم اعشار ‪720 ...............................................................................‬‬

‫‪722 ........................................................................................................ Decimal‬‬

‫به کاربردن مقادیر ‪821 .................................................................................. decimal‬‬

‫نوع داده های جانبی (‪882 ................................................................... )Accessory Data Type‬‬

‫رشته ها (‪772 .............................................................................................. )Strings‬‬

‫به کار بردن رشته ها ‪882 ...........................................................................................‬‬

‫تاریخ و زمان ‪772 ......................................................................................................‬‬

‫شی ها (‪772 ............................................................................................... )Objects‬‬

‫ثابت ها (‪774 ........................................................................................... )constants‬‬

‫ثابت های توکار ‪881 ................................................................................................‬‬

‫مدیریت کد ‪881 ..........................................................................................................‬‬

‫‪6‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫دسترسی پیدا کردن به متغیر ‪774 .....................................................................................‬‬

‫بریدن‪ ،‬کپی کردن و جای گذاری کد ‪700 ................................................................................‬‬

‫تغییر اسم متغیر ‪704 .................................................................................................‬‬

‫دسترسی پیدا کردن به تعریف متغیر (‪702 ............................................... )Variable's Declaration‬‬

‫دسترسی به خطی از کد از طریق اندیس آن ‪704........................................................................‬‬

‫عملگرهای اساسی ‪821............................................................................................... C#‬‬

‫مقدمه ‪704............................................................................................................‬‬

‫معرفی عملگرها و عملوندها ‪704.......................................................................................‬‬

‫} { ‪704 ...............................................................................................................‬‬

‫نحوه ی استفاده از {} ‪821 ..........................................................................................‬‬

‫پرانتز () ‪704 ..........................................................................................................‬‬

‫نحوه ی استفاده از عملگر پرانتز‪821 .................................................................................‬‬

‫عملگر نقطه ویرگول " ; " ‪742 .........................................................................................‬‬

‫نحوه ی به کاربردن نقطه ویرگول ‪812 ..............................................................................‬‬

‫عملگر ویرگول "‪742 ............................................................................................... " ،‬‬

‫استفاده از ویرگول ‪818 .............................................................................................‬‬

‫عملگر جایگزین (=)‪747 ...............................................................................................‬‬

‫نحوه ی تخصیص مقدار به متغیر ‪744 ..................................................................................‬‬

‫عالمت (') ‪744 .......................................................................................................‬‬

‫عالمت (") ‪742 .......................................................................................................‬‬

‫استفاده از عالمت نقل و قول ‪742 ....................................................................................‬‬

‫کروشه ][ ‪742 ........................................................................................................‬‬

‫عملگر مثبت (‪742 .................................................................................................)+‬‬

‫عملگر منفی (‪740 ................................................................................................. )-‬‬

‫عملگرهای یگانی ‪ :‬اندازه ی عملگر ‪744 ................................................................................‬‬

‫عمل جمع ‪722 .........................................................................................................‬‬

‫استفاده از عملگر ‪818 ............................................................................................ +‬‬

‫افزایش دادن متغییر‪724 .............................................................................................‬‬

‫‪7‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪724 .....................................................................................Pre and post increment‬‬

‫جمع مرکب (‪724 ............................................................................ )compound addition‬‬

‫عملیات ضرب ‪720 ....................................................................................................‬‬

‫به کاربردن عملگر ضرب ‪814 .......................................................................................‬‬

‫ضرب مرکب ‪724 ......................................................................................................‬‬

‫عملیات تفریق ‪742 ...................................................................................................‬‬

‫به کاربردن عملگر منها ‪832 ........................................................................................‬‬

‫کاهش دادن متغیر‪742 ...............................................................................................‬‬

‫‪744 .............................................................................. Pre-decrementing a variable‬‬

‫تفریق مرکب (‪742....................................................................... )compound subtraction‬‬

‫عملیات تقسیم (‪742.......................................................................... )division operation‬‬

‫به کاربر بردن عملگر تقسیم ‪834 ..................................................................................‬‬

‫تقسیم مرکب (‪722 ..........................................................................)Compound division‬‬

‫باقی مانده (‪727 ...................................................................................... )Remainder‬‬

‫باقی مانده ی مرکب (‪720 ................................................................. )compound remainder‬‬

‫‪724 ................................................................................................ Bit Operations‬‬

‫"معکوس کردن" ‪821 ................................................................. (" Reversing " a bit ) Bit‬‬

‫پیوستگی بیتی (‪821 ..................................................................... )Bitwise Conjunction‬‬

‫جداسازی بیتی (‪824...................................................................... )Bitwise Disjunction‬‬

‫‪821 .......................................................................................... Bitwise Exclusion‬‬

‫انتقال ‪ Bit‬ها از راست به چپ ‪842..................................................................................‬‬

‫انتقال ‪ Bit‬ها به سمت راست ‪841 .................................................................................‬‬

‫کالس ها ‪841 ...........................................................................................................‬‬

‫نحوه ی وارد کردن کالس ‪704 .........................................................................................‬‬

‫نام گذاری کالس ‪704 .................................................................................................‬‬

‫مدیریت کالس ها ‪704 ................................................................................................‬‬

‫پنجره ی ‪843 ........................................................................................ Class View‬‬

‫ایجاد کالس ‪844 ...................................................................................................‬‬

‫‪8‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫وارد کردن کالس ‪747 .................................................................................................‬‬

‫نحوه ی دستیابی به کالس ‪740........................................................................................‬‬

‫تغییر اسم کالس ‪744 .................................................................................................‬‬

‫ابزار جانبی زبان ‪744 ..............................................................................................C#‬‬

‫کد نا امن ‪811 .....................................................................................................‬‬

‫‪813 ........................................................................................ Region Delimiters‬‬

‫مبانی نحوه ی استفاده از کالس ‪747 ...................................................................................‬‬

‫ایجاد (یک) شی ‪818 ...............................................................................................‬‬

‫نوع مقدار (‪ )value types‬و نوع ارجاع (‪818 ................................................... )reference type‬‬

‫تعریف متغیر نوع کالس ‪811 .......................................................................................‬‬

‫ایجاد شی تهی (‪811 ............................................................................... )Null Object‬‬

‫به اشتراک گذاری کالس ‪811 .......................................................................................‬‬

‫زباله روبی (‪813........................................................................... )garbage collection‬‬

‫فیلدهای کالس ‪744...................................................................................................‬‬

‫افزودن فیلد به کالس ‪812 .........................................................................................‬‬

‫سطح دسترسی اعضای کالس)‪740.................................................. (access modifiers of a class‬‬

‫اعضای خصوصی یک کالس ‪814.....................................................................................‬‬

‫اعضای عمومی یک کالس ‪814.......................................................................................‬‬

‫تعیین سطح دسترسی به اعضای کالس ‪811.........................................................................‬‬

‫اعضای داخلی کالس‪744...............................................................................................‬‬

‫مقدار دهی اولیه ی شی ‪744 ...........................................................................................‬‬

‫عملگر نقطه (‪811 ................................................................................................ ).‬‬

‫به کاربردن فیلدهای یک کالس ‪228 ................................................................................‬‬

‫به کاربردن نوع ناشناس ‪020 .........................................................................................‬‬

‫مدیریت فیلدهای کالس ‪022 .........................................................................................‬‬

‫نحوه ی دسترسی به فیلد ‪223 .....................................................................................‬‬

‫تغییر اسم فیلد ‪223 ...............................................................................................‬‬

‫مبانی متدها ‪222 ........................................................................................................‬‬

‫‪9‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫معرفی متدها ‪022 ....................................................................................................‬‬

‫ساختن متد ‪024 ......................................................................................................‬‬

‫سطح دسترسی متد ‪024...............................................................................................‬‬

‫فراخوانی متد ‪024.....................................................................................................‬‬

‫نحوه ی ایجاد متدهای یک کالس ‪072 ..................................................................................‬‬

‫متدی که مقدار باز می گرداند ‪282 ..................................................................................‬‬

‫مقدمه ای بر تابع )(‪ Main‬یک برنامه ی کاربردی ‪072 ..................................................................‬‬

‫بازگرداندن مقداری از تابع )(‪283 ........................................................................... Main‬‬

‫مبانی آرگومان های متد ‪072 ...........................................................................................‬‬

‫فراخوانی متدی که آرگومان می گیرد ‪284...........................................................................‬‬

‫ارسال آرگومان ها ‪281..............................................................................................‬‬

‫فراخوانی آرگومان با استفاده از اسم‪222............................................................................‬‬

‫ارسال آرگومان ها به متد یک کالس ‪221 ................................................................................‬‬

‫روش های ارسال آرگومان ‪002 ........................................................................................‬‬

‫ارسال آرگومان با استفاده از مقدار ‪221 ............................................................................‬‬

‫ارسال آرگومان با استفاده از ارجاع ‪222.............................................................................‬‬

‫ارسال آرگومان ‪218 ........................................................................................... out‬‬

‫سربارگذاری متد (‪044 .................................................................... )method overloading‬‬

‫آرگومان های اختیاری ‪024 ............................................................................................‬‬

‫آرگومانی با مقدار اختیاری ‪211 .....................................................................................‬‬

‫فراخوانی آرگومان با (استفاده از) اسم ‪024 ...........................................................................‬‬

‫مبانی سازنده ها ‪232 ....................................................................................................‬‬

‫توصیف ‪042 ..........................................................................................................‬‬

‫معرفی سازنده ها ‪040 ................................................................................................‬‬

‫سازنده ی (‪ )constructor‬پیش فرض ‪040 ..........................................................................‬‬

‫به کاربردن سازنده ی پیش فرض ‪231 .............................................................................‬‬

‫سازنده ای که مقداردهی اولیه می کند ‪044...........................................................................‬‬

‫دستورالعمل ایجاد سازنده ای که مقداردهی (اولیه) می کند ‪232 ..................................................‬‬

‫‪10‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫سربارگذاری سازنده (‪040............................................................. )constructor overloading‬‬

‫سربارگذاری سازنده‪231 ...........................................................................................‬‬

‫سازنده ای با مقادیر پیش فرض‪020...................................................................................‬‬

‫استفاده از سازنده های یک کالس ‪022 ...............................................................................‬‬

‫مخرب های کالس (‪221 ...................................................................... )class destructor‬‬

‫متغیرهای خواندنی (‪223 ................................................................. )read-only variables‬‬

‫معرفی فضاهای نام)‪221................................................................................ (Namespace‬‬

‫مقدمه ‪024............................................................................................................‬‬

‫ایجاد فضای نام به صورت دستی ‪002 .................................................................................‬‬

‫نحوه ی ایجاد فضای نام ‪007...........................................................................................‬‬

‫فضای نامی که به صورت اتوماتیک ایجاد شده ‪248..................................................................‬‬

‫دسترسی به اعضای فضای نام ‪007....................................................................................‬‬

‫دسترسی به اعضای فضای نام‪242 .................................................................................‬‬

‫استفاده از چندین فضای نام ‪004.....................................................................................‬‬

‫مقدمه ‪241........................................................................................................‬‬

‫ایجاد چندین فضای نام ‪241.......................................................................................‬‬

‫استفاده از (یک) فضای نام ‪004......................................................................................‬‬

‫به کار بردن فضاهای نام ‪243......................................................................................‬‬

‫گنجاندن یک فضای نامی در دل فضای نامی دیگر ‪002 .................................................................‬‬

‫سربارگذاری کالس امری اماان ناپذیر ‪042 ............................................................................‬‬

‫استفاده از کالس نام گذاری شده ‪047.................................................................................‬‬

‫اسم مستعار )‪ (alias‬فضای نام ‪040 ..................................................................................‬‬

‫نحوه ی ایجاد و استفاده از فضای نام ‪212 ..........................................................................‬‬

‫مدیرت فضای نام ‪044................................................................................................‬‬

‫درج کردن فضای نام ‪211..........................................................................................‬‬

‫تغییر اسم فضای نام ‪211 ..........................................................................................‬‬

‫معرفی فضای نام توکار (‪211 ............................................................ )built-in namespaces‬‬

‫معرفی فضای نام ‪040 ...................................................................................... System‬‬

‫‪11‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫معرفی دیگر فضاهای نامی ‪044 .......................................................................................‬‬

‫نوع داده های‪044 ............................................................................................. .NET‬‬

‫مقدمه ای بر کتابخانه های سفارشی‪218 ..................................................................................‬‬

‫ایجاد کتابخانه ی سفارشی ‪047 ........................................................................................‬‬

‫نحوه ی ایجاد کتابخانه ‪212..........................................................................................‬‬

‫راه اندازی کتابخانه ‪211 ............................................................................................‬‬

‫ساختن کتابخانه ‪213 ..............................................................................................‬‬

‫ایجاد کتاب خانه در برنامه ‪213 ....................................................................................‬‬

‫به کاربردن کتابخانه ی سفارشی (‪044 ............................................................. )custom library‬‬

‫استفاده از کتابخانه ی سفارشی ‪040 ..................................................................................‬‬

‫مقدمه ای بر کتابخانه های توکار ‪211.....................................................................................‬‬

‫مقدمه ای بر کتابخانه ی ‪044.......................................................................................C#‬‬

‫نوع داده ی پویا (‪211...................................................................... )dynamic data type‬‬

‫قابلیت همکاری ‪121 ...............................................................................................‬‬

‫کتابخانه ی ‪424 .............................................................................................. win32‬‬

‫کتابخانه ی ‪424 ................................................................................. CLI/Visual C++‬‬

‫به کاربردن کتابخانه ‪422 .............................................................................................‬‬

‫استاتیک ‪124 ..........................................................................................................‬‬

‫تعریف متغیر ایستا ‪424 ...............................................................................................‬‬

‫متدهای ایستا ‪470 ...................................................................................................‬‬

‫ایجاد متد ایستا‪182 ...............................................................................................‬‬

‫کالس های ایستا ‪474 .................................................................................................‬‬

‫ایجاد کالس ایستا ‪183 ............................................................................................‬‬

‫توابع سازنده ی ‪182 ....................................................................................... Static‬‬

‫محدوده و طول عمر یک متغیر ‪402 ....................................................................................‬‬

‫ایجاد و استفاده از متغیر سراسری ‪402 ................................................................................‬‬

‫متغیرهای ایستا و سراسری ‪400 ......................................................................................‬‬

‫خصوصیات اعضای ایستا ‪404 ........................................................................................‬‬

‫‪12‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫ثابت ها ‪121 ......................................................................................................‬‬

‫نمونه ی ‪404 ................................................................................................... this‬‬

‫بررسی اجمالی اعداد ‪121 ................................................................................................‬‬

‫عالمت اعداد ‪404 ....................................................................................................‬‬

‫مثال های فراخوانی متد ‪122 .......................................................................................‬‬

‫بخش صحیح عدد ممیز شناور ‪400....................................................................................‬‬

‫کمینه ی دو مقدار‪404................................................................................................‬‬

‫بیشینه ی مقدار ‪ integer‬یک سری ‪404 ..............................................................................‬‬

‫مثال فراخوانی متد باال ‪121 ........................................................................................‬‬

‫تبدیل مقادیر ‪112 ......................................................................................................‬‬

‫تبدیل ضمنی ‪442 ...................................................................................................‬‬

‫تبدیل صریح ‪440 ....................................................................................................‬‬

‫کالس ‪442 ................................................................................................ Convert‬‬

‫حساب (‪113 ............................................................................................. )Arithmetic‬‬

‫مقادیر مطلق ‪442 ....................................................................................................‬‬

‫سقف (بیشترین مقدار) یک عدد ‪440 ...............................................................................‬‬

‫کف (کمترین مقدار) یک عدد ‪444 ...................................................................................‬‬

‫توان یک عدد ‪444 ...................................................................................................‬‬

‫مقدار نمایی (‪422 ............................................................................ )the Exponentional‬‬

‫لگاریتم طبیعی ‪427 ...................................................................................................‬‬

‫لگاریتم پایه ی ‪427 ................................................................................................ 72‬‬

‫لگاریتم به هر مبنایی ‪420 ............................................................................................‬‬

‫ریشه ی دوم ‪ /‬جذر ‪424 ..............................................................................................‬‬

‫مثلثات ‪111 .............................................................................................................‬‬

‫ثابت ‪424 ........................................................................................................ PI‬‬

‫کسینوس یک مقدار ‪422 .............................................................................................‬‬

‫سینوس یک مقدار ‪420 ..............................................................................................‬‬

‫تانژانت ‪424 .........................................................................................................‬‬

‫‪13‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪424 ................................................................................................. Arc Tangent‬‬

‫خواندن وقالب بندی داده ها ‪111 ........................................................................................‬‬

‫درخواست (دریافت) مقدار رشته ‪424 ................................................................................‬‬

‫درخواست عدد ‪447 ..................................................................................................‬‬

‫خواندن مقادیر عددی ‪132 ........................................................................................‬‬

‫درخواست تاریخ و زمان ‪444 .........................................................................................‬‬

‫درخواست مقادیر تاریخ و زمان ‪132................................................................................‬‬

‫نمایش داده ها با‪444................................................................................. placeholder‬‬

‫تبدیل به رشته ‪427 ..................................................................................................‬‬

‫قالب بندی نمایش داده ها ‪427 .......................................................................................‬‬

‫قالب بندی خط ‪422 ...................................................................................................‬‬

‫قالب بندی تاریخ و زمان‪424..........................................................................................‬‬

‫مدیریت قالب بندی تاریخ ‪ /‬زمان ‪123..............................................................................‬‬

‫ترکیبات کالس ها ‪121..................................................................................................‬‬

‫تودرتو کردن کالس ها (‪424....................................................................... )class nesting‬‬

‫کالسی به عنوان فیلد ‪404 ...........................................................................................‬‬

‫استفاده از کالس به عنوان فیلد ‪141 .............................................................................‬‬

‫کالس به عنوان یک نوع ‪402..........................................................................................‬‬

‫بازگرداندن شی از متد ‪142........................................................................................‬‬

‫ارسال کالس به عنوان آرگومان ‪400 .................................................................................‬‬

‫بازگرداندن یک شی یا ارسال آن به عنوان آرگومان ‪442 ..............................................................‬‬

‫ارسال یک کالس به عنوان آرگومان خود آن کالس ‪444 ...............................................................‬‬

‫بازگرداندن کالسی از متد همان کالس ‪444 ..........................................................................‬‬

‫مقدمه ای بر شرطی ها ‪112 ..............................................................................................‬‬

‫متغیر های ‪440 ............................................................................................ Boolean‬‬

‫تعریف متغیرهای ‪112 ................................................................................... Boolean‬‬

‫بازیابی مقدار متغیر ‪114................................................................................ Boolean‬‬

‫ایجاد فیلد ‪114......................................................................................... Boolean‬‬

‫‪14‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫آرگومان های ‪111 ....................................................................................... Boolean‬‬

‫‪444 .................................................................................................. enumeration‬‬

‫ایجاد ‪128 .......................................................................................... enumeration‬‬

‫تعریف متغیر ‪122 ..................................................................................enumeration‬‬

‫مقداردهی اولیه ی متغیر ‪122 ..................................................................... enumeration‬‬

‫قابلیت رویت‪ ،‬دسترسی به ‪121 ................................................................... enumeration‬‬

‫‪ enumeration‬به عنوان متغیر عضو ‪123 ..........................................................................‬‬

‫ارسال ‪ enumeration‬به عنوان آرگومان ‪124 .....................................................................‬‬

‫تعریف و استفاده از نوع داده ای ‪121 ....................................................................... enum‬‬

‫برگرداندن ‪ enumeration‬از متد ‪182 ..............................................................................‬‬

‫عملگرهای منطقی ‪274 ................................................................................................‬‬

‫مقدمه ‪181 ........................................................................................................‬‬

‫عملگر تساوی == ‪181 ..............................................................................................‬‬

‫عملگر منطقی ‪182 ............................................................................................. Not‬‬

‫کوچکتر از ‪184 ................................................................................................ < :‬‬

‫کوچکتر یا مساوی ‪184 ....................................................................................... <= :‬‬

‫بزرگتر از‪181 ................................................................................................... > :‬‬

‫بزرگتر یا مساوی => ‪181 ...........................................................................................‬‬

‫دستورات شرطی ‪122 ....................................................................................................‬‬

‫چنانچه شرطی درست بود ‪202 ........................................................................................‬‬

‫عبارت های شرطی ‪122 .............................................................................................‬‬

‫ایجاد شرط ‪122 .................................................................................................. if‬‬

‫به کاربردن شرط ساده ی ‪202 ....................................................................................... if‬‬

‫‪204 ........................................................................................................ if...else‬‬

‫استفاده از شرط ‪118 .................................................................................... if...else‬‬

‫عملگر های ‪113 ......................................................................................... if...else‬‬

‫‪ if...else if‬و ‪111 ...................................................................................... if...else‬‬

‫دستورهای شرطی ‪112 ......................................................................................... Switch‬‬

‫‪15‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫ساختار شرطی ‪220 ................................................................................... Case switch‬‬

‫دستورات شرطی ‪220 ........................................................................................ switch‬‬

‫‪ Case‬های ترکیبی ‪240 ..............................................................................................‬‬

‫استفاده از ‪244 ..................................................................................... Enumeration‬‬

‫عطف منطقی ‪244 ............................................................................................. AND‬‬

‫مقدمه ‪133 .......................................................................................................‬‬

‫فصل منطقی‪220 ................................................................................................ or :‬‬

‫مقدمه ‪124 ........................................................................................................‬‬

‫فصل های ترکیبی ‪148 .............................................................................................‬‬

‫نحوه ی شمارش در حلقه ‪148 ............................................................................................‬‬

‫تارار‪ /‬حلقه ی شرطی ‪207 .............................................................................................‬‬

‫معرفی تکرار شرطی ‪148 ...........................................................................................‬‬

‫حلقه ی ‪204 ................................................................................................. While‬‬

‫به کاربردن ‪143 ........................................................................................... while‬‬

‫دستور ‪200............................................................................................. do...while‬‬

‫شمارش و تارار ‪204..................................................................................................‬‬

‫مدیریت دستورات شرطی ‪247 ........................................................................................‬‬

‫‪118 .......................................................................................................... For‬‬

‫تودرتو کردن دستور شرطی ‪112 ...................................................................................‬‬

‫تودرتو کردن شرط ها ‪111 .........................................................................................‬‬

‫قفل کردن تراکنش ‪244..............................................................................................‬‬

‫نحوه ی قفل کردن تراکنش ‪111....................................................................................‬‬

‫ایجاد وقفه در جریان دستور شرطی ‪242 ..............................................................................‬‬

‫;‪112 ...................................................................................................... break‬‬

‫ادامه دادن دستور شرطی ‪247 .........................................................................................‬‬

‫;‪118 .................................................................................................... continue‬‬

‫اصالح مقداری در حلقه ‪240 ...........................................................................................‬‬

‫رفتن به لیبل تعیین شده ‪244 ........................................................................................‬‬

‫‪16‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫رفتن به یک لیبل ‪111 .............................................................................................‬‬

‫متدها و دستورات شرط ها ‪112...........................................................................................‬‬

‫مقداری را از متد بازگرداندن ‪242 .....................................................................................‬‬

‫متدها و شرط ها ‪240 .................................................................................................‬‬

‫بازگشت شرطی ‪422 ..................................................................................................‬‬

‫بازگرداندن مقداری به صورت شرطی ‪322 ..........................................................................‬‬

‫)‪420.................................................................................................. While (true‬‬

‫استفاده از )‪321 ..................................................................................... while (true‬‬

‫بازگشت ‪381 ............................................................................................................‬‬

‫معرفی بازگشت ‪474 ..................................................................................................‬‬

‫ایجاد متد بازگشتی ‪474 ..............................................................................................‬‬

‫ایجاد متد بازگشتی ‪383 ...........................................................................................‬‬

‫استفاده از متدهای بازگشتی ‪382...................................................................................‬‬

‫به کاربردن متدهای بازگشتی ‪384 .................................................................................‬‬

‫‪17‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫مقدمه‬

‫حضرت علی(ع)‬ ‫زکات علم نشر آن است‪.‬‬

‫موسسه آموزشی تحلیل داده ‪ ،‬با حضور جمعی از متخصصین مجرب در زمینه برنامه نویسی در نظر دارد‪،‬مطالب آموزشی خود را در قالب کتاب‬

‫های آموزشی و فیلم ‪ ،‬به صورت رایگان در دسترس عموم قرار دهد تا حتی آن دسته از عزیزانی که بنا به دالیل مالی‪،‬مسافت جغرافیایی و یا‬

‫نداشتن وقت کافی ‪ ،‬امکان شرکت در دوره های حضوری برای آنها میسر نیست‪،‬از یادگیری بی بهره نمانند‪.‬‬

‫عالوه بر این عالقه مندان می توانند ‪ ،‬با ثبت نام در انجمن سایت تحلیل داده‪،‬سواالت خود را مطرح نموده و مدرسین آموزشگاه و اعضای‬

‫انجمن در اسرع وقت‪،‬پاسخ های خود را‪ ،‬حتی االمکان به صورت فیلم‪ ،‬در دسترس عموم قرار دهند‪.‬‬

‫لذ ا از کلیه فعاالن در این زمینه دعوت می شود‪ ،‬در این حرکت جمعی در کنار ما باشند و با حضور فعال خود در انجمن‪،‬گام موثری در بهبود سطح‬

‫علمی جوانان کشور عزیزمان‪،‬ایران بردارند‪.‬‬

‫آدرس سایت ‪http://www.tahlildadeh.com :‬‬

‫توجه ‪:‬‬
‫برای دانلود سورس کد مثال های کتاب ‪ ،‬اینجا را کلیک کنید‪.‬‬

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

‫کلیک کنید‪.‬‬

‫راه اندازی ‪Microsoft Visual C# Express‬‬

‫به منظور راه اندازی برنامه ی ‪ ،Visual C# 2010 Express‬روی گزینه های زیر کلیک کنید ‪Start -> (All) Programs -> Microsoft :‬‬

‫‪Visual Studio 2010 Express -> Microsoft Visual C# 2010 Express‬‬

‫‪19‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫رابط (کاربری) ‪The Microsoft Visual Studio‬‬

‫فهرست گزینه ی اصلی (‪)main menu‬‬

‫باالترین قسمت رابط برنامه ی ‪ Microsoft Visual Studio‬منوی اصلی را نشان می دهد که به دسته هایی همچون ‪ File‬و ‪ Edit‬تقسیم‬

‫شده‪ .‬منو اصلی همان کارایی فهرست گزینه ی یک برنامه ی کاربردی ساده را دارد‪.‬‬

‫نوارابزارها (‪)Toolbars‬‬

‫زیر (قسمت) منوی اصلی بخشی است به نام نوارابزار (‪ .)toolbar‬معموالً‪ ،‬هنگامی که برنامه باال می آید‪ ،‬نوارابزار استاندارد ( ‪Standard‬‬

‫‪ )toolbar‬را به عنوان پیش فرض خود نمایش می دهد‪ .‬تعدادی نوارابزار اضافه بر سازمان هم در نتیجه ی گزینه هایی که شما انتخاب می‬

‫کنید یا عملیاتی که انجام می دهید نمای‬

‫ش داده می شود‪ .‬برای انجام این کار (دیدن نوارابزارهای فرعی)‬

‫‪20‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫در بخش ‪ main menu‬روی ‪ View -> Toolbars‬کلیک کرده‪ ،‬سپس ‪ toolbar‬مورد نظر را انتخاب کنید‪.‬‬

‫روی ‪ main menu‬یا هر ‪toolbar‬‬

‫دلخواه دیگر راست کلیک کنید‪ .‬فهرستی نمایان می شود که می توان در آن نوارابزار دلخواه را انتخاب کرد‪.‬‬

‫فهرست ها و نوارابزارهای ‪ Microsoft Visual Studio‬را می توان مطابق میل تنظیم (‪ )customize‬کرد‪ .‬می توان با اضافه کردن یک‬

‫‪menu item‬به فهرست گزینه‪ ،‬آن را مطابق میل تنظیم کرد یا با اضافه کردن تنها یک دکمه به نوارابزار‪ ،‬آن را (سفارشی) تغییر داد‪ .‬برای‬

‫شروع‪ ،‬روی هر گزینه ای (در ‪ main menu‬یا ‪ )toolbar‬راست کلیک کرده‪ ،‬سپس گزینه ی ‪ customize‬را انتخاب کنید‪ .‬می خواهیم آیتمی‬

‫به نام ‪ Start without debugging‬را به سمت چپ ‪ Start button‬اضافه کنیم‪.‬‬

‫‪21‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫برای این کار مراحل زیر را دنبال کنید‪.‬‬

‫روی گزینه ی ‪( customize‬در ‪ main menu‬یا ‪ ) toolbar‬کلیک کنید‪.‬‬

‫در پنجره ی محاوره (‪ ،)dialog box‬روی تَبِ ‪ Commands‬کلیک کنید‪.‬‬

‫روی ‪ Toolbars radio button‬کلیک کنید‪.‬‬

‫در قسمت ‪ ،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 ،‬در پس زمینه فعال است و توسط یک تب نشان‬

‫داده می شود‪ .‬برای مشاهده ی ‪Start page‬‬

‫روی برچسب ‪ Start page‬کلیک کنید‪.‬‬

‫سپس‪( ،‬در ‪ ،)main menu‬گزینه ی ‪ View -> Start Page‬را انتخاب کنید‪.‬‬

‫نحوه ی بازکردن و بستن پنجره‬

‫پس از باال آمدن برنامه‪ ،‬تعدادی پنجره در اختیار شما قرار می گیرد‪ .‬پنجره های مزبور مرتب مورد استفاده ی کاربران قرار می گیرند‪ .‬چنانچه‬

‫پنجره ای مناسب کار شما نیست‪ ،‬می توانید به راحتی آن را از صفحه حذف کنید‪ .‬برای بستن پنجره نیز همان طور که می دانید باید روی گزینه‬

‫ی ‪ close‬آن کلیک کنید‪.‬‬

‫تمامی پنجره های انتخابی در فهرست ‪ View Menu‬به نمایش گذاشته شده‪.‬بنابراین‪ ،‬می توانید پنجره ی دلخواه را از فهرست نام برده‬

‫انتخاب کنید‪.‬‬

‫پنهان سازی پنجره به صورت خودکار (‪)auto-hide‬‬

‫هنگام کار با پروژه‪ ،‬از پنجره هایی استفاده می کنیم که هریک کاربردی جداگانه دارند‪ .‬برخی از پنجره ها با تنها یک آیکون نشان داده می‬

‫شوند و بدنه ی اصلی آن ها نمایش داده نمی شود‪ .‬به منظور مشاهده چنین پنجره ای‪ ،‬کافی است مکان نمای موس را روی آن قرار دهید‪ .‬این‬

‫کار پنجره ی مذکور را باز می کند‪.‬‬

‫‪26‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫پس از باز کردن پنجره‪ ،‬نوارعنوان (‪ )title bar‬ای با سه دکمه پدیدار می شود‪ .‬یکی از دکمه های نام برده ‪ Auto hide‬می باشد‪.‬‬

‫‪27‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫چنانچه پس از باز کردن پنجره متوجه شدید که دیگر به آن نیازی نیست‪ ،‬می توانید با برداشتن مکان نمای موس از روی آن‪ ،‬پنجره را محو‬

‫کنید‪ .‬پنجره ی نام برده به حالت پیشین خود باز می گردد‪ .‬اما‪ ،‬چنانچه مایلید پنجره ای (حتی پس از برداشتن مکان نمای موس از روی آن) باز‬

‫بماند باید روی دکمه ی ‪ Auto hide‬کلیک کنید‪.‬‬

‫به صورت پیش فرض‪ ،‬برنامه برخی از پنجره ها را در سمت چپ و برخی دیگر را در سمت راست صفحه قرار می دهد‪ .‬همچنین‪ ،‬می توان آرایش‬

‫و ترتیب پنجره ها را مطابق میل تغییر داد‪ .‬برای این منظور‪ ،‬روی نوارعنوان (‪ )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‬‬
‫چنانچه پنجره ای شناور است و شما مایلید آن را در جای مشخصی از صفحه (مثالً سمت راست) ضمیمه ‪ /‬متصل کنید‪ ،‬باید روی نوارعنوان‬

‫(‪ )title bar‬کلیک راست کرده و گزینه ی ‪ Dock‬را انتخاب کنید‪.‬‬

‫چناچه‪ ،‬پنجره ای به ناحیه ی خاصی از صفحه متصل است و می خواهید آن را شناور کنید‪ ،‬روی نوارعنوان کلیک راست کرده و گزینه ی ‪ Float‬را‬

‫انتخاب کنید‪.‬‬

‫‪34‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫قرار دادن چند پنجره در یک ناحیه‬

‫می توان در یک طرف ص فحه‪ ،‬چند پنجره را باهم گنجاند‪ .‬ابتدا‪ ،‬پنجره ی پایه (اصلی) را بزرگ نمایی کرده و آن را به ناحیه ی مورد نظر متصل‬

‫کنید‪ .‬سپس‪ ،‬نوارعنوان پنجره را گرفته و آن را به سمت ناحیه ی مقصد بکشید‪ ،‬تا این که قسمت پایین پنجره ی اصلی دو بخش‬

‫برجسته‪/‬پررنگ و غیر برجسته پیدا کند‪.‬‬

‫حال موس را رها کنید‪.‬‬

‫‪35‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫به منظور حذف پنجره‪ ،‬تب آن را بیرون بکشید‪.‬‬

‫‪36‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫برای قرار دادن پنجره در سمت راست یا چپ پنجره ی موجود‪ ،‬ابتدا پنجره ی فرعی را به محل پنجره ی اصلی (موجود) بکشید‪ .‬سپس‪ ،‬کادر‬

‫راهنما (‪ )guiding box‬ی سمت چپ را انتخاب کنید‪.‬‬

‫این‬

‫‪37‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫به صورت زیر در می آید‪.‬‬

‫‪38‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫پنجره های تب دار (‪)Tabbed Windows‬‬

‫می توانید کاری کنید که پنجره تب خود را در باالترین قسمت ‪ Code editor‬نشان دهد‪ .‬این کار را می توان به دو صورت انجام داد‪.‬‬

‫می توان پنجره را کشید و آن را روی تب ‪ Start page‬رها کرد‪.‬‬

‫‪39‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪40‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫می توان ابتدا راست کلیک کرد و بعد گزینه ی ‪ Dock as Tabbed Document‬را انتخاب کرد‪.‬‬

‫معرفی پروژه های ‪C#‬‬


‫‪41‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫از زبان برنامه نویسی برای دادن دستور انجام کار خاصی به کامپیوتر استفاده می شود‪ .‬زبان برنامه نویسی مانند زبان محاوره از کلمات معنی‬

‫دار‪ ،‬گرامر‪ ،‬فرمول ها و قوانین خاص تشکیل شده که برای ساختن جمالت و مفاهیم معنادار باید از آن قوانین پیروی کرد‪.‬‬

‫زبان های برنامه نویسی متعددی وجود دارند‪ .‬برخالف زبان انسان ها‪ ،‬زبان های برنامه نویسی کامپیوتر بسته به اهداف یا نقش هایی که ایفا‬

‫می کنند‪ ،‬طبقه بندی می شوند‪.‬‬

‫سخت افزارها عبارتند از مجموعه قطع اتی که دستور را از زبان برنامه نویسی دریافت می کنند‪ .‬برخی زبان های برنامه نویسی برای بخش‬

‫(سخت افزاری) خاصی تعبیه شده اند و یا محیط خاصی را هدف دستورات خود قرار می دهند‪ .‬چنین محیطی ‪ ،‬از سیستم عامل خاصی استفاده‬

‫می کند که از یک وسیله (مثل موبایل) به وسیله ی دیگر (کامپیوتر) قابل انتقال نمی باشد‪ .‬برخی زبان های برنامه نویسی هم بخش یا قطعه‬

‫ی خاصی را هدف نمی گیرند‪.‬‬

‫برخی زبان ها برای رفع یک مسئله ی خاص طراحی شده اند و توانایی انجام وظایف معمول (زبان های دیگر) را ندارند‪ .‬برای مثال‪ ،‬زبان هایی‬

‫وجود دارند که فقط قادر ب ه نشان دادن محتویات وب هستند و از آن ها نمی توان برای انجام محاسبات ریاضی و هندسی بهره گرفت‪ .‬برخی‬

‫برنامه ها طوری تعبیه شده اند که تنها با مقدارهای (‪ )value‬خاصی مثل (‪ true‬یا ‪ )false‬کار می کنند‪ .‬تعدادی زبان برنامه نویسی هم داریم‬

‫که به حل تمام مسائل می پردازند‪.‬‬

‫‪ C#‬از آن دسته زبان هایی است که عالوه بر اجرای دستورات‪ ،‬به حل مسائل نیز می پردازد‪ .‬این زبان بر روی تمام سیستم عامل ها از جمله‬

‫ویندوز قابل اجرا است‪ C# .‬از جمله زبان هایی است که در ‪ Microsoft.NET Framework‬به کار می رود‪Microsoft.NET Framework .‬‬

‫کتابخانه ای از اشیاء است که به کمک آن می توان در کامپیوتر چیزهایی را به وجود آورد یا ترسیم کرد‪.‬‬

‫پروژه ی کامپیوتری عبارتند از گروهی فایل و شئ که دستورهای مورد نظر را برای انجام عملکرد های معین تعبیه می کند‪ .‬پروژه ی ‪ C#‬متشکل‬

‫از چند فایل است که دستورهای برنامه را دربردارند‪ .‬یک پروژه ی ساده ی ‪ C#‬دربردارنده ی یک فایل است که تمام دستورات مورد نیاز‬

‫برنامه را حمل می کند‪ .‬این در حالی است که پروژه های ی پیشرفته ‪ C#‬حاوی بیش از یک فایل است‪.‬‬

‫برنامه های کاربردی کنسول‬

‫زبان برنامه نویسی ‪ C#‬به منظور طراحی و نوشتن برنامه های کاربردی ‪ DOS‬به کار می رود‪ .‬برای طراحی چنین برنامه ای باید دستورات مورد‬

‫نظر را در برنامه ی ‪ Notepad‬یا محیط برنامه نویسی مانند ‪ visual studio‬نوشت‪.‬‬

‫‪42‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫برای راه اندازی برنامه ‪ ،Microsoft Visual C# 2010 Express‬دستورالعمل زیر را دنبال کنید ‪Start -> (All) Programs -> :‬‬

‫‪Microsoft Visual Studio 2010 Express -> Microsoft Visual C# 2010 Express‬‬

‫راه اندازی پروژه‬

‫برنامه ی ‪ Microsoft Visual C# 2010 Express‬را اجرا کنید‪.‬‬

‫به منظور ایجاد برنامه ی کاربردی جدید (‪ ،)app‬در فهرست گزینه ی اصلی (‪ )main menu‬روی گزینه ی ‪ File -> New Project...‬کلیک‬

‫کنید‪.‬‬

‫در لیست وسطی نیز گزینه ی ‪ Console Application‬را کلیک کنید‪.‬‬

‫اسم مورد نظر را به ‪ gdcs1‬تغییر دهید‪.‬‬

‫‪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‬قرار دهید‪،‬‬

‫سپس ‪ New Item‬را انتخاب کنید‪.‬‬

‫هریک از دستورهای مذکور‪ ،‬پنجره ی محاوره ‪ Add new item‬را نشان می دهد‪ .‬حال‪ ،‬در لیست میانی‪ ،‬روی گزینه ی ‪ Code File‬کلیک کنید‪.‬‬

‫می توانید اسم فایل مذکور را بپذیرید یا آن را مطابق میل تغییر دهید‪ .‬پس از کلیک روی گزینه ی ‪ ،ok‬پنجره ی سیاهی نمایان می گردد‪ .‬به‬

‫همین شیوه‪ ،‬می توانید هر تعداد فایل که مایلید به پروژه اضافه کنید‪.‬‬

‫ایجاد فایل‬

‫به منظور افزودن فایل جدید به کد مورد نظر‪ ،‬به فهرست گزینه ی اصلی (‪ )main menu‬مراجعه کرده و روی ‪Project -> Add New‬‬

‫‪ Item...‬کلیک کنید‪.‬‬

‫در صورت استفاده از ‪ ،visual studio‬باید آیتم های ‪( visual C#‬در لیست سمت چپ) را بزرگ نمایی کرده و روی ‪ code‬کلیک کنید‪.‬‬

‫اسم موردنظر را به ‪ CleaningOrder‬تغییر دهید‪.‬‬

‫‪45‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫اکنون‪ ،‬گزینه ی ‪ Add‬را انتخاب کنید‪.‬‬

‫کد اصلی ‪C#‬‬

‫به منظور ایجاد ساده ترین نوع برنامه ی کاربردی ‪ ،C#‬کافی است تنها یک کد پایه (‪ )basic‬بنویسید‪ .‬کد مذکور به این صورت است‪.‬‬

‫‪class Exercise‬‬
‫{‬
‫)‪static void Main(string[] args‬‬
‫{‬
‫;)"‪System.Console.WriteLine("Hello world‬‬
‫}‬
‫}‬

‫کد نام برده بخش های مختلفی دارد که در مباحث بعدی به هریک از آن ها مفصل پرداخته می شود‪.‬‬
‫کلید واژه ی ‪ class‬در درس ‪ 3‬معرفی می شود‪.‬‬

‫‪46‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫واژه ی ‪ Exercise‬تنها یک اسم است‪ .‬درباره ی اسم ها و تمام قوانین مربوط به آن در درس بعدی بحث می کنیم‪.‬‬

‫عالمت های ()‪ }{ ،‬در درس ‪ 1‬معرفی می شوند‪.‬‬

‫نحوه ی استفاده از کلیدواژه ی ‪ static‬در درس ‪ 82‬بحث می شود‪.‬‬

‫معنی کلیدواژه ی ‪ void‬در درس ‪ 3‬توضیح داده می شود‪.‬‬

‫‪ Main‬را در درس ‪ 4‬معرفی می کنیم و در درس ‪ 22‬مفصل توضیح می دهیم‪.‬‬

‫نقش واژه ی ‪ system‬در درس ‪ 1‬تشریح می شود‪.‬‬

‫نقش کاراکتر نقطه "‪ ".‬را درس ‪ 3‬تشریح می کنیم‪.‬‬

‫‪ Console‬و ‪ waterline‬در درس ‪ 2‬توضیح داده می شوند‪.‬‬

‫عالمت (") را در درس ‪ 1‬معرفی می کنیم و مفصل در درس ‪ 21‬تشریح می کنیم‪.‬‬

‫این کد را تا حد امکان ساده معرفی کرده ایم‪ .‬تک تک کلمات و عملگرها در این کد وظیفه ی خاصی را انجام می دهد ولی می توان آن ها را به‬

‫شیوه های مختلف به کاربرد‪.‬‬

‫نوشتن کد اصلی‬

‫کد زیر را در داکیومنت خالی بنویسید‪.‬‬

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

‫در (خطی از) متن‪ ،‬خط مورد نظر را با عالمت ‪ //‬آغاز کنید‪ .‬هر چه در سمت راست این عالمت قرار بگیرد‪ ،‬نادیده گرفته می شود‪ .‬به مثال زیر‬

‫توجه کنید‪.‬‬

‫‪// This line will be ignored. I can write in it anything I want‬‬

‫‪ 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‬فایل مورد نظر را به صورت زیر تغییر دهید‪.‬‬

‫‪// Application Name: Georgetown Dry Cleaning Services‬‬


‫‪class Order‬‬
‫{‬
‫‪// This application is used to perform processing orders for this business‬‬
‫)‪static void Main(string[] args‬‬
‫{‬
‫‪/* Always greet the customers before processing an order.‬‬
‫‪Check the types of clothes a customer has brought.‬‬
‫‪Find out the type of cleaning (starch، etc) the customer wants.‬‬
‫‪If there are special needs the customer has، make a note. */‬‬
‫;)"‪System.Console.WriteLine("Georgetown Dry Cleaning Services‬‬
‫;)(‪System.Console.ReadKey‬‬
‫}‬
‫}‬

‫‪48‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫مدیریت فایل ها‬

‫در برنامه های ‪ Microsoft Visual C# 2010 Express‬و ‪ ،Microsoft Visual Studio‬پروژه هایی که متشکل از چند فایل هستند‪ ،‬با‬

‫ورچسب های معینی (واقع در قسمت باالی ‪ )code editor‬نمایش داده می شوند‪.‬‬

‫فایل های نام برده در ‪ main menu‬ویندوز نیز قابل مشاهده است‪.‬‬

‫پنجره ‪Solution Explorer‬‬

‫‪ Solution explorer‬پنجره ای است که فهرستی از فایل های تشکیل دهنده ی پروژه را به نمایش می گذارد‪ .‬برای دسترسی به پنجره ی‬

‫مزبور چنانچه‪ 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‬را نمایش می دهد‪.‬‬

‫دکمه ی ‪ ،refresh‬فهرست منابع و فایل ها را باز سازی (‪ )refresh‬می کند‪.‬‬

‫دکمه ی ‪ ،view code‬برای نمایش کد یک کالس به کار می رود‪.‬‬

‫سومین بخش ‪ solution explorer‬بدنه ی اصلی آن است که در آن فایل ها‪ ،‬فولدرها و منابع تشکیل دهنده ی پروژه به نمایش گذاشته می‬

‫شود‪ .‬به منظور بزرگنمایی گره (‪ ،)node‬روی اسم آن دوبار کلیک کنید ( یا روی دکمه ی آن کلیک کنید)‪ .‬برای کوچک کردن گره‪ ،‬روی آن دوبار‬

‫کلیک کنید‪.‬‬
‫‪50‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫ریشه ی (‪ )root‬لیست‪ ،‬در واقع اسم ‪ solution‬است‪ .‬زیر ‪ ،root‬اسم پروژه ی جاری قرار دارد‪ .‬در صورتی که‪ solution ،‬دارای چند پروژه‬

‫باشد‪ ،‬اسم هر یک از پروژه ها زیر ‪ solution‬نمایش داده می شود‪ .‬درون پروژه ها ‪ :‬فایل ها‪ ،‬فولدرها و منابع وجود دارد‪ .‬اولین آیتم زیر اسم‬

‫پروژه ‪ References‬است‪ .‬پس از گره ‪( References‬ارجاعات)‪ ،‬با اسم کالس ها (ی تشکیل دهنده ی پروژه) مواجه می شویم‪.‬‬

‫چهارمین جز ‪ solution explorer‬تب (‪ )tab‬می باشد‪.‬‬

‫‪Properties Windows‬‬

‫پنجره ی ‪ ، properties‬تمام جزئیات فایل ها و منابع سیستم عامل ویندوز که در پروژه به کار برده شده را نمایش می دهد‪ .‬برای نمایش آن‬

‫چنانچه‪ ،‬پنجره ی ‪ Properties‬نمایان نباشد‪ ،‬به ‪ main menu‬مراجعه کرده سپس روی ‪ View -> Properties window‬کلیک کنید‪.‬‬

‫‪ Standard toolbar‬را باز کرده‪ ،‬گزینه ی ‪ Properties‬را انتخاب کنید‪.‬‬

‫حال‪ ،‬اگر پنجره ی ‪ ،Properties‬در صفحه ی نمایش قابل رویت است‪ ،‬روی تب آن کلیک کنید‪.‬‬

‫به منظور مشاهده ی ویژگی های سیستم عامل پروژه یا فایل موردنظر(در ‪ ،)solution explorer‬روی شی دلخواه کلیک کنید‪.‬‬

‫با کلیک روی ‪ ،solution‬پنجره ی ‪ Properties‬اسم و مسیر (مکان قرارگیری فایل) آن را نمایش می دهد‪ .‬چنانچه‪ ،‬گزینه ی ‪ project‬را انتخاب‬

‫کنید‪ ،‬پنجره ی ‪ Properties‬فایل های پروژه ی موردنظر را نشان می دهد‬

‫اگر روی فایل کلیک کنید‪ ،‬پنجره ی ‪ 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‬و اسم فایل موردنظر کلیک کنید‪.‬‬

‫در ‪ ،code editor‬روی برچسب حاوی اسم فایل کلیک کنید‪.‬‬

‫در ‪ ،solution explorer‬روی اسم فایل دو بار کلیک کنید‪.‬‬

‫در صورت استفاده از ‪ 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‬باز کنید‪ ،‬برنامه ی‬

‫‪ windows media player‬به کمک شما می آید و فایل را باز می کند‪.‬‬

‫مدیریت ‪ solution‬و پروژه‬

‫درباره ی نحوه ی ایجاد برنامه ی کاربردی کنسول (‪ )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... :‬‬

‫بازکردن پروژه‬

‫شیوه های مختلف بازکردن پروژه‪ ،‬در زیر فهرست شده‬

‫‪ Main menu ->File-> Open project‬‬

‫‪ Start -> Open project‬‬

‫‪ Ctrl + Shift + O‬‬

‫‪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‬بپردازید‪ .‬این کار یک فایل اجرایی‬

‫(‪ )executable‬خلق می کند‪.‬‬

‫زبان ‪ ،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‬اسم دیگری دارد ‪:‬‬

‫‪ csc.exe‬اسم ‪ compiler‬ای است که ما استفاده می کنیم‪.‬‬

‫به منظور نوشتن برنامه از طریق پنجره ی فرمان (‪ ،)command prompt‬از ‪ csc.exe compiler‬استفاده می کنیم‪ .‬پس از دانلود ‪NET .‬‬

‫‪ Framework‬از سایت رسمی مایکروسافت‪ ،‬باید آن را روی رایانه ی خود نصب کنید‪ .‬برنامه ی مورد نظر ما ‪ csc.exe‬است‪ .‬مسیر نصب این‬

‫برنامه به صورت پیش فرض ‪ C:\Windows\Microsoft.NET\Framework\v4.0.21006‬می باشد‪.‬‬

‫باید مسیر ‪ csc.exe‬را به مسیر ‪ Environment Variables‬اضافه کنید‪ .‬برای شروع‪،‬می توان از ابزاری همچون ‪ windows explorer‬کمک‬

‫گرفته و فولدر مورد نظر را در جایی که ‪ csc‬نصب شده نمایش دهید‪.‬‬

‫مسیر مورد نظر را از باالترین ‪ combo box‬انتخاب کرده و آن را در قسمت ‪ clipboard‬کپی کنید‪ .‬پنجره ی ‪ control panel‬را باز کرده و روی‬

‫آیکون ‪ system and security‬کلیک کنید‪.‬‬

‫‪60‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫حال‪ ،‬در قسمت ‪ ،system and security‬روی گزینه ی ‪ system‬کلیک کنید‪.‬‬

‫پس از نمایان شدن پنجره ی ‪ ،system‬گزینه ی ‪ change setting‬را انتخاب کنید‪ .‬اکنون‪ ،‬تب ‪ Advanced‬را باز کرده و روی‬

‫‪ Environment Variables‬کلیک کنید‪.‬‬

‫در بخش ‪ ،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‬اسم فایلی که ابتدای کار ایجاد کرده بودید به همراه پسوند آن را وارد کنید‪ .‬فرمول باال‬

‫به این شکل است‪csc /out:NameOfExecutate.exe Filename.cs :‬‬

‫‪ NameOfExecutate‬نشانگر اسم دلخواه ‪ executable‬شما می باشد‪.‬چنانچه اسم مورد نظر تنها یک کلمه است‪ ،‬می توانید به راحتی آن را‬

‫تایپ کنید‪ .‬ولی اگر اسم متشکل از چند کلمه است‪ ،‬باید آن را داخل عالمت " قرار دهید‪.‬‬

‫اگر برای تولید برنامه ی مورد نظر از ‪ text editor‬استفاده می کنید و تعداد فایل هایی که ایجاد کرده اید زیاد است‪ ،‬باید هنگام انجام فرایند‬

‫ترجمه (‪ ،)compiling‬به تک تک فایل ها ارجاع دهید (‪ .)reference‬برای این منظور‪ ،‬الزم است که اسم هر فایل را به همراه پسوند مربوطه‬

‫ی آن به بخش پایانی اضافه کنید ‪cscFileName1.cs FileName2.cs FileName_n.cs:‬‬

‫‪63‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫اجرای پروژه‬

‫پس از ساختن پروژه‪ ،‬شما و کاربرانتان می توانید آن را اجرا کنید‪ .‬به منظور اجرای پروژه‪( ،‬از طریق ‪ ،)command prompt‬اسم فایل را به‬

‫همراه پسوند ‪ exe.‬با ‪ Enter‬وارد کنید‪.‬‬

‫در صورتی که با ‪ visual studio‬کار می کنید‪ ،‬برای اجرای برنامه ‪ ،‬به ‪ main menu‬مراجعه کرده و روی گزینه های ‪Debug -> Start‬‬

‫‪ Debugging‬کلیک کنید‪.‬‬

‫اجرای برنامه‬

‫به منظور اجرای برنامه‪ main menu ،‬را باز کرده و گزینه ی ‪ Debug -> Start Debugging‬را انتخاب کنید‪.‬‬

‫پس از مشاهده ی نتیجه در پنجره ی ‪ ،DOS‬با زدن دکمه ی ‪ Enter‬آن را ببندید‪.‬‬

‫برنامه ی ‪ visual studio‬را نیز ببندید‪.‬‬

‫در پاسخ به در خواست ‪ :‬آیا مایلید ‪ save‬کنید‪ No ،‬را بزنید‪.‬‬

‫متغییرها (‪)Variables‬‬

‫‪64‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫مبنع ذخیره سازی‬

‫کامپیوتر یک وسیله ی الکترونیکی است که به حل مشکل خاصی می پردازد یا وظیفه ی مشخصی را انجام می دهد‪ .‬برای مثال‪ ،‬یک دستگاه‬

‫تناسب اندام به شخص کمک می کند‪ ،‬هیکل خود را رو فرم نگه دارد یا یک دوربین دیجیتال از چیزهای مختلف عکس می گیرد‪.‬‬

‫وسایل الکترونیکی به منظور حل مسائل عمومی نیز به کار می روند‪ .‬برای مثال‪ ،‬از رایانه ی شخصی برای انجام کارهای عمومی مثل محاسبات‪،‬‬

‫پردازش کلمه‪ ،‬یا ذخیره سازی بانک های اطالعاتی استفاده می شود‪.‬‬

‫برای انجام وظایف مختلف‪ ،‬کامپیوتر باید مقدارهای (‪ )value‬مشخصی دریافت کند‪ .‬این کار ممکن است توسط شخصی صورت بگیرد که دستوری‬

‫را از صفحه کلید تایپ می کند (به عنوان مثال از دستگاه تناسب اندام‪ ،‬تلفن همراه‪ ،‬یا کامپیوتر شخصی)‪ .‬در برخی از موارد‪ ،‬مقادیر موردنظر‬

‫(از داخل) الکترونیکی و از منابع مختلف به کامپیوتر داده شود‪.‬‬

‫به منظور مدیریت این ارتباطات‪ ،‬کامپیوتر از صفحه ی تختی به نام ‪ motherboard‬استفاده می کند‪ .‬خیلی از بخش های کامپیوتر به این تخته‬

‫ی اصلی متصل هستند و از آن دستور دریافت می کنند‪ .‬بخش دیگری وجود دارد که وظیفه ی اصلی آن پردازش و انجام محاسبات است که به‬

‫آن پردازش گر می گویند و به تخته ی اصلی (‪ )motherboard‬وصل می باشد‪.‬‬

‫حال‪ ،‬مقادیری که کامپیوتر دریافت می کند باید در قسمتی به نام ‪ mem‬یا ‪ y‬یا حافظه ذخیره شود‪ .‬رایانه از دو نوع حافظه برای این منظور‬

‫استفاده می کند‪ .‬حافظه ی موقت و حافظه ی پایدار‪ .‬از حافظه ی موقت برای ذخیره کردن اطالعاتی استفاده می شود که حالت موقتی داشته و‬

‫پس از گذشت زمان مشخصی پاک می شوند‪ .‬برای مثال‪ ،‬حافظه ی نام برده اطالعات را هنگامی که رایانه روشن است در خود حفظ می کند و آن‬

‫را تا زمانی که کامپیوتر روشن است نگه می دارد ولی به محض خاموش شدن رایانه اطالعات مزبور پاک می شوند‪.‬‬

‫حافظه ای که اطالعات و مقادیر به صورت موقت در آن ذخیره می شود ‪ random access mem‬یا ‪ y‬یا ‪ RAM‬نامیده می شود‪.‬‬

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

‫توجه داشته باشید که حافظه بزرگ تر است یک کیک است و از میلیون ها جای خالی تشکیل شده‪.‬برنامه نویس مدام به ‪ compiler‬دستور می‬

‫دهد که مقادیر را به صورت موقتی در ‪ RAM‬ذخیره کند‪ .‬اگرچه اندازه ی حافظه ی موقت چندان بزرگ نیست‪ ،‬باید به خاطر داشته باشید جای‬

‫زیادی برای ذخیره ی اطالعات الزم دارد‪ .‬در واقع‪ ،‬این تنها برنامه ی شما نیست که از ‪ RAM‬استفاده می کند‪ .‬برای مثال‪ ،‬هنگامی که رایانه ی‬

‫خود را راه اندازی می کنید‪ ،‬سیستم عامل (‪ )windows‬و دیگر برنامه ها ی آن ‪ RAM‬را اشغال می کنند‪.‬‬

‫هنگامی که برنامه ای را اجرا می کنید‪ compiler ،‬بخشی از ‪ RAM‬را به آن برنامه اختصاص می دهد‪.‬‬
‫‪65‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫به این خاطر که برنامه های زیادی از ‪ RAM‬استفاده می کنند‪ ،‬به منظور ذخیره سازی مقادیر در آن‪ ،‬باید اطالعاتی در اختیار آن قرار دهید‪ .‬باید‬

‫مقدار حافظه ای را که به آن نیاز دارید مشخص کرده و اسم معینی برای آن قسمت خاص از حافظه که ‪ value‬ها در آن ذخیره می شود انتخاب‬

‫کنید‪ .‬به ترکیبی از این اطالعات متغییر (‪ )variable‬گفته می شود‪.‬‬

‫معرفی متغییرها‬

‫‪Microsoft‬‬ ‫‪Visual‬‬ ‫‪Studio‬‬ ‫‪2010‬‬ ‫یا‬ ‫‪Microsoft‬‬ ‫‪Visual‬‬ ‫‪C#‬‬ ‫‪2010‬‬ ‫‪Express‬‬ ‫ی‬ ‫‪ .8‬برنامه‬

‫را اجرا کنید‪.‬‬

‫‪ .2‬به منظور ایجاد برنامه ی کاربردی (‪ )app‬جدید‪ ،‬در ‪ Start Page‬روی گزینه ی ‪ New Project‬کلیک کنید‪.‬‬

‫‪ .1‬در فهرست میانی‪ ،‬گزینه ی ‪ Empty Project‬را انتخاب کنید‪.‬‬

‫‪ .4‬اسم موردنظر را به ‪ )ge( gdcs2‬یا ‪ ge town cleaning services‬تغییر دهید‪.‬‬

‫‪ .5‬روی ‪ ok‬کلیک کنید‪.‬‬

‫‪ .6‬به نظور ایجاد فایل ویژه ی کد مورد نظر‪ ،‬به ‪ main menu‬مراجعه کرده و ‪ project‬را انتخاب کنید‪.‬‬

‫‪ .4‬از لیست میانی ‪ code file‬را انتخاب کنید‪.‬‬

‫‪ .1‬اسم نام برده را به ‪ cleaning‬یا ‪ der‬تغییر دهید‪.‬‬

‫‪ .1‬روی گزینه ی ‪ Add‬کلیک کنید‪.‬‬

‫‪.82‬در داکیومنت خالی دستورات زیر را تایپ کنید‪.‬‬

‫‪class Order‬‬
‫{‬
‫)‪static void Main(string[] args‬‬
‫{‬
‫;)"‪System.Console.WriteLine("Georgetown Dry Cleaning Services‬‬
‫;)(‪System.Console.ReadKey‬‬
‫}‬
‫}‬

‫‪66‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫نام گذاری متغییر ها‬

‫ کلماتی وجود دارند که از آن ها نباید‬.‫متغییرها باید نام مشخصی داشته باشند و برای ایجاد نام برای آن ها باید از قوانین خاصی پیروی کرد‬

‫ این کلیدواژه ها در زیر فهرست‬.‫تحت هیچ شرایطی به عنوان نام متغییر استفاده کرد زیرا خود برنامه کلیدواژهای مزبور را به کار می برد‬

.‫شده‬

abstract continue finally interface out (generic) short typeof

as decimal fixed internal out sizeof uint

(methods)

base default float is override stackalloc ulong

bool delegate for lock params static unchecked

break do foreach long private string unsafe

byte double goto namespace protected struct ushort

case else if new public switch using

(generic)

catch enum implicit new (LINQ) readonly this virtual

char event in new ref throw void

(foreach) (variable)

checked explicit in null return true volatile

(generic)

class extern int object sbyte try while

const false operator sealed

‫ به این خاطر که‬.‫ استفاده از آن ها به شما توصیه نمی شود‬،‫ نیستند‬C# ‫واژه های دیگری هستند که با وجود این که جز کلیدواژه های برنامه ی‬

contextual ( ‫ از واژه های داده شده به عنوان کلیدواژه های متنی‬.‫) در کد شود‬conflict( ‫به کار بردن آن ها ممکن است منجر به بروز اختالل‬

.‫) یاد می شود‬ds ‫ یا‬keyw


67
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫‪add‬‬ ‫‪global‬‬ ‫‪let‬‬ ‫)‪partial (type‬‬ ‫‪set‬‬ ‫‪where‬‬

‫)‪(generic‬‬

‫‪dynamic‬‬ ‫‪group‬‬ ‫‪orderby‬‬ ‫‪remove‬‬ ‫‪value‬‬ ‫)‪where (query‬‬

‫‪from‬‬ ‫‪into‬‬ ‫)‪partial (method‬‬ ‫‪select‬‬ ‫‪var‬‬ ‫‪yield‬‬

‫‪get‬‬ ‫‪join‬‬

‫همان طور که پیش تر ذکر شد‪ ،‬اسم گذاری برای هر چیزی در برنامه نویسی قوانین خاص خود را دارد‪.‬قوانین استانداردی هست که توسط ‪C#‬‬

‫تعریف می شوند ولی شما می توانید قوانینی را بر مبنای سلیقه ی خود نیز به وجود بیاورید‪ .‬قوانینی که برای تعیین اسم متغییر باید پیروی‬

‫کنید به شرح زیر می باشد‪.‬‬

‫نام متغییر می تواند تنها از یک حرف تشکیل شود(‪، 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،Y‬یا‪ .) z‬این حروف متعلق به الفبای انگلیسی آمریکایی می‬

‫باشد‪ ،‬ولی زبان ‪ C#‬انگلیسی بین المللی را نیز می پذیرد‪.‬‬

‫در ‪ ،C#‬نام ممکن است از تنها یک عالمت ( _ ) ساخته شود‪ .‬با این وجود‪ ،‬توصیه می شود از این کار خودداری کنید زیرا خواندن کدی‬

‫که از تنها یک _ تشکیل شده آسان نیست‪.‬‬

‫از به کار بردن این عالمت ها در نام متغییر خودداری کنید‪}، {، ;، ]، [، >، <، @، \، #، +، )، (، *، &، ?، %، $، /، "، !،| .‬‬

‫در صورتی که نامی متشکل از بیش ازیک کاراکتر باشد‪ ،‬باید با حرف یا _ شروع شود‪.‬‬

‫پس از آغاز کاراکتر با _ یا حرف‪ ،‬نام می تواند از ترکیبی از حروف‪ ،‬ارقام (‪ ،1 ،4 ،2 ،3 ،1 ،1 ،2 ،8 ،2‬یا‪ ،) 9‬و ‪ /‬یا _ تشکیل شود‪.‬‬

‫در نام نمی توان از فاصله (‪ )space‬استفاده کرد‪.‬‬

‫عالوه بر قوانین باال‪ ،‬برنامه نویس می تواند قوانین خود را تعریف کند‪ .‬ولی در تعریف همین قوانین باید محدودیت های ذکر شده در نظر‬

‫گرفته شود‪.‬‬

‫اگر نامی در تنها یک کلمه خالصه شود‪ ،‬اکثر برنامه نویسان از حروف کوچک استفاده می کنند‪.‬‬

‫‪68‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫زمانی که نام متغییر متشکل از چند کلمه است‪ ،‬بیشتر برنامه نویسان از ‪ camel notation‬استفاده می کنند که در آن اولین کلمه با‬

‫حروف کوچک نوشته می شود و اولین حرف کلمات بعدی همگی با حروف بزرگ نوشته می شوند‪.‬‬

‫زبان ‪ C#‬به کوچک بزرگی حروف حساس است‪ ،‬یعنی کلمات ‪ Case ،case‬و ‪ CASE‬با هم کامل متفاوت اند‪ .‬برای مثال‪ main ،‬همیشه‬

‫‪ Main‬نوشته می شود‪.‬‬

‫مقدارها و متغییرها در کنسول‬

‫برنامه های زبان ‪ C#‬نتایج خود را در پنجره ی ‪ DOS‬به نمایش می گذارند‪ .‬به مثال زیر توجه کنید‪.‬‬

‫)(‪System.Console.Write‬‬ ‫پرانتز‬ ‫داخل‬ ‫را‬ ‫آن‬ ‫توانید‬ ‫می‬ ‫فوق‪،‬‬ ‫ی‬ ‫پنجره‬ ‫در‬ ‫معینی‬ ‫مقدار‬ ‫دادن‬ ‫نشان‬ ‫برای‬

‫یا )(‪ System.Console.WriteLine‬قرار دهید‪ .‬مانند دو نمونه ی زیر‬

‫‪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‬یک شئ تهی است که می تواند خالی یا پر باشد‪.‬‬

‫هنگامی که آن شی خالی است‪ bit ،‬مقدار ‪ 2‬را نشان می دهد و زمانی که پر است‪ ،‬مقدار ‪.8‬‬

‫تعریف متغییر‬

‫با به کاربردن ترکیبی از ‪ bit‬ها‪ ،‬به ‪ compiler‬پیغام می دهید که به متغییر نیاز دارید‪ .‬از چنین فرایندی به عنوان (‪)declaring a variable‬‬

‫تعریف متغییر یاد می شود‪ .‬همان طور که قبل توضیح داده شد‪ ،‬مقدار حافظه ای که به آن نیاز دارید ‪ data type‬گفته می شود‪ .‬بنابراین‪،‬‬

‫‪71‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫هنگام تعریف متغییرباید نوع داده ی (‪ )data type‬دلخواه را مشخص کنید‪ .‬در ‪ ،C#‬نوع داده (‪ )data type‬با یک کلیدواژه نمایش داده می‬

‫شود‪.‬‬

‫برای تعریف متغییر دو راه پیش رو دارید‪.‬‬

‫‪ ‬اگر نوع مقداری که مایلید در حافظه ذخیره شود را می دانید‪ ،‬از فرمول زیر پیروی کنید‪.‬‬

‫;‪DataTypeVariableName‬‬

‫‪ ‬اگر نمی خواهید نوع مقدار را مشخص کنید‪ ،‬گزینه های دیگری برای شما فراهم است‪.‬‬

‫می توانید از کلید واژه ی ‪ var‬استفاده کنید‪.‬‬

‫می توانید کلید واژه ی ‪ object‬را به کار ببرید‪.‬‬

‫می توان از کلیدواژه ی ‪ dynamic‬نیز استفاده کرد‪.‬‬

‫مقدار دهی اولیه ی متغییر‬

‫همان طور که از اسم آن پیدا است‪ ،‬مقدار دهی اولیه عبارتند از ذخیره سازی مقدار اولیه در جای (مشخص آن‪( .‬بیش تعریف شده به منظور‬

‫اختصاص دادن متغییر‪.‬‬

‫نوع داده‪ ،‬به دنبال آن اسم متغییر‪ ،‬عالمت =‪ ،‬مقدار دلخواه ولی مناسب را تایپ کنید‪.‬‬

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

‫‪VariableName = DesiredValue; // Error‬‬


‫}‬
‫}‬

‫دو گزینه ی پیش روی دیگر نیز‪ ،‬استفاده از کلیدواژه های ‪ object‬یا ‪ dynamic‬می باشد‪.‬‬

‫پس از تعریف و مقدار دهی اولیه ی متغییر‪ compiler ،‬مقدار آن متغییر را حافظه ای که برای آن اختصاص یافته ذخیره می شود‪ .‬حال‪ ،‬می توان‬

‫به آن مقدار دسترسی پیدا کرد و در صورت نیاز آن را تغییر داد‪.‬‬

‫مقدار تهی (‪)null value‬‬

‫می توان با اضافه کردن عالمت سوال (؟) به نوع داده (‪ )data type‬متغیر موردنظر‪ ،‬متغیر را طوری تعریف کنید که مقدار تهی (‪)null value‬‬

‫داشته باشد‪ .‬برای این منظور زبان ‪ C#‬کلیدواژه ی ‪ null‬را در اختیار شما قرار می دهد‪.‬‬

‫می توان هنگام تعریف متغیر‪ ،‬مقدار ‪ 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‬‬

‫اگرچه یک ‪ bit‬قابل دسترس و استفاده است‪ ،‬باید به خاطر داشت که نمی توان در آن مقدار ذخیره کرد به این معنا که نمی توان از ‪compiler‬‬

‫خواست که مقدار ‪ 8‬را در یک ‪ bit‬ذخیره کند‪ .‬این امر به این خاطر است که‪ ،‬حتی کوچکترین مقدار ‪ C#‬نیز به بیش از یک ‪ bit‬برای ذخیره شدن‬

‫نیاز دارد‪ .‬ترکیبی کوچکتر از چهار ‪ bit‬وجود ندارد (در برخی زبان ها یا پیاده سازی زبان ‪ assembly‬به ترکیب چهار ‪ nibble ،bit‬گفته می‬

‫شود)‪.‬‬

‫با ایجاد ترکیبات چهارتایی از پر (‪ )8‬و تهی (‪ ،)2‬همگی ‪ 82‬ترکیب به دست می آید‪.‬‬

‫در این ترکیبات چهارتایی‪ bit ،‬ها ‪ 2 ،8 ،2‬و ‪ 1‬شمرده می شوند‪ bit .‬ای که در راست ترین کناره یا موقعیت قرار دارد (‪ bit ،)2‬رده پایین خوانده‬

‫می شود (‪.)LOBIT‬‬

‫آخرین ‪ 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‬‬

‫‪Decimal‬‬ ‫‪Binary‬‬ ‫‪Hexadecimal‬‬

‫‪0‬‬ ‫‪0000‬‬ ‫‪0x0‬‬

‫‪1‬‬ ‫‪0001‬‬ ‫‪0x1‬‬

‫‪2‬‬ ‫‪0010‬‬ ‫‪0x2‬‬

‫‪3‬‬ ‫‪0011‬‬ ‫‪0x3‬‬

‫‪4‬‬ ‫‪0100‬‬ ‫‪0x4‬‬

‫‪5‬‬ ‫‪0101‬‬ ‫‪0x5‬‬

‫‪6‬‬ ‫‪0110‬‬ ‫‪0x6‬‬

‫‪7‬‬ ‫‪0111‬‬ ‫‪0x7‬‬

‫‪8‬‬ ‫‪1000‬‬ ‫‪0x8‬‬

‫‪9‬‬ ‫‪1001‬‬ ‫‪0x9‬‬

‫‪10‬‬ ‫‪1010‬‬ ‫‪0xA‬‬

‫‪11‬‬ ‫‪1011‬‬ ‫‪0xB‬‬

‫‪12‬‬ ‫‪1100‬‬ ‫‪0xC‬‬

‫‪13‬‬ ‫‪1101‬‬ ‫‪0xD‬‬

‫‪75‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪14‬‬ ‫‪1110‬‬ ‫‪0xE‬‬

‫‪15‬‬ ‫‪1111‬‬ ‫‪0xF‬‬

‫جدول تبدیل عددی‬

‫حداقل و حداکثر مقدارها در ترکیب چهار ‪ bit‬ای به این صورت است‪.‬‬

‫‪Decimal Hexadecimal‬‬ ‫‪Binary‬‬

‫‪Minimum‬‬ ‫‪0‬‬ ‫‪0x0‬‬ ‫‪0000‬‬

‫‪Maximum‬‬ ‫‪15‬‬ ‫‪0xf‬‬ ‫‪1111‬‬

‫البته‪ ،‬باید در نظر داشته باشید که با ترکیبات چهارتایی هیچ کاری نمی توان کرد‪ .‬زیرا ترکیبات بیان شده بسیار کوچک هستند و گنجایش‬

‫ذخیره هیچ چیز را ندارد‪ .‬به دو دلیل درباره ی آن بحث کردیم ‪ :‬اول اینکه‪ ،‬باید بدانید که عدد ‪ 82‬از کجا سر رشته می گیرد‪ .‬دوم اینکه‪ ،‬پیش‬

‫زمینه ی معرفی ‪ byte‬را فراهم آورد‪.‬‬

‫ترکیبی از ‪ 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‬‬

‫‪ )7 ،2 ،3‬برده‪ ،‬سپس عدد را اضافه می کنیم به این صورت‬

‫‪27 + 26 + 25 + 24 + 23 + 22 + 21 + 20‬‬

‫‪= 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1‬‬

‫‪= 255‬‬

‫بنابراین‪ 233 ،‬ترکیب احتمالی ‪ bit 1‬ای داریم‪ .‬ترکیبات باال را می توان با فرمت ‪ hexadecimal‬نیز حساب کرد ‪، 0xA،...،0x2،x12 :‬‬

‫‪up to 0xFFFF،...، 0xC8،...،0xA1‬‬

‫محاسبات در سه سیستم عددی مختلف‬

‫‪Decimal‬‬ ‫‪Hexadecimal‬‬ ‫‪Binary‬‬

‫‪77‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪Minimum‬‬ ‫‪0‬‬ ‫‪0x0‬‬ ‫‪0000‬‬

‫‪Maximum‬‬ ‫‪255‬‬ ‫‪0xff‬‬ ‫‪1111 1111‬‬

‫حداقل مقدار حافظه اختصاص داده شده (توسط ‪ )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‬را پشتیبانی می کنند‪.‬‬

‫نتیجه ی زیر به دست می آید‪.‬‬

‫‪Student Gender: M‬‬


‫‪Escape Sequence‬‬

‫‪ Escape sequence‬کاراکتری ویژه است که در صفحه نمایش قابل رویت نمی باشد‪ .‬برای نمونه می توان از این کاراکتر برای شروع نوشتن‬

‫دستور در خط بعدی استفاده کرد (به برنامه فهماند که این خط به اتمام رسیده و خط دیگری باید شروع شود)‪ .‬کاراکتر مزبور با این عالمت ‪/‬‬

‫‪80‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫نشان داده می شود که به دنبال آن ممکن است یک کاراکتر یا نشانه ی دیگر قرار گیرد‪ .‬برای مثال‪ escape sequence ،‬ای که در خط بعدی‬

‫قرار می گیرد به این صورت نمایش داده می شود ‪\n :‬‬

‫کاراکتر ‪ escape sequence‬ممکن است داخل ' ' قرار داده شود ‪ .'\n' :‬هم چنین این کاراکتر را می توان داخل " ‪ ".‬قرار داد ‪"\n". :‬‬

‫نکته‬

‫تمام زبان هایی که مبنای آن ‪ C‬هست‪ ،‬این کاراکتر ها را پشتیبانی می کنند‪.‬‬

‫‪Escape Sequence‬‬ ‫‪Name‬‬ ‫‪Description‬‬

‫‪\a‬‬ ‫)‪Bell (alert‬‬ ‫صدایی از کامپیوتر پخش می کند‬

‫‪\b‬‬ ‫‪Backspace‬‬ ‫نشان گر موس را به عقب می برد‬

‫‪\t‬‬ ‫‪Horizontal Tab‬‬ ‫نشان گر موس را به صورت افقی به حرکت در می آورد‬

‫‪\n‬‬ ‫‪New line‬‬ ‫نشان گر موس را به آغاز خط بعدی می برد‬

‫‪\v‬‬ ‫‪Vertical Tab‬‬ ‫جدول بندی عمودی ایجاد می کند‬

‫‪\f‬‬ ‫‪Form feed‬‬

‫‪\r‬‬ ‫‪Carriage return‬‬ ‫فرایند بازگشت به ابتدای خط را فراهم می سازد‬

‫"\‬ ‫‪Double Quote‬‬ ‫)"( عالمت نقل و قول را نمایش می دهد‬

‫'\‬ ‫‪Apostrophe‬‬ ‫)'( عالمت آپستروف را نمایش می دهد‬

‫?\‬ ‫‪Question mark‬‬ ‫عالمت سوال را نشان می دهد‬

‫\\‬ ‫‪Backslash‬‬ ‫را نشان می دهد )\( عالمت‬

‫`‬ ‫‪Null‬‬ ‫کاراکتر تهی را نمایش می دهد‬

‫‪81‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫برای استفاده از ‪ ،Escape sequence‬همچنین می توان یک متغیر ‪ char‬معرفی کرده‪ ،‬آن را با کاراکتر ‪ escape sequence‬دلخواه‬

‫مقداردهی اولیه کرد‪ ،‬سپس داخل ' ' قرار داد‪.‬‬

‫نوع داده ی ‪Byte‬‬

‫یک ‪ 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…

Byte ‫استفاده کردن از‬

.‫ را به این صورت تغییر دهید‬Program.cs ‫فایل‬

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 ‫به منظور اجرای برنامه به‬

.‫می آید‬

-/- Georgetown Cleaning Services -/-


========================
Item Type Qty
------------------------
Shirts 4
Pants 1
========================
.‫ را فشار دهید‬Enter ‫ دکمه ی‬DOS ‫ برای بستن پنجره ی‬،‫حال‬

‫ عالمت دار‬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);
}
}
.‫که نتیجه ی زیر از آن به دست می آید‬

the room temperature was -88،When we entered


84
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫واژه (‪)Word‬‬

‫یک واژه متشکل از ‪ bit 82‬متوالی است‪ bit .‬ها از راست به چپ شمرده می شوند (از ‪.)2‬‬

‫راست ترین ‪ bit‬یک واژه ‪ 2‬می باشد که به آن کم اهمیت ترین ‪ bit‬یا ‪ bit‬سطح پایین و یا ‪ LOBIT‬می گویند‪ .‬چپ ترین ‪ ،83 ،bit‬مهم ترین ‪bit‬‬

‫یا ‪ bit‬سطح باال و یا ‪ HIBIT‬خوانده می شود‪ bit .‬های دیگر بسته به موقعیتی که در آن قرار گرفته اند تعریف می شوند ‪ 1 ،2 ،8 :‬و غیره‪.‬‬

‫نظر به این که یک واژه از دو ‪ byte‬تشکیل شده‪ ،‬گروه ‪ 8 bit‬سمت راست همان ‪ LOBYTE‬خوانده می شود و دیگر گروه ‪ 8 bit‬ای که در سمت‬

‫چپ قرار می گیرد ‪ HIBYTE‬نام دارد‪.‬‬

‫نمایش یک واژه با فرمت (قالب) دودویی (‪ )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‬‬

‫‪ bit‬ای را با ‪ f‬یا ‪ F‬جایگزین کنید‪.‬‬

‫‪1111‬‬ ‫‪1111 1111 1111‬‬

‫‪f‬‬ ‫‪f‬‬ ‫‪f‬‬ ‫‪f‬‬

‫‪= 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‬‬
‫نتیجه ی زیر حاصل می گردد‪.‬‬

‫‪School Effective: 1400‬‬


‫…‪Press any key to continue‬‬

‫(به این خاطر که ‪ 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‬‬
‫}‬
‫}‬

‫نتیجه ی زیر به دست می آید‪.‬‬

‫‪Number of Pages of the book: 842‬‬


‫‪Temperature to reach during the experiment: -1544 degrees‬‬

‫(به دلیل این که ‪ 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();
}
}

.‫نتیجه ی زیر به دست می آید‬

This music album contains 16 tracks


Music Category: 2
‫ های بدون عالمت‬short integer ‫به کاربردن‬

.‫ فایل را به صورت زیر تغییر دهید‬،‫ ها‬short integer ‫برای به کاربردن‬

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‬کلیک کنید‪ .‬نتیجه ی زیر حاصل می گردد‪.‬‬

‫‪-/- Georgetown Cleaning Services -/-‬‬


‫========================‬
‫‪Order Date: 7/15/2002‬‬
‫‪------------------------‬‬
‫‪Item Type Qty‬‬
‫‪------------------------‬‬
‫‪Shirts‬‬ ‫‪4‬‬
‫‪Pants‬‬ ‫‪1‬‬
‫‪Other Items 3‬‬
‫========================‬
‫کلید ‪ Enter‬را بزنید تا پنجره ی ‪ DOS‬بسته شود‪.‬‬

‫حال‪ ،‬محیط برنامه نویسی را نیز ببندید‪.‬‬

‫هنگامی که از شما پرسیده شد‪ ،‬می خواهید ‪ 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‬داد‪.‬‬

‫‪2n-1‬‬ ‫‪230‬‬ ‫‪229‬‬ ‫‪228‬‬ ‫‪227‬‬ ‫‪226‬‬ ‫‪225‬‬ ‫‪224‬‬

‫‪etc‬‬ ‫‪74،073،1‬‬ ‫‪9،870،536‬‬ ‫‪4،435،268‬‬ ‫‪7،217،134‬‬ ‫‪8،108،67‬‬ ‫‪4،554،33‬‬ ‫‪2،777،16‬‬

‫‪824،1‬‬ ‫‪12‬‬ ‫‪56‬‬ ‫‪28‬‬ ‫‪64‬‬ ‫‪32‬‬ ‫‪16‬‬

‫‪223‬‬ ‫‪222‬‬ ‫‪221‬‬ ‫‪220‬‬ ‫‪219‬‬ ‫‪218‬‬ ‫‪217‬‬ ‫‪216‬‬

‫‪608،388،8 304،194،4 152،097،2 576،048،1 288،524 144،262 072،131‬‬ ‫‪536،65‬‬

‫‪215‬‬ ‫‪214‬‬ ‫‪213‬‬ ‫‪212‬‬ ‫‪211‬‬ ‫‪210‬‬ ‫‪29‬‬ ‫‪28‬‬

‫‪768،32‬‬ ‫‪384،16‬‬ ‫‪192،8‬‬ ‫‪096،4‬‬ ‫‪048،2‬‬ ‫‪024،1‬‬ ‫‪512‬‬ ‫‪256‬‬

‫‪27‬‬ ‫‪26‬‬ ‫‪25‬‬ ‫‪24‬‬ ‫‪23‬‬ ‫‪22‬‬ ‫‪21‬‬ ‫‪20‬‬

‫‪128‬‬ ‫‪64‬‬ ‫‪32‬‬ ‫‪16‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪2‬‬ ‫‪1‬‬

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

‫‪+ 1*22 + 1*21 + 1*20‬‬

‫‪432 + ،554،864 + 33،108،728 + 67،217،456 + 134،435،912 + 268،870،824 + 536،741،073،648 + 1،483،147،= 2‬‬

‫‪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‬جایگزین کرد‪.‬‬

‫‪1111‬‬ ‫‪1111 1111 1111 1111 1111 1111 1111‬‬

‫‪f‬‬ ‫‪f‬‬ ‫‪f‬‬ ‫‪f‬‬ ‫‪f‬‬ ‫‪f‬‬ ‫‪f‬‬ ‫‪f‬‬

‫‪= 0xffffffff = 0xFFFFFFFF‬‬

‫به منظور تعریف متغییری که قادر است مقادیر بزرگ را در خود جای دهد‪ ،‬می توان از کلیدواژه ی ‪ 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‬‬
‫}‬
‫نتیجه ی زیر به دست می آید‪.‬‬

‫‪Country Population: 72394475‬‬


‫…‪Press any key to continue‬‬

‫به کار بردن ‪ integer‬های بدون عالمت‬

‫ابتدا‪ ،‬برنامه ی ‪ Microsoft Visual Studio‬را اجرا کنید‪.‬‬

‫برای ایجاد برنامه ی کاربردی جدید (‪ ،)application‬به ‪ main menu‬مراجعه کرده و روی گزینه ی ‪ File -> New Project...‬کلیک کنید‪.‬‬

‫گزینه ی ‪ Empty Project‬را از لیست میانی انتخاب کنید‪.‬‬

‫اسم مورد نظر را به ‪ gdcs3‬تغییر داده‪ ،‬سپس ‪ ok‬را کلیک کنید‪.‬‬

‫به منظور ایجاد فایل برای کد مورد نظر‪ ،‬فهرست گزینه ی اصلی (‪ )main menu‬را باز کرده و روی ‪ Project -> Add New Item...‬کلیک‬

‫کنید‪.‬‬

‫در لیست میانی گزینه ای است به نام ‪ ،Code File‬آن را کلیک کنید‪.‬‬

‫اسم را به ‪ CleaningOrder‬تغییر دهید‪.‬‬

‫گزینه ی ‪ Add‬را انتخاب کنید‪.‬‬

‫در داکیومنت خالی که در اختیار شما قرار می گیرد‪ ،‬دستورات زیر را تایپ کنید‪.‬‬

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

‫‪ .82‬برنامه را اجرا کرده تا نتایج آن را مشاهده کنید‪.‬‬

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

‫ های بدون عالمت‬Integer

‫ استفاده کرد (این کلیدواژه نشانگر‬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();
}
}

.‫نتیجه ی زیر حاصل می گردد‬

Red Oak High School


Student Date of Birth: 11/8/1996

‫ های بدون عالمت‬integer ‫به کابردن‬

.‫ فایل را به این ترتیب تغییر دهید‬،‫به منظور استفاده از متغیرهای بدون عالمت‬

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

-/- Georgetown Cleaning Services -/-


========================
Order Date: 7/15/2002
------------------------
Item Type Qty
------------------------
Shirts 4
Pants 0
Other Items 3
========================
.‫ را ببندید‬DOS ‫ پنجره ی‬.1

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‬حافظه نیاز داشته باشد)‪ ،‬باید از کلید واژه های‬

‫‪ long‬و ‪ var‬استفاده کرد‪.‬‬

‫همان طور که پیش تر نیز گفته شد‪ ،‬چنانچه متغیری را با ‪ 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‬‬

‫‪ 807 ،775 ،854‬بزرگ تر بود‪ compiler ،‬پیغام خطا صادر می کند‪.‬‬

‫به عبارت دیگر‪ ،‬باید مقدارهایی که به متغیر های انتگرال (‪ )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‬‬
‫}‬
‫}‬
‫نتیجه ی زیر به دست می آید‪.‬‬

‫‪Country Area: 5638648km2‬‬


‫‪Press any key to continue...‬‬
‫می توان متغیر ‪ long‬را با ‪ value‬مبنای ‪ )hexadecimal( 82‬مقدار دهی اولیه کرد‪.‬‬
‫‪98‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫نوع داده ی ‪ ، long‬همچنین میزان حافظه یا فضای دردسترس را نشان می دهد‪ ،‬ولی این امر بدین معنا نیست که باید حتماً از تمام فضا‬

‫استفاده کرد‪ .‬برای مثال‪ ،‬می توان از کلیدواژه ی ‪ 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‬جای می گیرند‪.‬‬

‫‪Unsigned long integers‬‬

‫می توان برای ذخیره سازی ‪ integer‬های مثبت و منفی از ترکیب ‪ 64 bit‬ای استفاده کرد‪ .‬در برخی موارد‪ ،‬برای ذخیره سازی اعدادی که فقط‬

‫مثبت هستند ولی بزرگ‪ ،‬به متغیر نیاز پیدا می کنید‪ .‬به منظور معرفی چنین متغیری‪ ،‬می توان از نوع داده ی ‪ ulong‬کمک گرفت‪ .‬متغیری که‬

‫به عنوان ‪ ulong‬تعریف می شود‪ ،‬می تواند اعدادی را که از ‪ 0‬تا ‪ 615 ،551 ،709 ،073 ،744 ،446 ،18‬متغیر است را در ‪ 64 bit‬جای دهد‪.‬‬

‫اعداد حقیقی (‪)real numbers‬‬

‫عدد حقیقی‪ ،‬عددی است که یک بخش اعشاری (‪ )decimal part‬را نشان می دهد‪ .‬یک عدد می تواند به وسیله ی یک عالمت به دو بخش‬

‫تقسیم شده باشد‪ ،‬که از آن عالمت با نام عالمت اعشار (‪ )decimal separator/symbol‬یاد می شود‪ .‬البته‪ ،‬این عالمت از کشوری به کشور‬

‫دیگر یا زبانی به زبان دیگر متفاوت است‪ .‬برای مثال‪ ،‬در زبان انگلیسی آمریکایی این عالمت به صورت نقطه (‪ ).‬نمایش داده می شود‪.‬‬

‫‪99‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫در هر دو طرف این عالمت اعداد مقدار یک رقم را مشخص می کنند‪ .‬اعدادی که در سمت راست این عالمت قرار می گیرند‪ ،‬در واقع میزان‬

‫دقت رقم مورد نظر را نشان می دهند‪.‬‬

‫اعداد ممیز شناور (‪)floating-point numbers‬‬

‫‪ Integer‬هایی که تاکنون با آن ها برخورد داشتیم‪ ،‬مقدارهای اعشاری (‪ )decimal‬را نشان نمی دادند‪ C# .‬برای این منظور‪ ،‬مقدارهای شناور‬

‫(‪ )floating values‬را برای برنامه نویس فراهم می کند‪ .‬به منظور تعریف اصلی ترین مقدار شناور‪ ،‬از کلیدواژه ی ‪ float‬استفاده می کنیم‪.‬‬

‫متغیری که با ‪ float‬معرفی می شود‪ ،‬قادر است اعداد حقیقی ای که در رنج ‪ ±1.5 xÂÂ10−45‬تا ‪ ±3.4 xÂÂ1038‬قرار می‬

‫گیرند را با ‪ 4‬رقم اعشار در ‪ 32 bit‬ذخیره کند‪ .‬مثال آن را در زیر مشاهده می کنید‪.‬‬

‫‪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();
}
}

.‫ برنامه را اجرا کنید‬،‫ برای مشاهده ی نتیجه‬.2

-/- Georgetown Cleaning Services -/-


========================
Order Date: 7/15/2002
------------------------
Item Type Qty
------------------------
Shirts 4
Pants 0
Other Items 3
------------------------
Monday Discount: 0.25%
========================

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‬به منظور نشان دادن ارزش پول استفاده می شود‪.‬‬

‫پس از تعریف متغیر دهدهی (‪ ،)decimal‬می توان آن را با یک عدد طبیعی مقداردهی اولیه کرد‪ .‬برای این منظور‪ ،‬هنگام مقدار دهی اولیه‪،‬‬

‫پسوند ‪ m‬یا ‪ M‬را به مقدار مذکور ضمیمه کنید‪.‬‬

‫مثال‬

‫‪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‬‬
‫}‬
‫}‬
‫نتیجه ی زیر به دست می آید‪.‬‬

‫‪Hourly Salary = 24‬‬

‫همان طور که پیش تر بیان شد‪ ،‬هنگام تعریف یا مقداردهی اولیه ی متغیر حقیقی‪ ،‬آن پسوندی که به مقدار ضمیمه می کنید به ‪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‬است‪.‬‬

‫‪560 / 672 = 0‬‬


‫‪Press any key to continue...‬‬

‫‪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‬را به کار می برد‪ .‬برنامه نتیجه ی زیر را تولید می کند‪.‬‬

‫‪560 / 672 = 0.833333333333333‬‬


‫‪Press any key to continue...‬‬
‫به منظور تعیین نوع مقدار داده شده (‪ double ،float‬یا ‪ )decimal‬پسوند مربوط را به آن اضافه کنید‪.‬‬

‫‪class Program‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫;)" = ‪System.Console.Write("560 / 672‬‬
‫;)‪System.Console.WriteLine(560F / 672f‬‬
‫;)(‪System.Console.ReadKey‬‬
‫}‬
‫}‬
‫این بار برنامه نتیجه ی زیر را می دهد‪.‬‬

‫‪560 / 672 = 0.8333333‬‬


‫‪Press any key to continue...‬‬

‫به کاربردن مقادیر ‪decimal‬‬

‫به منظور استفاده از متغیرهای ‪ ،decimal‬فایل را به صورت زیر اصالح کنید‪.‬‬

‫‪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‬برنامه را اجرا کنید‪ .‬نتیجه ی زیر به دست می آید‪.‬‬

‫‪-/- Georgetown Cleaning Services -/-‬‬


‫========================‬
‫‪Order Date: 7/15/2002‬‬
‫‪------------------------‬‬
‫‪Item Type Qty Unit Price‬‬
‫‪------------------------‬‬
‫‪Shirts‬‬ ‫‪5‬‬ ‫‪0.95‬‬
‫‪Pants‬‬ ‫‪2‬‬ ‫‪1.95‬‬
‫‪Other Items 3‬‬ ‫‪4.55‬‬
‫‪------------------------‬‬
‫‪Monday Discount: 0.25%‬‬
‫========================‬
‫‪ .1‬پنجره ی ‪ DOS‬را ببندید‪.‬‬

‫نوع داده های جانبی (‪)Accessory Data Type‬‬

‫رشته ها (‪)Strings‬‬

‫رشته یک فضای خالی‪ ،‬یک کاراکتر‪ ،‬یک کلمه یا یک گروه کلمه است که ‪ compiler‬باید آن را " همان طور که هست " در نظر بگیرد‪ ،‬یعنی نباید‬

‫به این که رشته از چه چیزی تشکیل شده زیاد دقت کند‪ ،‬مگر این که شما مستقیم غیر این را به ‪ compiler‬دستور دهید‪ .‬به عبارت دقیق‬

‫تر‪ ،‬می توانید هر چه دلخواهتان است در یک رشته بگنجانید‪.‬‬

‫اصوالً‪ ،‬مقدار یک رشته با عالمت نقل و قول (") آغاز می شود و به آن نیز ختم می شود‪ .‬نمونه ی یک رشته به این صورت می باشد ‪:‬‬

‫‪ ."Welcome to the World of C# Programming!".‬برای این که یک رشته در صفحه ی کنسول نمایش داده شود‪ ،‬می توان آن را در‬

‫دستور )(‪ System.Console.Write‬قرار داد‪.‬‬

‫‪class Exercise‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬

‫‪110‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
System.Console.WriteLine("Welcome to the World of C# Programming!");
System.Console.ReadKey();
}
}

.‫نتیجه ی زیر به دست می آید‬

Welcome to the World of C# Programming!


Press any key to continue...

string ( ‫ باید یک متغیر رشته‬،‫ در این مورد‬.‫ممکن است مجبور به استفاده از رشته ای شوید که مقدار آن از پیش برای شما شناس نباشد‬

‫ استفاده می شود و به دنبال آن اسم متغیر مورد نظر قرار داده می‬string ‫ یا‬var ‫ از کلیدواژه های‬،‫ برای این منظور‬.‫) تعریف کرد‬variable

)initialize( ‫ مقداردهی اولیه‬null ‫ یک گروه کلمه یا حتی‬، ‫ یک کلمه‬،‫ یک نشانه‬،‫ یک کاراکتر‬،‫ می توان یک رشته را با یک فضای خالی‬.‫شود‬

.‫) ای که به رشته داده می شود باید حتماً داخل عالمت (" ") قرار گیرد‬value( ‫ مقدار‬.)‫ استفاده کرد‬string? ‫کرد ( به هیچ وجه نباید از‬

.‫ دو نمونه زیر را مشاهده کنید‬.‫) باشد‬null ‫(مگر این که آن مقدار‬

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();
}
}

‫نتیجه‬

Welcome to the World of C# Programming!


Team: Real Madrid
Country: Guinée Equatoriale
Press any key to continue...

111
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫به کار بردن رشته ها‬

.‫ فایل را به صورت زیر تغییر دهید‬،)string( ‫ برای استفاده از رشته‬.8

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();
}
}

.‫ نتیجه ی زیر حاصل می گردد‬.‫ برنامه را اجرا کنید‬،‫ حال‬.2

-/- Georgetown Cleaning Services -/-


========================
Customer: Gregory Almas
Home Phone: (301) 723-4425
Order Date: 7/15/2002
------------------------
Item Type Qty Unit Price
------------------------
Shirts 5 0.95
Pants 2 1.95
Other Items 3 4.55
------------------------
Monday Discount: 0.25%
========================

.‫ را ببندید‬DOS ‫ اکنون می توانید پنجره ی‬.1

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();
}
}
.‫نتیجه ی زیر به دست می آید‬

=//= Altair Realtors =//=


Properties Inventory
Property #: 293749
Property Type: S
Stories: 3
Bedrooms: 4
Market Value: 425880
Press any key to continue...

)constants( ‫ثابت ها‬

.‫ را بارها و بارها استفاده کنید‬39.37 ‫فرض کنید باید رقمی همچون‬

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‬را‬

‫طوری تعریف کرد و به کاربرد که مقدار آن مانند ثابت (‪ )constant‬تغییر نکند‪.‬‬

‫به منظور ایجاد یک ثابت‪ ،‬باید کلیدواژه ی ‪ const‬را در سمت چپ آن تایپ کنید‪ .‬به خاطر داشته باشید که حین تعریف ثابت‪ ،‬باید مقدار‬

‫مناسب به آن اختصاص داد‪.‬‬

‫مثال‬

‫;‪const double ConversionFactor = 39.37D‬‬

‫پس از ایجاد ثابت مورد نظر و مقداردهی اولیه ی مناسب آن‪ ،‬می توان اسم آن را در جایی که ثابت دلخواه باید قرار می گرفت وارد کرد‪ .‬در زیر‬

‫نمونه ای از متغیر ثابت (‪ ،)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‬ثابتی است که برای نشان دادن نسبت محیط دایره به قطر آن به کار می رود‪ .‬البته کاربرد این ثابت بیشتر در علم ریاضی است و برای‬

‫استفاده از آن در برنامه نویسی باید ‪ Math.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‬نمایش داده‬

‫شود‪ ،‬روی گزینه ی دوم کلیک کنید‪.‬‬


‫‪124‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫روی آن راست کلیک کرده‪ ،‬نشان گر موس را روی ‪ Refactor‬قرار دهید‪ ،‬سپس گزینه ی ‪ rename‬را کلیک کنید‪.‬‬

‫اگر می خواهید برنامه ی ‪ ،studio‬اسم ها را پیدا کرده و آن ها را در داخل ‪ comment‬ها تغییر دهد‪ ،‬در ‪ Comment check box‬روی گزینه‬

‫ی ‪ Search‬کلیک کنید‪ .‬چنانچه‪ ،‬اسم در رشته ها نگه داشته می شود و شما خواهان تغییر آن هستید‪ ،‬در ‪ Strings checkbox‬روی گزینه‬

‫ی ‪ search‬کلیک کنید‪ .‬پس از اینکه شما ‪ ok‬را اتنخاب کردید‪ ،‬پنجره ی محاوره (‪ Preview Changes-rename ،)dialog box‬روی صفحه‬

‫نمایش پدیدار می گردد‪ .‬پنجره ی باال تمام جاهایی که اسم در آن به کار رفته را برای شما به نمایش می گذارد‪ .‬حال‪ ،‬می توانید اسم را به‬

‫دلخواه تغییر دهید‪.‬‬

‫‪125‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫اکنون‪ ،‬به منظور جایگزین کردن اسم دکمه ی ‪ Apply‬را فشار دهید‪.‬‬

‫دسترسی پیدا کردن به تعریف متغیر (‪)Variable's Declaration‬‬

‫چنانچه داکیومنتی بسیار طوالنی در اختیار دارید که از خطوط بسیار زیادی تشکیل شده‪ ،‬در یک بخش خاص ممکن است با متغیری مواجه‬

‫شوید که مکانی که متغیر در آن تعریف شده برای شما برای شما شناس نیست‪ .‬حال‪ ،‬در صورت استفاده از ‪ ،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...‬را انتخاب کنید‪.‬‬

‫کلیدهای ‪ Ctrl + G‬را باهم فشار دهید‪.‬‬

‫حال‪ ،‬پنجره ی محاوره ای نمایان می گردد که شما می توانید با وارد کردن شماره ی خط در آن‪ ،‬خط مزبور را پیدا کنید‪.‬‬

‫عملگرهای اساسی ‪C#‬‬

‫مقدمه‬

‫در برنامه نویسی منظور از ‪ ،operation‬عملیاتی است که به منظور اصالح مقدار متغیر موجود‪( ،‬یا ایجاد مقداری جدید با ترکیب مقدارهای جاری)‪،‬‬

‫روی مقدار معینی انجام می شود‪ .‬بنابراین‪ operation ،‬با استفاده از حداقل یک نشانه (‪ )symbol‬و یک مقدار (‪ )value‬امکان پذیر می شود‪.‬‬

‫نشانه ای که در عملیات به کار برده شده‪( operator ،‬عملگر( خوانده می شود‪ .‬حال‪ ،‬مقداری که در عملیات نام برده استفاده شده ‪operand‬‬

‫(عمل وند) گفته می شود‪.‬‬

‫‪( Unary operator‬عملگر یگانی)‪ ،‬عملگری است که عملیات خود را روی تنها یک عملوند انجام می دهد‪.‬چنانچه‪ ،‬عملگری عملیات مورد نیاز را‬

‫روی دو عملوند انجام دهد‪( binary operand ،‬عملگر دوگانی) اطالق می گردد‪.‬‬

‫معرفی عملگرها و عملوندها‬

‫‪ .8‬ابتدا‪ ،‬برنامه ی ‪ Microsoft Visual Studio‬را راه اندازی کنید‪.‬‬

‫‪ .2‬به منظور ایجاد برنامه ی کاربردی جدید‪ ،‬به فهرست گزینه ی اصلی مراجعه کرده‪ ،‬سپس روی گزینه ی ‪ File -> New Project...‬کلیک‬

‫کنید‪.‬‬

‫‪ .1‬گزینه ی ‪ Empty Project‬را از فهرست میانی انتخاب کنید‪.‬‬

‫‪ .4‬اسم را به ‪ gdcs4‬تغییر داده‪ ،‬روی ‪ ok‬کلیک کنید‪.‬‬

‫‪ .5‬برای ایجاد فایل ویژه ی کد مورد نظر‪ main menu ،‬را باز کرده‪ ،‬سپس ‪ Project -> Add New Item...‬را انتخاب کنید‪.‬‬

‫‪128‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪ Code File .6‬را از لیست میانی انتخاب کنید‪.‬‬

‫‪ .4‬اسم را به ‪ CleaningOrder‬تغییر دهید‪.‬‬

‫‪ .1‬حال‪ ،‬گزینه ی ‪ Add‬را انتخاب کنید‪.‬‬

‫}{‬

‫این عالمت در واقع پرکاربردترین و کارامدترین عملگر در زبان ‪ 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‬‬
‫}‬
‫}‬

‫نتیجه ی زیر به دست می آید‪.‬‬

‫‪Employee's Hourly Salary: $12.55‬‬

‫ُکدِ فوق ابتدا متغیر را تعریف کرده‪ ،‬س پس مقدار را به آن تخصیص داده است‪.‬این رویه زمانی دنبال می شود که‪ ،‬بخواهید مقدار یک متغیر را‬

‫تغییر دهید‪ .‬از فرایند تخصیص مقداری به متغیر‪ ،‬پس از اینکه متغیر تعریف شده‪ ،‬با نام مقداردهی اولیه یا ‪ 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#‬‬
‫}‬
‫}‬

‫استفاده از عالمت نقل و قول‬

‫‪ .8‬برای این منظور اقدامات زیر را انجام دهید‪.‬‬

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

‫‪ .1‬حال‪ ،‬با زدن کلید ‪ Enter‬به محیط برنامه نویسی بازگردید‪.‬‬

‫کروشه ][‬

‫از این عالمت بیشتر زمان ها برای مدیریت و کنترل اندیس یا بٌعد یک آرایه استفاده می شود‪ .‬درباره ی کاربرد این عملگر در بخش آرایه ها بحث‬

‫می کنیم‪.‬‬

‫عملگر مثبت (‪)+‬‬

‫علم جبر برای دسته بندی ارقام از یک جور خط کش استفاده می کند‪ .‬وسط این خط کش عدد ‪ 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 :‬به خاطر این که مقدار فوق هیچ گونه عالمتی‬

‫را به یدک نمی کشد‪ ،‬آن را ‪ ،unsigned‬یا بدون عالمت می خوانند‪.‬‬

‫مثال‬

‫‪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");
}
}

‫نتیجه‬

The value 155.5 uses 8 bytes

.‫زیر نمونه های بیشتری را مشاهده می کنید‬

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();
}
}
‫نتیجه‬

The sizeof Operator


==========================
Data Type Memory Size
--------------------------
char 2 Bytes

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 = value3‬‬

‫در مورد ارقام‪ ،‬نحوه و ترتیب قرارگیری اعداد چندان اهمیتی ندارد‪ .‬برای مثال‪ value1 + value2 ،‬هیچ فرقی با ‪ value2 + value1‬ندارد‪.‬‬

‫مثال‬

‫‪class Exercise‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫;)" = ‪System.Console.Write("244 + 835‬‬
‫;)‪System.Console.WriteLine(244 + 835‬‬
‫}‬
‫}‬

‫نتیجه‬

‫‪244 + 835 = 1079‬‬

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

‫نتیجه ی زیر حاصل می گردد‪.‬‬

‫‪Full Name: Alexander Kallack‬‬


‫‪Press any key to continue...‬‬

‫استفاده از عملگر ‪+‬‬

‫‪ .8‬فایل را به صورت زیر تغییر دهید‪.‬‬

‫‪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();
}
}

.‫ نتیجه ی زیر به دست می آید‬.‫ برنامه را اجرا کنید‬،‫ حال‬.2

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
========================

.‫ به محیط برنامه نویسی خود بازگردید‬،‫ را بسته‬DOS ‫ پنجره ی‬.1

‫افزایش دادن متغییر‬

،‫ متغیر یا مقدار برای همیشه تغییر پیدا کرده‬،‫ به آن‬8 ‫ پس از افزودن‬.‫ به آن است‬8 ‫ اضافه کردن‬،‫آسان ترین روش به منظور افزایش یک مقدار‬

.‫ مثال زیر این نمونه را به زیبایی نمایش داده است‬.‫و متغیر حاوی مقدار جدید خواهد بود‬

// This program studies value incrementing


public class Exercise
{
static void Main()
{
var value = 12;
System.Console.WriteLine("Techniques of incrementing a value");
System.Console.Write("Value = ");
System.Console.WriteLine(value);
value = value + 1;
System.Console.Write("Value = ");
System.Console.WriteLine(value);
}
}

‫نتیجه‬

Techniques of incrementing a value


Value = 12
Value = 13

143
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
Value = Value ‫ به جای نوشتن‬.‫" را برای برنامه نویس فراهم می کند‬++" )increment operator( ‫ عملگر افزایش‬،‫ برای این منظور‬C# ‫زبان‬

.‫ برنامه فوق را به این ترتیب نیز می توان نوشت‬.‫ و نتیجه نیز همان خواهد بود‬Value++ ‫ می توان نوشت‬،+ 1

// This program studies value incrementing


public class Exercise
{
static void Main()
{
var value = 12;
System.Console.WriteLine("Techniques of incrementing a value");
System.Console.Write("Value = ");
System.Console.WriteLine(value);
value++;
System.Console.Write("Value = ");
System.Console.WriteLine(value);
}
}

،‫ به متغیر‬1 ‫این عملگر با اضافه کردن‬.‫ زیرا تنها یک متغیر را دستخوش تغییر خود قرار می دهد‬،‫ نیز یک عملگر یگانی محسوب می شود‬++ ‫عملگر‬

، ‫ متغیر نیز سر انجام‬.‫ اضافه می کند‬1 ‫ مقدار قبلی متغیر را گرفته و به آن‬compiler ،‫ اجرا می شود‬Value++ ‫ هر بار که‬.‫آن را تغییر می دهد‬

.‫مقدار افزایش یافته را در خود ذخیره می کند‬

// This program studies value incrementing


public class Exercise
{
static void Main()
{
var value = 12;
System.Console.WriteLine("Techniques of incrementing a value");
value++;
System.Console.Write("Value = ");
System.Console.WriteLine(value);
value++;
System.Console.Write("Value = ");
System.Console.WriteLine(value);
value++;
System.Console.Write("Value = ");
System.Console.WriteLine(value);
}
}

.‫نتیجه ی زیر به دست می آید‬

Techniques of incrementing a value

144
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
Value = 13
Value = 14
Value = 15

Pre and post increment

‫ به منظور افزایش مقدار یک‬.‫ بسیار حائز اهمیت است‬،‫ به خصوص در رابطه با متغیری که اصالح می کند‬،‫موقعیتی که عملگر در آن قرار می گیرد‬

.‫ باید عملگر را به طور حتم سمت چپ متغیر قرار داد‬،‫ پیش از استفاده ی دوباره از آن‬،‫متغیر‬

// This program studies value incrementing


public class Exercise
{
static void Main()
{
var value = 12;
System.Console.WriteLine("Techniques of incrementing a value");
System.Console.Write("Value = ");
System.Console.WriteLine(value);
System.Console.Write("Value = ");
System.Console.WriteLine(++value);
System.Console.Write("Value = ");
System.Console.WriteLine(value);
}
}

.‫نتیجه ی زیر حاصل می گردد‬

Techniques of incrementing a value


Value = 12
Value = 13
Value = 13

)compound addition( ‫جمع مرکب‬

.‫ کافی است متغیری که قرار است میزبان مقدار جدید باشد را تعریف کنید‬.‫افزودن یک مقدار ثابت به متغیر امری غیر عادی نیست‬

‫مثال‬

// This program studies value incrementing and decrementing

public class Exercise


{
static void Main()
145
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫{‬
‫;‪double value = 12.75‬‬
‫;‪double newvalue‬‬
‫;)"‪System.Console.WriteLine("Techniques of incrementing and decrementing a value‬‬
‫;)" = ‪System.Console.Write("Value‬‬
‫;)‪System.Console.WriteLine(value‬‬
‫;‪newvalue = value + 2.42‬‬
‫;)" = ‪System.Console.Write("Value‬‬
‫;)‪System.Console.WriteLine(newvalue‬‬
‫}‬
‫}‬

‫نتیجه ی زیر را به دست می دهد‪.‬‬

‫‪Techniques of incrementing and decrementing a value‬‬


‫‪Value = 12.75‬‬
‫‪Value = 15.17‬‬

‫روشی که باال به کار رفته‪ ،‬ایجاب می کند شما در برنامه ی خود دو متغیر داشته باشید‪ .‬مزیت آن این است که هر متغیر می تواند مقدار خود را‬

‫داشته باشد ‪ ،‬با این وجود مقدار متغیردوم وابسته است به تغییراتی که به متغییر اصلی وارد می شود‪ .‬گاهی اوقات نیازی به حفظ کردن مقدار‬

‫اولیه متغیر اصلی نیست‪ ،‬و الزم است که مقدار یک متغیر را به صورت دائمی تغییر دهید‪ .‬برای این منظور‪ ،‬باید عملیات جمع را مستقیماً روی‬

‫خود متغیر پیاده کرد ( با اضافه کردن مقدار دلخواه به متغیر)‪ .‬با این کار نه تنها مقدار متغیر اصالح می شود‪ ،‬بلکه دیگر نیازی به متغیر اضافه‬

‫بر سازمان نیست‪.‬‬

‫به منظور افزودن مقدار به متغیر و اصالح آن‪ ،‬می توان عملگر جایگزین را با عملگر ‪ +‬ترکیب کرد و عملگری جدید به وجود آورد ‪.+= :‬‬

‫مثال‬

‫‪// This program studies value incrementing and decrementing‬‬


‫‪public class Exercise‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫;‪var value = 12.75‬‬
‫;)"‪System.Console.WriteLine("Techniques of incrementing and decrementing a value‬‬
‫;)" = ‪System.Console.Write("Value‬‬
‫;)‪System.Console.WriteLine(value‬‬
‫;‪value += 2.42‬‬
‫;)" = ‪System.Console.Write("Value‬‬
‫;)‪System.Console.WriteLine(value‬‬
‫}‬
‫}‬

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

‫نتیجه‬

‫‪224.58 * 1548.26 = 347708.2308‬‬


‫‪Press any key to continue...‬‬

‫به کاربردن عملگر ضرب‬

‫‪ .8‬برای این منظور‪ ،‬فایل مرتبط را به این صورت اصالح کنید‪.‬‬

‫‪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();
}
}

.‫ برنامه را طبق دستور العمل اجرا کرده تا نتیجه ی آن را مشاهده کنید‬.2

-/- Georgetown Cleaning Services -/-


====================================
Customer: James Burreck
Home Phone: (202) 301-7030
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
====================================

.‫ را بسته و به محیط برنامه نویسی خود بازگردید‬DOS ‫ پنجره ی‬،‫ اکنون‬.2

‫ضرب مرکب‬

‫ همین عملیات‬.‫ سپس محصول آن را به متغیر دیگری اختصاص داد‬،‫دیدیم که می توان مقداری را ازمتغیر کم کرد یا مقداری به آن اضافه کرد‬

.‫را می توان برای ضرب هم پیاده کرد‬

‫مثال‬
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);
}
}

‫نتیجه‬

224.58 - 1548.26 = -1323.68


Press any key to continue...

‫ برنامه ی زیر این حقیقت را به خوبی نشان‬.‫ یکی نیست‬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();
}
}

.‫نتیجه ی زیر به دست می آید‬

=+= Addition =+=


128 + 42 + 5 = 175
5 + 42 + 128 = 175

151
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
=-= Subtraction =-=
128 - 42 - 5 = 81
5 - 42 - 128 = -165

‫ اعداد همان ترتیب را‬،‫ در بخش منها عملیات‬.‫ هر دو عملیات یک نتیجه ی واحد و یکسان را ارائه می دهند‬،‫همان طور که مشاهده می کنید‬

.‫ ولی نتایج متفاوتی به دست می دهند‬،‫دنبال می کنند‬

‫به کاربردن عملگر منها‬

.‫ فایل را به صورت زیر تغیر دهید‬،‫ برای انجام عمل منها‬.1

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();
}
}

.‫ نتیجه ی زیر به دست می آید‬.‫ برنامه را اجرا کنید‬.2

-/- Georgetown Cleaning Services -/-


====================================
Customer: James Burreck
Home Phone: (202) 301-7030

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
====================================

.‫ را بسته و به محیط برنامه نویسی بازگردید‬DOS ‫ پنجره ی‬.3

‫کاهش دادن متغیر‬

‫ از این عملیات با نام کاهش مقدار‬.‫ رقم از آن کسر می کنید‬1 ‫ در واقع یک‬، 5، 6، 7، 8 ‫ مثل‬،‫زمانی که اعداد را به صورت معکوس می شمارید‬

.‫) یاد می شود‬decrementing a value(

// This program studies value decrementing


public class Exercise
{
static void Main()
{
var value = 12;
System.Console.WriteLine("Techniques of decrementing a value");
System.Console.Write("Value = ");
System.Console.WriteLine(value);
value = value - 1;
System.Console.Write("Value = ");
System.Console.WriteLine(value);
}
}

‫نتیجه‬

Techniques of decrementing a value


Value = 12
Value = 11

154
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫ عملیات فوق را می توان به این صورت‬،‫ با استفاده از عملگر مذکور‬.‫) را ارائه می دهد‬--( ‫ برای این منظور عملگر کاهش‬،C# ‫زبان برنامه نویسی‬

.‫اصالح کرد‬

public class Exercise


{
static void Main()
{
var value = 12;
System.Console.WriteLine("Techniques of decrementing a value");
System.Console.Write("Value = ");
System.Console.WriteLine(value);
value--;
System.Console.Write("Value = ");
System.Console.WriteLine(value);
}
}

Pre-decrementing a variable

‫ چنانچه مایلید متغیر را پیش از فراخوانی آن کاهش‬.‫در این مورد نیز موقعیت عملگر (جایی که در آن قرار می گیرد) اهمیت به سزایی دارد‬

.‫ برنامه ی زیر این عملیات را به تصویر کشیده‬.‫) را سمت چپ عملوند قرار دهید‬decrement operator( ‫ باید عملگر کاهش‬،‫دهید‬

// This program studies value decrementing


public class Exercise
{
static void Main()
{
var value = 12;
System.Console.WriteLine("Techniques of decrementing a value");
System.Console.Write("Value = ");
System.Console.WriteLine(value);
System.Console.Write("Value = ");
System.Console.WriteLine(--value);
System.Console.Write("Value = ");
System.Console.WriteLine(value);
}
}

‫نتیجه‬

Techniques of decrementing a value


Value = 12
Value = 12
155
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
Value = 11

)compound subtraction( ‫تفریق مرکب‬

.‫ استفاده می شود‬-= ‫ از عملگر‬،‫) از یک متغیر‬constant value( ‫به منظور کسر مقدار ثابتی‬

‫مثال‬

// This program studies value incrementing and decrementing


public class Exercise
{
static void Main()
{
var value = 12.75;
System.Console.WriteLine("Techniques of incrementing and decrementing a value");
System.Console.Write("Value = ");
System.Console.WriteLine(value);
value -= 2.42;
System.Console.Write("Value = ");
System.Console.WriteLine(value);
}
}
‫نتیجه‬

Techniques of incrementing and decrementing a value


Value = 12.75
Value = 10.33

)division operation( ‫عملیات تقسیم‬

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

.‫) انجام می گیرد‬/( ‫ عمل تقسیم با عملگر‬.‫بخش تقسیم کرده اید‬

‫مثال‬

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();
}
}

.‫این مثال نتیجه ی زیر را ارائه می دهد‬

224.58 / 1548.26 = 0.145053156446592


Press any key to continue…

.‫ هیچ گاه چیزی را به صفر تقسیم نکنید‬:‫نکته‬

‫به کاربر بردن عملگر تقسیم‬

.‫ فایل را به این صورت تغییر دهید‬،‫ برای این منظور‬.8

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();
}
}

.‫ نتیجه ی زیر را به دست می دهد‬.‫ برنامه را اجرا کنید‬.2

-/- Georgetown Cleaning Services -/-


====================================
Customer: James Burreck
Home Phone: (202) 301-7030
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
Discount Rate: 20.00%
Discount Amount: 4.8600

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

‫‪ .1‬پنجره ی ‪ DOS‬را بسته و به محیط برنامه نویسی برگردید‪.‬‬

‫تقسیم مرکب (‪)Compound division‬‬

‫به خاطر دارید که می توان مقداری را به متغیری اضافه کرد‪ ،‬در آن ضرب کرد‪ ،‬یا از آن کسر کرد‪ ،‬سپس نتیجه ی آن را به خود متغیر اختصاص‬

‫داد‪ .‬این عملیات را می توان برای تقسیم نیز پیاده کرد‪ .‬نمونه ی آن را در زیر مشاهده می کنید‪.‬‬

‫‪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);
}
}

)Remainder( ‫باقی مانده‬

‫ گاهی اوقات به باقی‬.‫( در آن به کار ببرید‬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");
}
}

.‫ فرایند را سرعت می بخشد‬،%= ‫ با فراهم کردن عملگر‬C# ‫زبان‬

‫مثال‬

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

‫باید ابتدا به دودویی (‪ )binary‬تبدیل شود‪.‬‬

‫عملیاتی که در برنامه نویسی )‪ Microsoft Windows (Win32‬کاربرد فراوان دارد‪ OR operation ،‬است که به آن خواهیم پرداخت‪.‬‬

‫"معکوس کردن" ‪(" Reversing " a bit ) Bit‬‬

‫به خاطر دارید که هر ‪ ،Bit‬تنها یک مقدار دربردارد ‪ :‬یا ‪ 2‬و یا ‪ .8‬وارونه سازی (معکوس کردن) جزئی از عملیات ایجاد تغییر در ‪ Bit‬می باشد‪ .‬برای‬

‫مثال‪ ،‬اگر در یک ‪ Bit‬مقدار ‪ 8‬را دارید‪ ،‬به ‪ 2‬تبدیل می شود و اگر مقدار ‪ 2‬را دارید به ‪ 8‬تبدیل می شود‪ .‬زبان ‪ C#‬با عملگر ~‪ ،‬این عملیات را ممکن‬

‫می سازد‪.‬‬

‫برای نمونه رقم ‪ 212‬را در نظر بگیرید‪ .‬این رقم (‪ decimal‬دهدهی است) با سیستم دودویی (‪ (binary‬به این شکل در می آید ‪:‬‬

‫‪ .100011110‬حال‪ ،‬می توان هر ‪ bit‬را به صورت زیر وارونه کرد‪.‬‬

‫‪286‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬

‫‪Not 286‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬

‫برای استفاده ی صحیح از عملگر ‪ ~ ،not‬را در سمت چپ مقدار قرار دهید‪.‬‬

‫مثال‬

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

‫پیوستگی بیتی (‪)Bitwise Conjunction‬‬

‫عبارت است از پیوند دادن (یا ضمیمه کردن) محتوای یک ‪ bit‬به ‪ bit‬دیگر‪ .‬برای این منظور‪ C# ،‬عملگر & را تعبیه کرده‪.‬‬

‫برای پیوند دادن محتوای دو ‪ ،bit‬به خاطر داشته باشید که اول باید آن ها را به سیستم دودویی (‪ )binary‬تبدیل کنید‪.‬‬

‫چنانچه ‪ bit‬ای با مقدار ‪ 2‬به ‪ bit‬دیگری با همین مقدار اضافه شود‪ ،‬نتیجه ‪ 2‬خواهد بود‪.‬‬

‫‪Bit0‬‬ ‫‪0‬‬

‫‪Bit1‬‬ ‫‪0‬‬

‫‪Bit0 And Bit1‬‬ ‫‪0‬‬

‫چنانچه ‪ bit‬با مقدار ‪ ،8‬به ‪ bit‬ای با مقدار ‪ 2‬اضافه شود‪ ،‬بازهم نتیجه ‪ 2‬خواهد بود‪.‬‬

‫‪Bit0‬‬ ‫‪1‬‬

‫‪Bit1‬‬ ‫‪0‬‬

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

‫‪Bit0 And Bit1‬‬ ‫‪1‬‬

‫تصور کنید می خواهید عدد ‪ 286 bit‬را به ‪ 445‬اضافه کنید‪ .‬رقم دهدهی ‪ 216‬را که به سیستم دودویی تبدیل کنید‪ ،‬این نتیجه به دست‬

‫می آید ‪.100011110 :‬نسخه ی دودویی رقم ‪( 4075‬که دهدهی می باشد) معادل ‪ 111111101011 :‬می باشد‪ .‬بر اساس چهار قاعده‬

‫ی فوق‪ ،‬می توان این دو رقم را به صورت زیر جمع کرد‪.‬‬

‫‪286‬‬ ‫‪0 0 0 1 0 0 0 1 1 1 1 0‬‬

‫‪4075‬‬ ‫‪1 1 1 1 1 1 1 0 1 0 1 1‬‬

‫‪286 & 4075‬‬ ‫‪0 0 0 1 0 0 0 0 1 0 1 0‬‬

‫بنابراین‪ 286 & 4075 ،‬نتیجه ی ‪ 100001010‬را می دهد‪ ،‬برابر است با‬

‫‪Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0‬‬

‫‪256 128 64‬‬ ‫‪32‬‬ ‫‪16‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪2‬‬ ‫‪1‬‬

‫‪286 & 4075‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬

‫‪256 0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪8‬‬ ‫‪0‬‬ ‫‪2‬‬ ‫‪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);
}
}

‫نتیجه‬

286 & 4075 = 266


Press any key to continue...

‫ به مثال زیر توجه‬.‫ نتیجه را دوباره برای همان متغیر به کار برد‬،) 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
‫}‬
‫}‬

‫جداسازی بیتی (‪)Bitwise Disjunction‬‬

‫عبارت است از جدا کردن یک ‪ bit‬از ‪ bit‬ای دیگر‪ C# .‬با فراهم کردن عملگر (|)‪ ،‬این امکان را فراهم می سازد‪.‬‬

‫همان طور که به خاطر دارید برای اضافه کردن دو رقم (از طریق پیوند دادن دو ‪ ،)bit‬باید ابتدا آن ها را به سیستم دودویی تبدیل کرد‪ .‬سپس‬

‫اگر ‪ bit‬ای با مقدار ‪ 2‬به ‪ bit‬دیگری با همان مقدار اضافه شود‪ ،‬نتیجه ‪ 2‬می شود‪.‬‬

‫‪Bit0‬‬ ‫‪0‬‬

‫‪Bit1‬‬ ‫‪0‬‬

‫‪Bit0 Or Bit1‬‬ ‫‪0‬‬

‫چنانچه ‪ bit‬ای با مقدار ‪ 8‬به ‪ bit‬دیگری با مقدار ‪ 2‬اضافه شود‪ ،‬نتیجه ‪ 8‬می شود‪.‬‬

‫‪Bit0‬‬ ‫‪1‬‬

‫‪Bit1‬‬ ‫‪0‬‬

‫‪Bit0 Or Bit1‬‬ ‫‪1‬‬

‫اگر ‪ bit‬ای با مقدار ‪ 2‬به ‪ bit‬دیگری با مقدار ‪ 8‬اضافه شود‪ ،‬نتیجه ‪ 8‬می شود‪.‬‬

‫‪Bit0‬‬ ‫‪0‬‬

‫‪Bit1‬‬ ‫‪1‬‬

‫‪Bit0 Or 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‬‬ ‫‪0 0 0 1 0 0 1 1 0 0 0 1‬‬

‫‪2853‬‬ ‫‪1 0 1 1 0 0 1 0 0 1 0 1‬‬

‫‪305 | 2853‬‬ ‫‪1 0 1 1 0 0 1 1 0 1 0 1‬‬

‫بنابراین‪ 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‬‬

‫یعنی ؛ ‪.286 | 4075 = 2048 + 512 + 256 + 32 + 16 + 4 + 1 = 2869‬‬

‫عملیات فوق را می توان به صورت زیر نیز محاسبه کرد‪.‬‬

‫‪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#‬برای این منظور عملگر ^ را ارائه می دهد)‪.‬‬

‫چنانچه هر دو ‪ bit‬دارای مقدار یکسانی باشند‪ ،‬نتیجه ‪ 2‬خواهد بود‪.‬‬

‫‪Bit0‬‬ ‫‪0‬‬ ‫‪1‬‬

‫‪169‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪Bit1‬‬ ‫‪0‬‬ ‫‪1‬‬

‫‪Bit0 ^ Bit1‬‬ ‫‪0‬‬ ‫‪0‬‬

‫اگر دو ‪ bit‬مقدار متفاوتی دارند‪ ،‬نتیجه ‪ 8‬می شود‪.‬‬

‫‪Bit0‬‬ ‫‪0‬‬ ‫‪1‬‬

‫‪Bit1‬‬ ‫‪1‬‬ ‫‪0‬‬

‫‪Bit0 ^ Bit1‬‬ ‫‪1‬‬ ‫‪1‬‬

‫فرض کنید می خواهیم مقدار ‪ 618‬را از ‪ 2548‬خارج کنیم‪ .‬معادل دودویی ‪ .1001101010 : 618‬معادل دودویی ‪.100111110100 : 2548‬‬

‫بر مبنای دو قاعده ی فوق‪ ،‬می توان ‪ bit‬های رقم ‪ 618‬را از ‪ 2548‬خارج کرد‪.‬‬

‫‪618‬‬ ‫‪0 0 1 0 0 1 1 0 1 0 1 0‬‬

‫‪2548‬‬ ‫‪1 0 0 1 1 1 1 1 0 1 0 0‬‬

‫‪618 ^ 2548‬‬ ‫‪1 0 1 1 1 0 0 1 1 1 1 0‬‬

‫بنابراین‪ 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‬‬

‫یعنی ؛ ‪.286 ^ 4075 = 2048 + 512 + 256 + 128 + 16 + 8 + 4 + 2 = 2974‬‬

‫البته‪ ،‬عمل فوق را به این صورت نیز می توان محاسبه کرد‪.‬‬


‫‪170‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
class Exercise
{
static void Main()
{
var number1 = 618;
var number2 = 2548;
var result = number1 ^ number2;
System.Console.WriteLine(result);
}
}

‫نتیجه‬

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‬ها از راست به چپ‬

‫عبارت است از جا به جایی ‪ bit‬ها از سمت راست به سمت چپ‪ .‬در این مورد نیز‪ ،‬الزم است پیش از انجام عملیات عدد به معادل دودویی خود‬

‫تبدیل شود‪ C# .‬این عملیات را با عملگر << پشتیبانی می کند‪.‬‬

‫رقم ‪ 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‬ها را در سمت راست قرار داد‪ .‬برای این منظور تمام مراحلی که برای انتقال ‪ bit‬ها به چپ انجام می دادید را به صورت معکوس برای‬

‫این فرایند پیاده کنید‪ .‬زبان ‪ C#‬با عملگر >>‪ ،‬این پروسه را امکان پذیر می کند‪.‬‬

‫کالس ها‬

‫برای تعریف متغیر‪ ،‬می توان از کلیدواژه ی ‪ var‬یا نوع داده ی ساده و شناخته شده بهره گرفت‪ .‬برای مثال‪ ،‬می توان برای تعریف متغیری که‬

‫نشانگر تعداد اتاق خواب های یک خانه است‪ ،‬از ‪ integer‬استفاده کرد‪.‬‬

‫‪class Program‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫;‪int bedrooms = 3‬‬
‫}‬
‫}‬

‫‪174‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫در ‪ C#‬می توان با به کاربردن چند متغیر‪ ،‬شی ای کامل پیچیده ساخت‪ .‬در زبان های برنامه نویسی کالس (که خود متشکل از یک گروه متغیر‬

‫است)‪ ،‬در واقع پایه ای برای ایجاد متغیری پیچیده تر می باشد‪ .‬حال برای به وجود آوردن یک کالس‪ ،‬ابتدا کلیدواژه ی ‪ class‬را تایپ‬

‫کرده‪،‬سپس به دنبال آن اسم و بدنه ی اصلی را داخل {} قرار داد‪.‬‬

‫نحوه ی وارد کردن کالس‬

‫‪ Microsoft Visual Studio‬را اجرا کنید‪.‬‬ ‫‪.8‬‬

‫به ‪ main menu‬مراجعه کرده و برای ایجاد ‪ app‬جدید گزینه های ‪ File -> New Project‬را انتخاب کنید‪.‬‬ ‫‪.2‬‬

‫در فهرست میانی روی گزینه ی ‪ Empty Project‬کلیک کنید‪.‬‬ ‫‪.1‬‬

‫اسم مورد نظر را به ‪ DepartmentStore1‬تغییر دهید‪.‬‬ ‫‪.4‬‬

‫حال ‪ OK‬را کلیک کنید‪.‬‬ ‫‪.5‬‬

‫نام گذاری کالس‬

‫درست مثل متغیر‪ ،‬یک کالس باید دارای اسم باشد‪ .‬اسم گذاری برای کالس بسیار شبیه به فرایند اسم گذاری برای متغیر است (از همان‬

‫قوانین پیروی می کند)‪ .‬البته‪ ،‬شما می توانید قوانین خو را به کار ببرید‪ .‬در دروس ما‬

‫چنانچه اسم کالس از تنها یک کلمه تشکیل شده‪ ،‬فقط حرف اول با حروف بزرگ نوشته می شود‪ .‬نمونه های آن ‪:‬‬

‫‪ Student ،Vehicle ،Identification‬می باشد‪.‬‬

‫اگر اسم کالس موردنظر از چند کلمه ساخته شده باشد‪ ،‬تمام حروف اول کلمات با حرف بزرگ نوشته می شوند ‪،DrivingRecord :‬‬

‫‪SocialSecurityInformation ،GeometricShape‬‬

‫مدیریت کالس ها‬

‫‪ Microsoft Visual Studio‬ابزار و امکان های بصری زیادی برای مدیریت کالس در اختیار برنامه نویس می گذارد‪ .‬همچنین فرایند نام گذاری‬

‫یا تغییر اسم کالس ها را با امکاناتی که دارد برای کاربر آسان ساخته است‪.‬‬

‫پنجره ی ‪Class View‬‬

‫بهترین روش برای مدیریت کالس‪ ،‬استفاده از پنجره ی ‪ Class View‬است‪ .‬برای دسترسی به این پنجره‬

‫‪175‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫چنانچه پنجره از قبل باز نیست‪ ،‬ابتدا ‪ main menu‬را باز کرده‪ ،‬سپس ‪ View -> Class View‬را کلیک کنید‪.‬‬

‫اگر پنجره ی مذکور از قبل باز بود‪ ،‬تنها کافی است روی ‪ tab‬آن کلیک کنید‪.‬‬

‫پنجره ی ‪ Class View‬از شش بخش مجزا تشکیل شده‪ .‬همانطور که در تصویر زیر مشاهده می کنید کاربرد و نوار عنوان آن مشابه ‪solution‬‬

‫‪ explorer‬می باشد‪.‬‬

‫‪.‬‬ ‫دومین بخش تشکیل دهنده ی نوار عنوان‪ ،‬نوار ابزار (‪ )toolbar‬آن می باشد‬

‫همان طور که از اسم آن پیدا است گزینه ی ‪ New Folder‬به شما اجازه می دهد فولدری جدید ایجاد کرده و به پروژه اضافه کنید‪ .‬دکمه های‬

‫‪ Back‬و ‪ Forward‬به شما اجازه می دهند در کالس ها پیمایش کنید‪.‬‬

‫در زیر ‪ ،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‬‬

‫‪ ،-> Add New Item‬روی گزینه ی ‪ class‬کلیک کنید)‪.‬‬

‫در ‪ ،Solution Explorer‬روی اسم پروژه راست کلیک کرده‪ ،‬نشان گر موس را روی ‪ Add‬قرار دهید‪ ،‬سپس ‪ class‬را انتخاب کنید‪.‬‬

‫در پنجره ی ‪ ،Class View‬روی اسم پروژه راست کلیک کنید‪ ،‬نشان گر موس را روی ‪ Add‬قرار داده‪ ،‬و ‪ class‬را انتخاب کنید‪.‬‬

‫در نتیجه ی تمام عملیات باال‪ ،‬پنجره ی محاوره ی ‪ Add New Item‬نمایش داده می شود (که در آن گزینه ی ‪ class‬اتنخاب شده)‪ .‬در صورتی‬

‫که ‪ Add New Item‬را از ‪ main menu‬یا ‪ Solution Explorer‬انتخاب کرده اید‪ ،‬کافی است روی خود ‪ class‬کلیک کنید‪ .‬می توانید اسم‬

‫پیش فرض را در کادر متن ‪ Name‬عوض کنید ( یا در صورت تمایل همان اسم را بپذیرید)‪ .‬اکنون‪ ،‬فایل جدیدی با اسم انتخابی شما و‬

‫پسوند ‪ cs.‬به پروژه ی شما اضافه می شود‪.‬‬

‫همچنین می توان برای ایجاد کالس از ‪ skeleton code‬استفاده کرد‪.‬‬

‫در آن قسمت ‪ Code Editor‬که باید کالس جدید را اضافه کنید‪ ،‬راست کلیک کرده‪ ،‬سپس روی ‪ Insert Snippet‬کلیک کنید‪ .‬حال‪،‬‬

‫‪ Visual C#‬را دو بار کلیک کنید‪ .‬در لیستی که ظاهر می شود‪ ،‬روی ‪ class‬دو بار کلیک کنید‪.‬‬

‫‪178‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫چنانچه کد را از قبل نوشته اید‪ ،‬و اکنون می خواهید آن کد را در کالس خود جای دهید‪ ،‬کافی است آن کد را انتخاب کنید‪ .‬ابتدا روی آن راست‬

‫کلیک کرده‪ ،‬سپس گزینه ی ‪ Surround With‬را انتخاب کنید‪.‬‬

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

‫اسم را به ‪ StoreItem‬تغییر دهید‪.‬‬ ‫‪.1‬‬

‫‪ .4‬روی ‪ Add‬کلیک کنید‪.‬‬

‫‪ .5‬در فایل زیر‪ ،‬این عبارت را تایپ کنید‪.‬‬

‫‪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‬کلیک کنید‪.‬‬

‫‪ .1‬اسم مورد نظر را به ‪ DepartmentStore‬تغییر دهید‪.‬‬

‫‪ .82‬روی ‪ Add‬کلیک کنید‪.‬‬

‫‪ .88‬داخل فایل خالی عبارات زیر را تایپ کنید‪.‬‬

‫‪class DepartmentStore‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫}‬
‫}‬

‫نحوه ی دستیابی به کالس‬

‫همان طور که پیشتر ذکر شد‪ ،‬شما می توانید هر تعداد کالس که مایلید برای پروژه ی خود ایجاد کنید‪ .‬مطابق میل می توانید هر کالس را در‬

‫فایل مختص به خود آن کالس نگه دارید یا می توانید تمام کالس ها را در یک فایل واحد ذخیره کنید‪ .‬اکنون‪ ،‬برای دسترسی به کالس ها‬

‫در قسمتی که به تب های ‪ Code Editor‬اختصاص دارد‪ ،‬روی تَبی که میزبان فایل کالس دلخواه است کلیک کنید‪ .‬سپس‪ ،‬به ‪combo box‬‬

‫سمت چپ ‪ Code Editor‬مراجعه کرده و کالس را انتخاب کنید‬

‫در ‪ ،Solution Explorer‬زیر اسم پروژه‪ ،‬روی اسم فایلی که دربردارنده ی کالس است دوبار کلیک کنید‪ .‬چنانچه فایل حاوی چند کالس‬

‫است‪،‬در ‪ combo box‬سمت چپ ‪ ،Code Editor‬کالس دلخواه را انتخاب کنید‪.‬‬

‫در پنجره ی ‪ ،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‬مراجعه کرده و گزینه های‬

‫‪ Refactor -> Rename...‬را کلیک کنید‪.‬‬

‫کلیه ی اقدامات باال پنجره ی محاوره ی ‪ Rename‬را نمایش می دهند‪ .‬حال‪ ،‬می توانید اسم کالس را در کادر متن ‪ New Name‬ویرایش‬

‫کنید‪ .‬برای تنظیم اینکه آیا مایلید ‪ ،Code Editor‬اسم به کار رفته در ‪ comment‬یا ‪ string‬را تغییر دهد یا نه‪ ،‬مجبورید از ‪ checkbox‬ها‬

‫استفاده کنید‪ .‬پس از کلیک روی دکمه ی ‪ ،ok‬پنجره ی ‪ Preview Changes – Rename‬به نمایش گذاشته می شود‪ .‬پنجره ی باال بخش‬

‫های مختلفی که اسم مورد نظر در آن به کار رفته را برای شما فهرست می کند‪ .‬اکنون می توانید به منظور اعمال تغییرات به وجود آمده روی‬

‫‪ Apply‬کلیک کنید‪.‬‬

‫ابزار جانبی زبان ‪C#‬‬

‫کد نا امن‬

‫یکی از دالیلی که زبان ‪ 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‬کد ناامن) در این برنامه به کاربرده شده‪.‬‬

‫برای این منظور‪ ،‬از تعریف کننده (‪ /unsafe ،)modifier‬استفاده می شود‪.‬‬

‫نمونه‬

‫‪csc /unsafe Exercise.cs‬‬

‫برای استفاده از این امکان در ‪ main menu ،Microsoft Visual Studio‬را باز کرده‪ ،‬روی ‪ Project -> [Project ] Properties...‬کلیک‬

‫کنید‪ .‬حال‪ ،‬در قسمت ‪ ،Build‬کادر تیک ‪ Allow Unsafe Code‬را فعال کنید‪.‬‬

‫‪184‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪Region Delimiters‬‬

‫‪ Microsoft Visual Studio‬امکانات مختلفی برای نوشتن و مدیریت بهتر کد فراهم می کند‪ .‬این ویژگی ها و امکانات عبارت اند از ‪ :‬کلمات‬

‫رنگی‪ ،‬توگذاری خودکار (‪ ،IntelliSense ،)intuitive indentation‬تعیین حد و مرز کدها و غیره‪...‬‬

‫‪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‬از آن جا شروع شود راست‬

‫کلیک کرده‪ Insert Snippet... ،‬را انتخاب کنید‪ ،‬سپس‬

‫روی ‪ Visual C#‬دوبار کلیک کنید‪.‬‬

‫چنانچه مایلید بخشی ایجاد کنید که حاوی کد است‪ ،‬کافی است کد موردنظر را در ‪ Code Editor‬انتخاب کنید‪ .‬حال‪ ،‬باید روی بخش‬

‫انتخابی راست کلیک کرده و گزینه ی ‪ Insert Snippet‬را انتخاب کنید‪.‬‬

‫‪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‬تایپ نشود‪ ،‬بخش‬

‫سمت راست خط ‪ #region‬نیز نمایش داده نخواهد شد‪.‬‬

‫‪190‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫مبانی نحوه ی استفاده از کالس‬

‫ایجاد (یک) شی‬

‫برای به کاربردن کالس در برنامه‪ ،‬ابتدا الزم است برای آن یک متغیر تعریف کنید‪ .‬از فرایند تعریف متغیر برای کالس‪ ،‬به عنوان ایجاد شی‬

‫(‪ )creating an object‬یا نمونه ای از کالس (‪ )instance of class‬نیز یاد می شود‪.‬‬

‫به منظور تعریف متغیر (یک) کالس‪ ،‬می توان از کلید واژه ی ‪ var‬استفاده کرد‪ .‬سرانجام‪ ،‬می توان اسم متغیر را به دنبال اسم کالس مورد نظر‬

‫تای پ کرد‪ .‬برای مثال‪ ،‬اگر بخواهیم متغیری برای کالس خانه ی اول درس معرفی کنیم‪ ،‬به صورت زیر عمل می کنیم ‪:‬‬

‫‪class House‬‬
‫{‬
‫}‬

‫‪class Program‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫‪var property . . .‬‬
‫}‬
‫}‬
‫یا‬

‫‪class House‬‬
‫{‬
‫}‬
‫‪class Program‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫;‪House property‬‬
‫}‬
‫}‬

‫نوع مقدار (‪ )value types‬و نوع ارجاع (‪)reference type‬‬

‫در درس های ‪ 1‬و ‪ 4‬با نحوه ی تعریف متغیر های نوع عادی آشنا شدیم‪ .‬همچنین گفتیم که پس از مقداردهی اولیه ی این متغیرها‪compiler ،‬‬

‫مقدارهای آن ها را در قسمت هایی از حافظه که از قبل به آن ها اختصاص داده ذخیره می کند‪ .‬نوع داده (‪ )data type‬هایی که برای چنین‬

‫‪191‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫متغیرهایی به کار می روند‪ ،‬نوع مقدار (‪ )value type‬خوانده می شوند‪ .‬برای ذخیره سازی مقادیر این متغیرها‪ compiler ،‬بخشی در حافظه‬

‫به وجود می آورد به نام پشته (‪ .)stack‬بخش باقی مانده ی حافظه ‪ heap‬نام دارد که به ذخیره سازی متغیر کالس ها اختصاص می یابد ‪:‬‬

‫پس از این که متغیری را با استفاده از کالس تعریف کردید‪ ،‬باید از ‪ compiler‬درخواست کنید بخشی از حافظه ی ‪ heap‬را به آن تخصیص‬

‫دهد‪ .‬برای این منظور‪ ،‬از عملگری به نام ‪ new‬استفاده می شود‪.‬‬

‫مثال‬

‫‪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#‬چنانچه کالسی را در هریک از فایل های متعلق به یک پروژه واحد ایجاد کنید‪ ،‬کالس نام برده در دسترس‬

‫تمامی فایل های (دیگر) پروژه قرار می گیرد‪.‬‬

‫تعریف متغیر نوع کالس‬

‫در بدنه ی ‪ ،Main‬عبارات زیر را تایپ کنید‪.‬‬


‫‪class DepartmentStore‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫;)(‪StoreItem si = new StoreItem‬‬
‫}‬
‫}‬

‫ایجاد شی تهی (‪)Null Object‬‬

‫برای استفاده از امکانات (‪ )behavior‬و مقدارهایی که کالس فراهم می کند‪ ،‬ملزم به تعریف متغیر هستیم‪ .‬همچنین دیدیم که پیش از به‬

‫کاربری کالس‪ ،‬باید مقدارهای الزم برای فیلد های کالس را فراهم کنید‪ .‬این کار به ‪ compiler‬اجازه می دهد تا حافظه ی تخصیص یافته به‬

‫متغیر را با مقادیر دلخواه پر کند‪ .‬ممکن است شما کامالً آماده نباشید مقادیر الزم را هنگام تعریف متغیر فراهم کنید‪.‬‬

‫متغیری که برای کالسی تعریف شده ولی هنوز مقدار الزم برای فیلد را دریافت نکرده را‪ ،‬شی تهی )‪ )null object‬می خوانند‪ .‬برای این منظور‬

‫(ایجاد شی تهی)‪ ،‬ابتدا اسم کالس و به دنبال آن اسم متغیر را تایپ کرده‪ ،‬سپس کلید واژه ی ‪ null‬را به آن اختصاص دهید‪.‬‬

‫پیش تر بحث شد که می توان برای تعریف متغیری با مقدار تهی (‪ )null‬عالمت سوال (؟) به آن اضافه کرد‪ .‬در صورت استفاده از کالس‪ ،‬از‬

‫اضافه کردن ؟ به اسم کالس خودداری کنید‪.‬‬

‫مثال‬

‫‪class House‬‬
‫{‬

‫‪193‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫}‬
‫‪class Program‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫;‪House property = null‬‬
‫}‬
‫}‬

‫چنانچه متغیر کالسی از پیش تعریف و مقدار دهی اولیه شده بود‪ ،‬ولی بنا به هر دلیلی مقدارهای آن پاک شد‪ ،‬چنین متغیری نیز شی تهی‬

‫(‪ )null object‬خوانده می شود‪.‬‬

‫به اشتراک گذاری کالس‬

‫برخالف زبان های ‪ C‬و ‪ C++‬که پیشرو و والدین برنامه ی ‪ C#‬حساب می شود‪ ،‬زبان ‪ C#‬طوری تعبیه شده که با دیگر زبان های برنامه نویسی‬

‫از جمله ‪ Visual Basic ،C++/CLI‬و ‪ F#‬به صورت مکمل کار کند‪ .‬به عبارت دیگر‪ ،‬می توان با کد هریک از زبان های باال‪ ،‬کدهای یک برنامه‬

‫کاربردی که توسط ‪ C#‬نوشته شده باشد را خواند‪ .‬برای تحقق بخشیدن به این امر‪ ،‬کالس ‪ C#‬باید به عنوان شی عمومی (‪)public object‬‬

‫تعریف شود‪.‬‬

‫اگر می خواهید کدهای نوشته شده توسط زبان های باال به کالس شما دسترسی پیدا کنند‪ ،‬باید هنگام ایجاد کالس‪ ،‬پیش از کلید واژه ی‬

‫‪ ،class‬کلیدواژه ی ‪ public‬را تایپ کنید‪.‬‬

‫مثال‬

‫‪public class Exercise‬‬


‫{‬
‫)(‪static void Main‬‬
‫{‬
‫;‪var number = 244‬‬
‫;"‪var thing = "Vehicle‬‬
‫;)‪System.Console.WriteLine(number‬‬
‫;)‪System.Console.WriteLine(thing‬‬
‫}‬
‫}‬

‫‪194‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫کاربرد ‪ :‬به اشتراک گذاری کالس‬

‫‪ main menu .8‬را باز کرده‪ ،‬روی گزینه های ‪ View -> Class View‬کلیک کنید‪.‬‬

‫‪ .2‬در پنجره ی ‪ ،Class View‬روی ‪ DepartmentStore1‬دوبار کلیک کنید تا بزرگ شود‪.‬‬

‫‪ .1‬در قسمت باالیی بدنه ی اصلی پنجره ی ‪ ،Class View‬روی ‪ StoreItem‬راست کلیک کرده‪ ،‬سپس گزینه ی ‪ Go To Definition‬را انتخاب‬

‫کنید‪.‬‬

‫‪ .4‬کلید ‪ Home‬را زده‪ public ،‬را تایپ کنید و پس از آن دکمه ی ‪ space‬را فشار دهید‪ .‬فایل پیش رو به صورت زیر تغییر داده می شود‪.‬‬

‫‪public class StoreItem‬‬


‫{‬
‫}‬

‫زباله روبی (‪)garbage collection‬‬

‫زمانی که متغیری را به کمک کلیدواژه ی ‪ new‬تعریف می کنید‪ ،‬در واقع دارید بخشی از حافظه ی ‪ heap‬را به آن اختصاص می دهید (برای آن‬

‫رزرو می کنید)‪ .‬زمانی که به آن متغیر دیگر نیازی نیست‪ ،‬مثل زمانی که برنامه بسته می شود‪ ،‬متغیر گفته شده پاک شده و حافظه ی‬

‫اختصاص یافته به آن باید در اختیار متغیرها یا برنامه های دیگر قرار گیرد‪ .‬به این فرایند زباله روبی یا ‪ garbage collection‬می گویند‪ .‬در‬

‫زبان های برنامه نویسی ‪ ،C/C++‬این مسئله برای برنامه نویس یک معضل بزرگ محسوب می شد‪ ،‬زیرا که برنامه نویس باید خود به صورت‬

‫دستی چنین متغیرهایی (اشاره گر‪ )pointer/‬را پاک می کرد و حافظه را آزاد می ساخت‪.‬‬

‫چهارچوب کاری ‪ NET Framework.‬مسئله ی زوباله روبی را حل کرده و حافظه را خودکار از متغیرهای بالاستفاده رها می سازد‪.‬‬

‫فیلدهای کالس‬

‫کالسی با اسم ‪ House‬را در نظر بگیرید‪.‬‬

‫‪public class House‬‬


‫{‬
‫}‬
‫به بخشی که محصور در عالمت {} است‪ ،‬بدنه ی یک کالس گفته می شود‪ .‬در بدنه ی کالس اجزای تشکیل دهنده ی کالس قرار می گیرند‪.‬‬

‫این اجزا در واقع تحت عنوان متغیرهای عضو یا ‪ member variable‬های یک کالس تعریف می شوند‪ .‬در زبان ‪ C#‬متغیری که در بدنه ی‬

‫کالس ایجاد می شود‪ ،‬فیلد اطالق می گردد‪ .‬هر فیلد مثل متغیرهای معمول دیگر‪ ،‬با یک اسم و نوع داده تعریف می شود‪.‬‬
‫‪195‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫برای مثال‪ ،‬زیر اجزای تشکیل دهنده ی یک خانه به عنوان اعضای تشکیل دهنده یک کالس (که هریک خود به مثابه ی یک متغیر تعریف‬

‫شده) تعریف شده اند‪.‬‬

‫‪public class House‬‬


‫{‬
‫;‪string propertyNumber‬‬
‫;‪char propertyType‬‬
‫;‪byte stories‬‬
‫;‪uint bedrooms‬‬
‫;‪decimal value‬‬
‫}‬

‫برای این که نشان دهید متغیری (فیلدی از نوع اولیه) قادر است مقداری تهی (‪ )null value‬داشته باشد‪ ،‬کافی است عالمت سوال به آن‬

‫اضافه کنید‪.‬‬

‫‪public class House‬‬


‫{‬
‫;‪string propertyNumber‬‬
‫;‪char? propertyType‬‬
‫;‪byte? stories‬‬
‫;‪uint? bedrooms‬‬
‫;‪decimal? value‬‬
‫}‬
‫پس از افزودن ؟‪ ،‬ملزم به رعایت قوانین خاصی می شوید‪.‬‬

‫متغیرهای تعریف شده در بدنه ی یک کالس متغیرهای عضو (‪ )member variable‬خوانده می شوند و هر متغیر عضو سرانجام یک فلید تلقی‬

‫می گردد‪ .‬فیلدها ی یک کالس ممکن از هر نوع داده که تا کنون معرفی شده تشکیل شده باشد‪.‬‬

‫توجه‬

‫از این بخش به بعد‪ ،‬برای اشاره به فیلد متعلق به یک کالس می نویسیم‪.‬‬

‫‪ClassName.FieldName‬‬

‫به عبارتی ساده تر‪ FieldName ،‬فیلدی است که عضو کالس ‪ ClassName‬می باشد‪.‬‬

‫افزودن فیلد به کالس‬

‫کالس ‪ StoreItem‬را به این ترتیب اصالح کنید‪.‬‬


‫‪196‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪public class StoreItem‬‬
‫{‬
‫;‪long itemNumber‬‬
‫;‪string itemName‬‬
‫;‪string size‬‬
‫;‪decimal unitPrice‬‬
‫}‬

‫سطح دسترسی اعضای کالس )‪(access modifiers of a class‬‬

‫اعضای خصوصی یک کالس‬

‫بخش های یک شئ به دو دسته ی اصلی تقسیم می شوند ‪ :‬آن دسته ای که به آن دسترسی دارید و آن دسته ای که دسترسی به آن ها برای‬

‫شما مقدورنمی باشد‪ .‬برای مثال‪ ،‬ماشینی که در خیابان پارک شده را می توان دید‪ ،‬آن را لمس کرد ولی موتور آن برای شما قابل رویت و‬

‫دسترسی نیست‪ .‬به اجزایی از کالس که در دسترس عموم قرار دارند ‪ public‬گفته می شود‪.‬‬

‫اعضای عمومی یک کالس‬

‫بخش هایی از کالس که از دید و دسترسی عموم پنهان است ‪ private‬تلقی می گردد‪ .‬در زبان ‪ C#‬برخی اعضای کالس در اختیار دیگر کالس‬

‫ها قرار می گیرند و در عین حال برخی دیگر اعضای کالس از دید و دسترس کالس های دیگر پنهان می شوند‪ .‬برای محدود کردن سطح‬

‫دسترسی به بخش یا عضوی از کالس که باید مخفی یا خصوصی باقی بماند از کلید واژه ی ‪ private‬استفاده می شود‪ .‬حال‪ ،‬برای در دسترس‬

‫قرار دادن آن بخش از کالس که خصوصی محسوب نمی شود‪ ،‬باید متغیر را با کلید واژه ی ‪ public‬تعریف کرد‪ .‬به کلید واژه های ‪ public‬و‬

‫‪ private‬سطح دسترسی (‪ )access level‬نیز گفته می شود‪.‬‬

‫به صورت پیش فرض‪ ،‬تمامی متغیر های عضوی که تعریف می کنید ولی سطح دسترسی آن را مشخص نمی کنید‪ private ،‬محسوب می شوند و‬

‫بدین ترتیب برای غیراعضای یک کالس قابل دسترسی نمی باشد‪ .‬به این خاطر چنانچه می خواهید عضوی را برای غیراعضای یک کالس قابل‬

‫دسترس کنید‪ ،‬باید آن را با کلید واژه ی ‪ puplic‬تعریف کنید‪ .‬می توان ترکیبی از اعضای خصوصی و عمومی در کالس خود ایجاد کرد و هیچ‬

‫قانون خاصی مبنی بر این که کدام اول باید فهرست شود و کدام آخر وجود ندارد‪.‬‬

‫مثال‬

‫‪public class House‬‬


‫{‬
‫;‪string propertyNumber‬‬
‫;‪public char propertyType‬‬

‫‪197‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫;‪byte stories‬‬
‫;‪public uint bedrooms‬‬
‫;‪private decimal value‬‬
‫}‬
‫فقط به خاطر داشته باشید که در صورت تعیین نکردن سطح دسترسی‪ ،‬عضو کالس تعریف شده خودکار خصوصی یا ‪ private‬می شود‪ .‬برای‬

‫جلوگیری از بروز هر نوع خطا‪ ،‬حتماً توصیه می شود سطح دسترسی عضو کالس را مشخص کنید‪.‬‬

‫‪public class House‬‬


‫{‬
‫;‪public string propertyNumber‬‬
‫;‪public char propertyType‬‬
‫;‪public byte stories‬‬
‫;‪public uint bedrooms‬‬
‫;‪public decimal value‬‬
‫}‬

‫تعیین سطح دسترسی به اعضای کالس‬

‫کالس ‪ storeitems‬را به صورت زیر اصالح کنید‪.‬‬

‫‪public class StoreItem‬‬


‫{‬
‫;‪public long itemNumber‬‬
‫;‪public string itemName‬‬
‫;‪public string size‬‬
‫;‪public decimal unitPrice‬‬
‫}‬

‫اعضای داخلی کالس‬

‫دیدیم که کلیدواژه ی ‪ public‬به اشیإی خود برنامه و برنامه های دیگر اجازه می دهد که به عضو عمومی یک کالس دسترسی پیدا کنند‪ .‬در‬

‫حالی که با استفاده از کلید واژه ‪ private‬تنها به اعضای خود آن کالس اجازه ی دسترسی به اعضای خصوصی را فراهم می کردیم‪ .‬چنانچه مایل‬

‫هستید عضوی ایجاد کنید که تنها برای اعضا و اشیإ خود آن کالس قابل دسترسی باشد‪ ،‬الزم است آن را با کلید واژه ی ‪ internal‬عالمت‬

‫گذاری کنید‪ .‬تفاوت بین این کلید واژه ها در زیر شرح داده شده‪.‬‬

‫چنانچه کالسی با کلیدواژه های زیر عالمت گذاری یا‬

‫تعریف شده باشد ‪:‬‬

‫‪198‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪public‬‬ ‫‪internal‬‬ ‫‪private‬‬

‫فقط دیگر اعضای همین کالس می توانند به این عضو‬ ‫بله‬ ‫بله‬ ‫بله‬

‫دسترسی پیدا کنند‬

‫تمام اعضای این برنامه‪ ،‬حتی اعضای خارج از این کالس‪،‬‬ ‫بله‬ ‫بله‬ ‫خیر‬

‫به این عضو دسترسی دارند‬

‫اشیا خارج از این برنامه می توانند به این عضو‬ ‫بله‬ ‫خیر‬ ‫خیر‬

‫دسترسی پیدا کنند‬

‫مقدار دهی اولیه ی شی‬

‫عملگر نقطه (‪).‬‬

‫به منظور دستیابی به عضوی از کالس از طریق کالسی دیگر‪ ،‬ابتدا باید متغیری از آن کالس را تعریف کنید‪ .‬اکنون‪ ،‬برای دسترسی به عضو‬

‫موردنظر از عملگر "‪ ".‬استفاده کنید‪.‬‬

‫پس از تعریف نمونه ای از کالس‪ ،‬می توان به اعضای کالس نام برده دسترسی داشت و به آن ها مقادیر دلخواه را تخصیص داد‪ .‬به مثال زیر‬

‫توجه کنید‪.‬‬

‫‪public class House‬‬


‫{‬
‫;‪internal long propertyNumber‬‬
‫;‪internal string propertyType‬‬
‫;‪internal uint bedrooms‬‬
‫;‪internal double value‬‬
‫}‬

‫‪public class Exercise‬‬


‫{‬
‫)(‪static void Main‬‬
‫{‬
‫;)(‪var property = new House‬‬
‫;‪property.propertyNumber = 283795‬‬

‫‪199‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
property.propertyType = "Single Family";
property.bedrooms = 4;
property.value = 652880;
}
}

.‫) می توانند عالمت سوال داشته باشند‬primitive types( ‫به خاطر دارید که داده های نوع اولیه‬

public class House


{
internal long? propertyNumber;
internal string propertyType;
internal uint? bedrooms;
internal double? value;
}
public class Exercise
{
static void Main()
{
var property = new House();
property.propertyNumber = 283795;
property.propertyType = "Single Family";
property.bedrooms = 4;
property.value = 652880;
}
}

.‫ سپس مقدار آن را بازیابی کرد‬،‫" به آن دسترسی پیدا کرده‬." ‫ می توان با به کار بردن عملگر‬،‫پس از مقدار دهی اولیه ی فیلد یک کالس‬

public class House


{
internal long? propertyNumber;
internal string propertyType;
internal uint? bedrooms;
internal double? value;
}
public class Exercise
{
static void Main()
{
var property = new House();
property.propertyNumber = 283795;
property.propertyType = "Single Family";
property.bedrooms = 4;
property.value = 652880;
System.Console.WriteLine("=//= Altair Realtors =//=");
System.Console.WriteLine("Properties Inventory"); ;
200
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
System.Console.Write("Property #: ");
System.Console.WriteLine(property.propertyNumber);
System.Console.Write("Property Type: ");
System.Console.WriteLine(property.propertyType);
System.Console.Write("Bedrooms: ");
System.Console.WriteLine(property.bedrooms);
System.Console.Write("Market Value: ");
System.Console.WriteLine(property.value);
System.Console.ReadKey();
}
}

.‫نتیجه ی زیر را به دست می دهد‬

=//= Altair Realtors =//=


Properties Inventory
Property #: 283795
Property Type: Single Family
Bedrooms: 4
Market Value: 652880
Press any key to continue...

‫به کاربردن فیلدهای یک کالس‬

.‫ کلیک کرده تا به فایل دسترسی پیدا کنید‬DepartmentStore.cs ‫ روی‬،Code Editor ‫ در باالترین قسمت‬.8

.‫ فایل باال را بدین ترتیب اصالح کنید‬.2

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

‫‪ .1‬حال‪ ،‬کادر پیغام )‪ )message box‬را ببندید‪.‬‬

‫به کاربردن نوع ناشناس‬

‫همان طور که پیش تر ذکر شد‪ ،‬برای به کاربردن کالس ابتدا باید متغیری برای آن تعریف کرده‪ ،‬سپس آن را مقدار دهی اولیه کنید‪.‬‬

‫خوشبختانه به منظور مقدار دهی اولیه یک شی‪ ،‬نیازی به استفاده از کالس نیست‪ .‬می توان متغیری مشابه نمونه ی کالس تعریف کرده‪ ،‬بعد‬

‫آن را به صورت دلخواه مقدار دهی اولیه کرد‪ .‬از این نوع با نام ‪ ( anonymous type‬یا نوع ناشناس) یاد می شود‪ .‬به منظور استفاده از آن‬

‫کافی است متغیر مورد نظر را با کلید واژه ی ‪ var‬تعریف کرده و به منظور تخصیص حافظه به آن از عملگر ‪ new‬استفاده کنید‪ .‬به جای استفاده‬

‫از اسم کالس‪ ،‬ابتدا عالمت {} را درج کرده‪ ،‬سپس عملگر ‪ new‬را تایپ کنید‪ .‬حال در {} اسمی برای تک تک اعضا انتخاب کرده‪ ،‬گویی دارید‬

‫اسم عضو های کالس را تعریف می کنید‪ ،‬سپس هر متغیر عضو را با ‪ value‬های دلخواه مقدار دهی اولیه کنید‪ .‬پس از عالمت {}‪ ،‬تعریف را با‬

‫(;) به پایان برسانید‪.‬‬

‫مثال‬

‫‪public class Exercise‬‬


‫{‬
‫)(‪static void Main‬‬
‫{‬
‫‪var BookInformation = new‬‬
‫{‬
‫‪Title = "Calculus 6e Edition",‬‬
‫‪Pages = 1074,‬‬
‫"‪Cover = "Hard Back‬‬
‫;}‬
‫}‬

‫‪202‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
}
‫ به تک تک اعضای آن‬،‫ متغیر عضو‬،‫ عملگر نقطه‬،‫ می توان با تایپ کردن به ترتیب اسم متغیر‬،‫پس از مقدار دهی اولیه ی نوع ناشناس‬

.‫دسترسی پیدا کرد‬

‫مثال‬

public class Exercise


{
static void Main()
{
var BookInformation = new
{
Title = "Calculus 6e Edition",
Pages = 1074,
Cover = "Hard Back"
};
System.Console.WriteLine("=//= BookInformation =//=");
System.Console.Write("Title: ");
System.Console.WriteLine(BookInformation.Title);
System.Console.Write("Nbr of Pages: ");
System.Console.WriteLine(BookInformation.Pages);
System.Console.Write("Type of Cover: ");
System.Console.WriteLine(BookInformation.Cover);
}
}
.‫نتیجه ی زیر حاصل می گردد‬

=//= BookInformation =//=


Title: Calculus 6e Edition
Nbr of Pages: 1074
Type of Cover: Hard Back
Press any key to continue...

‫ می توان تمامی جزئیات را در خطی یکسان قرار‬.‫به خاطر داشته باشید که قرار دادن تعریف در خط های متعدد فقط خواندن آن را سهل می کند‬

.‫داد‬

public class Exercise


{
static void Main()
{
var book = new { Title = "Calculus 6e Edition", Pages = 1074 };
System.Console.WriteLine("=//= BookInformation =//=");

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 .‬سمت راست‪ ،‬اعضای انتخابی کالس از‬

‫‪ Combo box‬سمت چپ را به نمایش می گذارد‪.‬‬

‫‪204‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫نحوه ی دسترسی به فیلد‬

‫از راه های مختلفی می توان به فیلد دسترسی پیدا کرد از جمله‬

‫فایل دربردارنده ی کالس را باز کنید‪ .‬همان طور که مشاهده می کنید‪ ،‬فیلد در فایل بیان شده قابل رویت می باشد‬

‫فایل حاوی کالس را باز کنید‪ .‬به ‪ main menu‬مراجعه کرده‪ ،‬گزینه های ‪ Edit -> Quick Find‬را انتخاب کنید‪ .‬اسم فیلد مورد نظر را‬

‫تایپ کرده‪ ،‬روی ‪ Find Next‬کلیک کنید‪ .‬الزم به ذکر است که در این روش‪ ،‬باید اسم دقیق فیلد مورد نظر را از قبل داشته باشید‪.‬‬

‫در قسمت باالیی بدنه ی پنجره ی ‪ ،Class View‬روی اسم کالس حاوی فیلد کلیک کنید‪ .‬لیست اعضای آن در قسمت پایینی بدنه ی‬

‫پنجره نمایان می شود‪ .‬اکنون می توانید روی آن دوبار کلیک کنید‪.‬‬

‫در بخش فوقانی بدنه ی ‪ ،Class View‬روی اسم کالس حامل فیلد کلیک کنید‪ .‬در قسمت پایینی ‪ ،Class View‬روی اسم فیلد راست‬

‫کلیک کرده‪ ،‬سپس گزینه ی ‪ Go To Definition‬را کلیک کنید‪.‬‬

‫تغییر اسم فیلد‬

‫می توان اسم فیلد را باب میل تغییر داد‪ .‬کافی است فیلد را در فایل مورد نظر پیدا کرده و با دانش خود از ویرایش متن (‪)text editing‬‬

‫نام فیلد را اصالح کرد‪ .‬سرانجام‪ ،‬می توانید پس از باز کردن فایل حاوی کالس‪ ،‬در ‪ main menu‬روی ‪ Edit -> Quick Replace‬کلیک‬

‫کنید‪ ،‬اسم فیلد را تایپ کرده‪ ،‬سپس ‪ Find Next‬یا ‪ Replace‬را انتخاب کنید‪ .‬این روش برای بازدید کردن از تمام بخش هایی که فیلد‬

‫در آن به کار رفته بسیار کارامد است‪.‬‬

‫‪205‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫محیط برنامه نویسی ‪ visual studio‬برای این امر بسیار مناسب است‪.‬‬

‫به منظور تغییر اسم در محیط ‪visual studio‬‬

‫فایل حاوی کالس را باز کنید‪ .‬یا کلیدهای ‪ Ctrl + H‬را با هم بزنید‪ ،‬و یا در ‪ main menu‬روی گزینه ی ‪ Quick Replace‬کلیک کنید‪ .‬حال‪،‬‬

‫در قسمت ‪ ،Find What‬اسم فیلد را وارد کرده و ‪ Replace All‬را انتخاب کنید‪.‬‬

‫فایل حامل کالس را باز کنید‪ .‬روی فیلد مورد نظر کلیک کنید تا عالمت ^ (‪ )caret‬در آن قرار داده شود‪ .‬کلیدهای ‪ Ctrl + H‬را بزنید و یا‬

‫در ‪ Quick Replace ،main menu‬را کلیک کنید‪ combo box .‬ای به نام ‪ Find What‬ظاهر می شود که در آن فیلد انتخابی را وارد‬

‫کرده‪ ،‬سپس روی دکمه ی ‪ Replace All‬کلیک کنید‪.‬‬

‫در سمت باالیی پنجره ی ‪ ،Class View‬باید روی اسم کالس کلیک کنید‪ .‬در قسمت پایینی پنجره‪ ،‬روی فیلد راست کلیک کرده سپس‬

‫‪ Rename‬را انتخاب کنید‪ ...‬حال‪ ،‬در کادر متن ‪ New Name‬اسم دلخواه فیلد را درج کنید‪ .‬برای تنظیم و تغییر اسم در بخش‬

‫‪ comment‬ها و ‪ string‬ها‪ ،‬باید به ‪ checkbox‬ها مراجعه کرد‪ .‬پس از انجام دستورات باال‪ ،‬روی ‪ ok‬کلیک کنید‪ .‬در پنجره ی محاوره‬

‫‪ ،Preview Changes – Rename‬فهرستی از تمامی بخش هایی که فیلد در آن به کار رفته نمایان می باشد‪ .‬اکنون گزینه ‪ Apply‬را‬

‫انتخاب کنید‪.‬‬

‫مبانی متدها‬

‫فیلدها در واقع وظیفه ی توصیف کالس را بر عهده دارند‪ .‬برای مثال‪ ،‬کالسی به نام ‪ House‬توسط جنبه هایی همچون تعداد اتاق های‬

‫خواب (‪ ،)bedrooms‬نوع ملک (‪ )property type‬و ارزش (‪ )value‬آن توصیف می شود‪.‬‬

‫‪public class House‬‬


‫{‬
‫;‪public char propertyType‬‬
‫;‪public uint bedrooms‬‬
‫}‬
‫عالوه بر این‪ ،‬شی می تو اند عملیاتی و یا انتسابی معین انجام دهد‪ .‬عملیاتی که یک کالس برای شما انجام می دهد‪ function ،‬یا ‪method‬‬

‫خوانده می شود‪ .‬متد اساساً بخشی از کد است‪ ،‬که در راستای قابلیت ها و کاربرد کالس‪ ،‬یکی از جزئیات عملیات را ایفا می کند‪.‬‬

‫معرفی متدها‬

‫‪ Microsoft Visual Studio .8‬را راه اندازی کنید‪.‬‬

‫‪206‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
.‫ انتخاب کنید‬Project File -> New ‫ مراجعه کرده و گزینه های‬main menu ‫ به‬،‫ برای ایجاد برنامه ی کاربردی جدید‬.2

.‫ را از لیست میانی انتخاب کنید‬Empty Project ‫ گزینه ی‬.1

.‫ را کلیک کنید‬ok ‫ سپس‬،‫ تغییر داده‬DepartmentStore2 ‫ اسم را به‬.4

.‫ را انتخاب کنید‬Project -> Add New Item... ‫ گزینه های‬main menu ‫ در‬.5

.‫ را انتخاب کنید‬Code File ‫ گزینه ی‬،Add New Item ‫ در فهرست میانی پنجره ی محاوره ی‬.2

.‫ را کلیک کنید‬Add ‫ بعد‬،‫ تغییر داده‬StoreItem ‫ اسم مورد نظر را به‬.4

.‫ در فایل پیش رو دستورات زیر را تایپ کنید‬.1

public class StoreItem


{
public long itemNumber;
public string itemName;
public string size;
public decimal unitPrice;
}
.‫ راست کلیک کنید‬DepartmentStore2 -> Add -> New Item... ‫ روی‬،Solution Explorer ‫ در‬،code file ‫ به منظور ایجاد‬.1

.‫ را کلیک کنید‬Code File ،Add New Item ‫ در لیست میانی پنجره ی محاوره‬.82

.‫ کلیک کنید‬Add ‫ تغییر داده و روی‬DepartmentStore ‫ اسم را به‬.88

.‫ عبارات زیر را تایپ کنید‬،‫ در فایل خالی که در اختیارتان قرار می گیرد‬.82

public 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);

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‬برای مشاهده ی نتیجه برنامه را اجرا کنید‪.‬‬

‫‪ .84‬پنجره ی ‪ DOS‬را بسته و به محیط برنامه نویسی بازگردید‪.‬‬

‫ساختن متد‬

‫برای ایجاد یک متد باید ابتدا اسم آن را مشخص کنید‪ .‬فرایند تعریف اسم متد نیز از همان قوانینی که برای انتخاب اسم متغیرها تشریح‬

‫کردیم پیروی می کند ‪ .‬در این مبحث‪ ،‬همان پیشنهاداتی را که برای گزینش اسم کالس ارائه کردیم‪ ،‬برای انتخاب اسم متد نیز به کار می بریم‪.‬‬

‫چنانچه اسم متد در یک کلمه خالصه شده باشد‪ ،‬فقط حرف اول را با حروف بزرگ می نویسیم‪.‬‬

‫در صورتی که اسم متد متشکل از چند کلمه باشد‪ ،‬حروف اول تمام کلمات با حرف بزرگ نمایش داده می شود‪.‬‬

‫به این خاطر که متد یک عملیات محسوب می شود‪ ،‬سرانجام باید آن را یک فعل نام گذاشت به دنبال اسم متد پرانتز می آید‪.‬‬

‫یکی از کارهای متد تخصیص دادن یک مقدار معین در برنامه است‪ .‬بدین ترتیب پس از این کار‪ ،‬متد می تواند مقداری را فراهم کند‪ .‬در‬

‫نتیجه‪ ،‬متد نتیجه را بر می گرداند‪ .‬چنانچه نتیجه ای از متد نام برده حاصل نشد‪ ،‬به آن ‪ void‬می گویند‪ .‬نوعی (‪ )type‬که متد ارائه می دهد‬

‫(یا باز می گرداند)‪ ،‬در سمت چپ اسم متد درج می شود‪ .‬چنانچه متد نتیجه ای دربر نداشت‪ ،‬در سمت چپ آن ‪ void‬تایپ کنید‪ .‬عملیات‬

‫تخصیص که متد نقل می کند‪ ،‬داخل {} محصور می شود‪.‬‬

‫نمونه‬

‫‪public class House‬‬


‫{‬
‫;‪public char propertyType‬‬
‫;‪public uint bedrooms‬‬
‫)(‪void Display‬‬
‫{‬
‫}‬
‫}‬
‫پرکاربرد ترین متد زبان برنامه نویسی ‪ ،C#‬متد ‪ Main‬نامیده می شود‪.‬‬
‫‪208‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫توجه ‪ :‬از این بخش به بعد‪ ،‬برای اشاره به متدی که متعلق به یک کالس است از ‪ ClassName.MethodName‬استفاده می کنیم‪.‬‬

‫سطح دسترسی متد‬

‫درست مانند متغیر عضو اگر قرار است متد تنها برای اعضای خود آن کالس قابل دسترسی باشد‪ ،‬متد گفته شده را با کلید واژه ی ‪private‬‬

‫عالمت گذاری کنید (یا می توان هیچ گونه تنظیم کننده ی دسترسی ‪ acces modifier /‬خاصی لحاظ نکرد)‪.‬‬

‫به منظور این که متد برای تمامی اعضای کالس و دیگر بخش های همین برنامه (نه خارج از این برنامه) قابل دسترسی باشد‪ ،‬آن را با کلید واژه‬

‫ی ‪ internal‬تعریف کنید‪.‬‬

‫چنانچه مایل ه ستید متدی برای تمامی اعضای این کالس‪ ،‬دیگر بخش های همین برنامه و اجزای برنامه های دیگر قابل دستیابی باشد‪ ،‬کافی‬

‫است متد بیان شده را با کلید واژه ی ‪ public‬تعریف کنید‪.‬‬

‫پس از ایجاد متد‪ ،‬می توان به تعریف کارکرد آن (در بدنه ی متد‪ ،‬داخل عالمت {}) پرداخت‪ .‬برای مثال‪ ،‬می توان متغیر های عضو را داخل‬

‫پرانتزهای )(‪ System.Console.Write‬یا )(‪ System.Console.WriteLine‬نوشت‪ .‬به مثال های زیر توجه کنید‪.‬‬

‫‪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‬‬
‫}‬
‫}‬
‫می توانید هر تعداد متد که الزم است‪ ،‬به همین ترتیب ایجاد کنید‪.‬‬

‫فراخوانی متد‬

‫پس از ساختن متد‪ ،‬می توان از داخل یا خارج کالس به آن دسترسی پیدا کرد‪ .‬فراخوانی یک متد‪ ،‬در واقع همان دسترسی پیدا کردن به متد‬

‫است‪ .‬برای این منظور‪ ،‬از عملگر نقطه کمک گرفته می شود‪ .‬بر خالف فیلد‪ ،‬الزم است به دنبال اسم کالس پرانتز گذاشته شود‪ .‬نمونه ی آن را‬

‫در مثال زیر مشاهده می کنید‪.‬‬

‫‪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();
}
}

.‫نتیجه ی زیر به دست می آید‬

=//= Altair Realtors =//=


Properties Inventory
Property Type: S
Bedrooms: 4
Press any key to continue...

‫نحوه ی ایجاد متدهای یک کالس‬

.‫ فایل مورد نظر باز می شود‬.‫ را انتخاب کنید‬Window -> StoreItem.cs ‫ گزینه های‬،main menu ‫ در‬.8

.‫ فایل را به صورت زیر اصالح کنید‬،‫ برای افزودن متد به کالس‬.2

public class StoreItem


{
public long itemNumber;
public string itemName;

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

: ‫ فایل مورد نظر را به صورت زیر تغییر دهید‬.4

public class DepartmentStore


{
static void Main()
{
StoreItem si = new StoreItem();
si.CreateItem();
si.Describe();
System.Console.ReadKey();
}
}

.‫ نتیجه ی زیر حاصل می گردد‬.‫ برنامه را اجرا کنید‬،‫اکنون‬

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‬یا بی مقدار باشد و سرانجام باید مقداری را بازگرداند‪ .‬برای تعریف متدی که مقدار باز می گرداند‪ ،‬باید نوع بازگشتی‬

‫(‪ )return type‬را در سمت چپ اسم متد قرار داد‪.‬‬

‫مثال‬

‫‪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;
}
}

‫بازگرداندن یک مقدار از متد‬

.‫ کلیک کنید‬Window -> StoreItem.cs ‫ روی‬،‫ در فهرست گزینه ی اصلی‬.8

.‫ فایل را به صورت زیر اصالح کنید‬.2

public class StoreItem


{
public long itemNumber;
public string itemName;
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 decimal CalculateTotalValue()
{

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

.‫ را بسته و به محیط برنامه نویسی خود بازگردید‬DOS ‫ پنجره ی‬.4

‫ یک برنامه ی کاربردی‬Main() ‫مقدمه ای بر تابع‬

‫ و به صورت پیش فرض‬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‬دوبار کلیک کنید‪.‬‬

‫بازگرداندن مقداری از تابع )(‪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‬برنامه را اجرا کرده تا نتیجه ی آن را ببینید‪.‬‬

‫‪ .1‬پنجره ی ‪ DOS‬را بسته و به محیط برنامه نویسی بازگردید‪.‬‬

‫مبانی آرگومان های متد‬

‫متد تکلیفی را انجام می دهد که تکمیل کننده ی عملیات یک کالس است‪ .‬متدهایی که در بخش های پیشین به کار بردیم‪ ،‬برای تبادل‬

‫اطالعات بین بخش های مختلف برنامه به متغیرهای محلی تکیه می کردند‪ .‬گاهی اوقات یک متد برای تکمیل عملیات کالس به چند مقدار نیاز‬

‫دارد‪ .‬خصوصیت برجسته ای که مقادیر ذکر شده دارند این است که‪ ،‬متد دیگری که این متد را فرا می خواند باید مقدارهای الزم آن را تامین‬

‫کند‪ .‬به مقداری که متد برای تکمیل وظیفه محوله به آن نیاز دارد‪ ،‬آرگومان گفته می شود‪.‬‬

‫درست مشابه متغیر‪ ،‬یک آرگومان با نوع مقدارش تعریف و نمایش داده می شود‪ .‬برای مثال‪ ،‬متدی ممکن است به کاراکتر نیاز داشته باشد‪،‬‬

‫در حالی که متدی دیگر به یک رشته نیاز دارد‪ .‬حتی ممکن است متغیر دیگری به عدد اعشاری (‪ )decimal number‬نیاز داشته باشد‪ .‬به‬

‫عبارت دیگر‪ ،‬متد یا کالسی که متد دیگری را فرا می خواند‪ ،‬مسئول تامین مقدارهای مناسب و مورد نیاز است (البته یک متد ممکن است خود‬

‫مکانیزم داخلی برای اعتبار سنجی چنین مقداری داشته باشد)‪.‬‬

‫مقداری که برای متدی فراهم می شود‪ ،‬داخل پرانتزهای متد تایپ می شود‪ .‬یک متد باید نوع مقداری که به آن نیاز دارد را مشخص کند‪ ،‬به‬

‫همین خاطر آرگومان مورد نظر با نوع داده ی معین و یک اسم نمایش داده می شود‪.‬‬

‫تصور کنید که می خواهیم متدی تعریف کنیم که طول ضلع یک مربع را نمایش دهد‪ .‬چنین متدی به صورت زیر تعریف می شود‪.‬‬
‫‪class Exercise‬‬
‫{‬
‫)‪void ShowCharacter(char c‬‬

‫‪216‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫{‬
‫}‬
‫}‬

‫در صورتی که نوع داده ی آرگومان از نوع اولیه بود‪ ،‬برای این که نشان دهیم نوع داده ی مزبور می تواند مقدار تهی (‪ )null value‬داشته‬

‫باشد‪ ،‬به آن عالمت سوأل اضافه می کنیم‪ .‬نمونه ی آن را در زیر مشاهده می کنید ‪:‬‬
‫‪class Exercise‬‬
‫{‬
‫)‪void ShowCharacter(char? c‬‬
‫{‬
‫}‬
‫}‬

‫می توان در بدنه ی یک متد مقدار آرگومان را لحاظ کرد (هم چنین می توان مقدار آرگومان را در بدنه ی متد به کار نبرد)‪ .‬مثال زیر مقدار‬

‫آرگومان را در بدنه ی متد نمایش می دهد‪.‬‬


‫‪class Exercise‬‬
‫{‬
‫)‪void ShowCharacter(char c‬‬
‫{‬
‫;)‪System.Console.WriteLine(c‬‬
‫}‬
‫}‬

‫نمونه ی زیر نیز معتبر و صحیح است‪.‬‬


‫‪class Exercise‬‬
‫{‬
‫)‪void ShowCharacter(char? c‬‬
‫{‬
‫;)‪System.Console.WriteLine(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‬‬
‫}‬
‫}‬

‫‪ .2‬اکنون برنامه را اجرا کنید‪ .‬نتیجه ی زیر حاصل می گردد‪.‬‬


‫‪Department Store‬‬
‫‪Item #:‬‬ ‫‪911792‬‬
‫‪Item Name: Petite Tropical Wool Pencil Skirt‬‬
‫‪Item Size: 12‬‬
‫‪Unit Price: 110.00‬‬
‫‪Quantity: 6‬‬
‫‪Total Value: 660.00‬‬
‫‪ .1‬پنجره ی ‪ DOS‬را بسته و به محیط برنامه نویسی بازگردید‪.‬‬

‫ارسال چندین آرگومان به یک متد‬

‫یک متد می تواند آرگو مان های متعدد داشته باشد‪ .‬البته‪ ،‬برای تک تک آرگومان ها باید یک اسم و نوع داده در نظر گرفته شود‪ .‬آرگومان ها‬

‫با ویرگول (‪ )،‬از هم جدا می شوند‪ .‬به مثال زیر توجه کنید‪.‬‬

‫‪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‬‬
‫ می توان‬،‫ دیدیم که هنگام فراخوانی متدی که آرگومان می گیرد‬.‫راه های مختلفی برای فراخوانی متدی که آرگومان می گیرد وجود دارد‬

‫ کافی است مقدار مربوط را در‬،‫ هنگام فراخوانی متدی که چندین آرگومان می گیرد‬،‫ به همین ترتیب هم‬.‫مقداری در پرانتزهای متد تایپ کرد‬

placeholder.‫ مثال های آن را زیر مشاهده می کنید‬.‫آن آرگومان تایپ کنید‬


class Exercise
{
void ShowEmployee(long employeeNumber, string fullName,
char gender, double hourlySalary)
{
System.Console.WriteLine("Employee Record");
System.Console.WriteLine("-----------------------------");
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);
}
static int Main()
{
Exercise exo = new Exercise();
exo.ShowEmployee(572948, "Andrew Bridges", 'M', 22.85D);
return 0;
}
}
.‫این نتیجه را به دست می دهد‬

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‬باید (هنگام فراخوانی متدی که چندین آرگومان دارد) مقداری معتبر‬

‫ارائه دهد‪ .‬به این روش از ارائه ی مقدار برای آرگومان‪ ،‬روش ارسال آرگومان با استفاده از مقدار گفته می شود‪.‬‬

‫نحوه ی ارسال آرگومان با استفاده از مقدار‬

‫‪ Microsoft Visual Studio‬را اجرا کنید‪.‬‬ ‫‪.8‬‬

‫برای ایجاد برنامه ی کاربردی جدید‪ ،‬به فهرست اصلی مراجعه کرده و گزینه های ‪ File -> New Project...‬را کلیک کنید‪.‬‬ ‫‪.2‬‬
‫‪224‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
.‫ را از لیست میانی انتخاب کنید‬Empty Project .1

.‫ را فشار دهید‬Enter ‫ سپس کلید‬،‫ تغییر داده‬NationalBank1 ‫اسم را به‬ .4

NationalBank1 -> Add : ‫ راست کلیک کرده و طبق دستور زیر به پیش بروید‬،Solution Explorer ‫ در‬،‫به منظور ایجاد فایل جدید‬ .5

.-> New Item...

.‫ کلیک کنید‬Code File ‫در لیست میانی روی‬ .6

.‫ تغییر دهید‬Management ‫اسم فایل را به‬ .4

.‫ کلیک کنید‬Add ‫روی گزینه ی‬ .1

.‫ دستورات زیر وارد کنید‬،Management.cs ‫در فایل خالی‬ .1


public class Management
{
private void ShowAccountInformation(string acntNbr, string name, short PIN, double balance)
{
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("==============================");
}
public static int Main()
{
Management man = new Management();
string accountNumber = "248-050842-749";
string customerName = "Ann Kelley";
short pin = 8648;
double currentBalance = 350.00D;
man.ShowAccountInformation(accountNumber, customerName,pin, currentBalance);
System.Console.ReadKey();
return 0;
}
}

.‫ را فشار دهید‬F5 ‫ کلید‬،‫ برای اجرای دستورات‬.82

225
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
==============================
Account Information
------------------------------
Account #: 248-050842-749
Customer Name: Ann Kelley
PIN: 8648
Balanace: 350
==============================

.‫ خارج شوید‬DOS ‫ از پنجره ی‬Enter ‫ با فشار دادن کلید‬،‫ پس از مشاهده ی نتایج‬.88

‫ارسال آرگومان با استفاده از ارجاع‬

.‫برنامه ی زیر را در نظر بگیرید‬

public class Exercise


{
void GetDeposit(decimal amount)
{
amount = 450;
System.Console.WriteLine("In GetDeposit()");
System.Console.Write("Amouont: $");
System.Console.WriteLine(amount);
}
static int Main()
{
decimal amt = 0;
var exo = new Exercise();
System.Console.WriteLine("In Main()");
System.Console.Write("Amouont: $");
System.Console.WriteLine(amt);
System.Console.WriteLine("-------------------------");
exo.GetDeposit(amt);
System.Console.WriteLine("-------------------------");
System.Console.WriteLine("Bank in Main()");
System.Console.Write("Amouont: $");
System.Console.WriteLine(amt);
return 0;
}
}

.‫نتیجه ی زیر حاصل می گردد‬

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‬را بازگرداند‪ ،‬باید ارگومان را با استفاده از‬

‫ارجاع (‪ )reference‬ارسال کنید‪.‬‬

‫حال‪ ،‬برای ارسال آرگومان با استفاده از ارجاع‪ ،‬حین تعریف متد‪ ،‬باید کلیدواژه ی ‪ ref‬را پیش از نوع داده ی آرگومان تایپ کرد‪.‬‬

‫مثال‬

‫‪public class Exercise‬‬


‫{‬
‫)‪void GetDeposit(ref decimal amount‬‬
‫{‬
‫}‬
‫}‬
‫در متد‪ ،‬می توانید آرگومان را به کار ببرید (یا آن را نادیده بگیرید و مورد استفاده قرار ندهید)‪ .‬هنگام فراخوانی متد‪ ،‬اسم آرگومان را پس از‬

‫کلیدواژه ی ‪ ref‬به کار ببرید‪ .‬به مثال زیر توجه کنید‪.‬‬

‫‪public class Exercise‬‬


‫{‬
‫‪227‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
void GetDeposit(ref decimal amount)
{
}
static int Main()
{
decimal amt = 0;
var exo = new Exercise();
System.Console.WriteLine("In Main()");
System.Console.Write("Amount: $");
System.Console.WriteLine(amt);
exo.GetDeposit(ref amt);
System.Console.WriteLine("Bank in Main()");
System.Console.Write("Amount: $");
System.Console.WriteLine(amt);
return 0;
}
}
‫نتیجه‬

In Main()
Amount: $0
Bank in Main()
Amount: $0
Press any key to continue...

‫ الزم است مقدار‬،‫ برای این منظور‬.‫ این است که به متد اجازه ی تغییر مقدار آرگومان داده شود‬،‫دلیل اصلی ارسال آرگومان به وسیله ی ارجاع‬

.‫آرگومان را در متد تغییر داد‬

‫مثال‬

public class Exercise


{
void GetDeposit(ref decimal amount)
{
amount = 450;
System.Console.WriteLine("In GetDeposit()");
System.Console.Write("Amount: $");
System.Console.WriteLine(amount);
}
static int Main()
{
decimal amt = 0;
var exo = new Exercise();

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‬با‬

‫داشتن قابلیت ارسال چندین آرگومان‪ ،‬به متد اجازه می دهد چندین مقدار بازگرداند‪.‬‬

‫نحوه ی ارسال آرگومان با استفاده از ارجاع‬

‫‪ .8‬فایل ‪ Management.cs‬را به صورت زیر اصالح کنید‪.‬‬


‫‪public class Management‬‬
‫{‬
‫)‪private void ShowAccountInformation(string acntNbr, string name, short PIN, double balance‬‬
‫{‬

‫‪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("==============================");
}

private double GetDeposit(ref double amount)


{
double deposit = 225.55;
amount = amount + deposit;
return deposit;
}
private double GetWithdrawal(ref double amount)
{
double withdrawal = 265.25d;
amount = amount - withdrawal;
return withdrawal;
}
public static int Main()
{
Management man = new Management();
string accountNumber = "248-050842-749";
string customerName = "Ann Kelley";
short pin = 8648;
double currentBalance = 350.00D;
double? depositAmount = null;
double? withdrawalAmount = null;
man.ShowAccountInformation(accountNumber, customerName,pin, currentBalance);
depositAmount = man.GetDeposit(ref currentBalance);
System.Console.WriteLine("After a new deposit");
man.ShowAccountInformation(accountNumber, customerName,pin, currentBalance);
withdrawalAmount = man.GetWithdrawal(ref currentBalance);
System.Console.WriteLine("After a withdrwal");
man.ShowAccountInformation(accountNumber, customerName,pin, currentBalance);
System.Console.ReadKey();
return 0;
}
}

.‫ را زده تا برنامه اجرا شود‬F5 ‫ کلید‬.2

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
==============================

.‫ بسته شود‬DOS ‫ را زده تا پنجره ی‬Enter .1

out ‫ارسال آرگومان‬

‫ داخل پرانتز متد پیش از نوع داده ی‬،out ‫ به منظور ارسال آرگومان‬.‫ می باشد‬out ‫روش دیگر ارسال آرگومان با استفاده از کلیدواژه ی‬

.‫ را تایپ می کنیم‬out ‫آرگومان کلیدواژه ی‬

‫مثال‬

public class Exercise


{
void GetWithdrawal(out decimal amount)
{
}
231
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
}
‫ آرگومان باید حتماً داخل خود متد‬،out ‫ این است که در صورت ارسال آرگومان با کلید واژه ی‬out ‫ و‬ref ‫تفاوت اصلی بین کلید واژه های‬

.‫مقداردهی اولیه شود‬

‫مثال‬

public class Exercise


{
void GetWithdrawal(out decimal amount)
{
amount = 265.00m;
}
}
.‫ به مثال زیر توجه کنید‬.‫ را پیش از آرگومان استفاده کنید‬out ‫ باید کلید واژه ی‬،‫ می گیرد‬out ‫هنگام فراخوانی متدی که آرگومان‬

public class Exercise


{
void GetDeposit(ref decimal amount)
{
amount = 450.00M;
System.Console.WriteLine("In GetDeposit()");
System.Console.Write("Amount: $");
System.Console.WriteLine(amount);
}
void GetWithdrawal(out decimal amount)
{
amount = 265.00m;
System.Console.WriteLine("In GetWithdrawal()");
System.Console.Write("Amount: $");
System.Console.WriteLine(amount);
}
static int Main()
{
decimal depositAmount = 0M;
decimal withdrawalAmount = 0M;
var exo = new Exercise();
System.Console.WriteLine("In Main()");
System.Console.Write("Amount: $");
System.Console.WriteLine(depositAmount);
System.Console.WriteLine("-------------------------");
exo.GetDeposit(ref depositAmount);
System.Console.WriteLine("-------------------------");
System.Console.WriteLine("Bank in Main()");
System.Console.Write("Amount: $");
System.Console.WriteLine(depositAmount);
System.Console.WriteLine("-------------------------");
exo.GetWithdrawal(out withdrawalAmount);
232
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
System.Console.WriteLine("-------------------------");
System.Console.WriteLine("Bank in Main()");
System.Console.Write("Amount: $");
System.Console.WriteLine(withdrawalAmount);
return 0;
}
}
.‫ نگه داشته می شوند‬،‫ تمام تغییرات وارد آمده بر آرگومان حتی پس از اتمام متد‬،‫ ارسال کنید‬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...

)method overloading( ‫سربارگذاری متد‬

.‫ را در نظر بگیرید‬CalculateArea ‫تابع زیر به نام‬

public class Geometry


{
double CalculateArea()
{
return 0D;
}
}
virtual table ‫ به لیست مزبور‬.‫ لیستی از آن متدها تهیه می کند‬compiler ،‫هنگامی که متدی در کالس ایجاد کرده و پروژه ای می سازید‬

.‫ متد با استفاده از اسمش کد گذاری می شود‬،‫ در جدول بیان شده‬.‫(جدول مجازی) می گویند‬

Method Name Encoding

233
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫‪CalculateArea‬‬ ‫‪Calculate@None‬‬

‫در صورتی که متد آرگومانی داشت‪ ،‬جدول باال نوع داده ی آرگومان را نمایش می دهد‪ .‬نوع بازگشتی متد و اسم های آرگومان ها هیچ کدام‬

‫مهم نیستند‪ .‬در صورتی که کالس دربردارنده ی متدهایی با اسامی متفاوتی بود‪ ،‬متدها به راحتی از هم قابل تشخیص خواهند بود‪ .‬گاهی‬

‫اوقات الزم است متدهای مختلفی داشته باشید که همگی یک کار مشابه را انجام می دهند ولی با تفاوت های جزئی (این دیگر بستگی به شما‬

‫دارد که این تفاوت ها چه باشند)‪ .‬یکی از گزینه های پیش رو این است که اسم متدها را یکی انتخاب کنید‪ .‬به قابلیت داشتن چندین متد با‬

‫اسم مشابه در یک کالس ‪ method overloading‬می گویند‪.‬‬

‫برای اجرای ‪ ،method overloading‬هنگام ایجاد ‪ ،virtual table‬تک تک درایه ها (‪ )entry‬در لیست نام برده باید منحصر به فرد باشند‪.‬‬

‫همان طور که پیش تر ذکر شد‪ ،‬نوع بازگشتی متد داخل جدول قرار داده نمی شود‪ ،‬در نتیجه نمی توان تفاوت ها را بر آن اساس پایه گذاری‬

‫کرد‪ .‬اگر سعی کنید دو متد ایجاد کنید که هیچ یک آرگومان نمی گیرند‪ ،‬طبیعتاً تشخیص آن دو متد از یک دیگر ممکن نخواهد بود‪ .‬راه حل‬

‫مسئله فوق این است که حداقل یکی از آن دو متد آرگومان بگیرند‪ .‬به مثال زیر توجه کنید‪.‬‬

‫‪public class Geometry‬‬


‫{‬
‫‪// Unknown Shape‬‬
‫)(‪public double CalculateArea‬‬
‫{‬
‫;‪return 0D‬‬
‫}‬
‫‪// Square‬‬
‫)‪public double CalculateArea(double side‬‬
‫{‬
‫;‪return side * side‬‬
‫}‬
‫}‬

‫‪Method Name‬‬ ‫)‪Argument(s‬‬ ‫‪Encoding‬‬

‫‪CalculateArea‬‬ ‫‪Calculate@None‬‬

‫‪CalculateArea‬‬ ‫‪Double‬‬ ‫‪Calculate@Double‬‬

‫‪234‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
.‫ مثال زیر کد باال را به کار می برد‬.‫) جداگانه ای (متفاوتی) دارد‬encoding( ‫ این بار هر متد رمزگذاری‬،‫همان طور که انتظار می رفت‬

public class Geometry


{
// Unknown Shape
public double CalculateArea()
{
return 0D;
}
// Square
public double CalculateArea(double side)
{
return side * side;
}
}
public class Exercise
{
static int Main()
{
Geometry geo = new Geometry();
System.Console.WriteLine("Geometric Shapes");
System.Console.WriteLine("Calculation of Areas");
System.Console.Write("Square: ");
System.Console.WriteLine(geo.CalculateArea(26.38));
return 0;
}
}
.‫نتیجه ی زیر به دست می آید‬

Geometric Shapes
Calculation of Areas
Square: 695.9044
Press any key to continue...

‫ نمی توان دو‬،‫ بنابراین‬.‫ محسوب نمی شود‬virtual table ‫) آن در‬encoding( ‫به خاطر داشته باشید که اسم یک آرگومان بخشی از رمزگذاری‬

.‫ کد زیر را در نظر بگیرید‬.‫متد به کاربرد که هر دو یک آرگومان یکسان داشته باشد‬

public class Geometry


{
// Unknown Shape
public double CalculateArea()

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;
}
}
.‫عملیات باال نتیجه ی زیر را به دست می دهد‬

Method Name Argument(s) Encoding

CalculateArea Calculate@None

CalculateArea Double Calculate@Double

CalculateArea Double Calculate@Double

.‫ پیغام خطای زیر را تولید می کند‬compiler ،‫ زمانی که پروژه را به وجود می آورید‬،‫در نتیجه‬

Error 1 Type 'Geometry' already defines a member called 'CalculateArea'


with the same parameter types
C:\Exercise1\Exercise.cs 16 19 Overloading

.‫ به مثال زیر توجه کنید‬.‫یکی از قواعد اضافه بار گذاری متد این است که متد گفته شده می تواند آرگومان هایی از نوع مختلف داشته باشد‬

public class Geometry


{
// Unknown Shape
public double CalculateArea()
{
return 0D;
}
// Square
236
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
public double CalculateArea(double side)
{
return side * side;
}
// Circle
public double CalculateArea(double radius)
{
return radius * radius * 3.14159;
}
}

virtual ‫ گفتیم که نوع داده ی آرگومان در داخل‬.‫ شما به دالیلی نمی خواهید آرگومان متفاوتی (از نوع دیگر) ارسال کنید‬،‫در بیشتر موارد‬

.‫ شمار متفاوتی آرگومان بگیرد چه می شود؟ مثال زیر را در نظر بگیرید‬، ‫ اما اگر هر متد‬.‫ قرار می گیرد‬table

public class Geometry


{
// Unknown Shape
public double CalculateArea()
{
return 0D;
}
// Square
public double CalculateArea(double side)
{
return side * side;
}
// Rectangle
public double CalculateArea(double length, double height)
{
return length * height;
}
}
.‫نتیجه ی زیر را به دست می دهد‬

Method Name Argument(s) Encoding

CalculateArea Calculate@None

CalculateArea double Calculate@Double

237
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
CalculateArea double، Calculate@Double@Double

double

‫ نمونه ای از فراخوانی متدها را در‬.‫) متد دوم و سوم متفاوت هستند‬encoding( ‫ رمزگذاری‬،‫همان طور که در جدول باال مشاهده می کنید‬

.‫مثال زیر مشاهده می کنید‬

public class Geometry


{
// Unknown Shape
public double CalculateArea()
{
return 0D;
}
// Square
public double CalculateArea(double side)
{
return side * side;
}
// Rectangle
public double CalculateArea(double length, double height)
{
return length * height;
}
}
public class Exercise
{
static int Main()
{
var geo = new Geometry();
System.Console.WriteLine("Geometric Shapes");
System.Console.WriteLine("Calculation of Areas");
System.Console.Write("Square: ");
System.Console.WriteLine(geo.CalculateArea(26.38));
System.Console.Write("Rectangle: ");
System.Console.WriteLine(geo.CalculateArea(39.17, 26.38));
System.Console.ReadKey();
return 0;
}
}
‫نتیجه‬

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‬می شود‪ .‬کد زیر را در نظر بگیرید‪.‬‬

‫‪public class Geometry‬‬


‫{‬
‫‪// Unknown Shape‬‬
‫)(‪public double CalculateArea‬‬
‫{‬
‫;‪return 0D‬‬
‫}‬
‫‪// Square‬‬
‫)‪public double CalculateArea(double side‬‬
‫{‬
‫;‪return side * side‬‬
‫}‬
‫‪// Rectangle‬‬
‫)‪public double CalculateArea(double length, double height‬‬
‫{‬
‫;‪return length * height‬‬
‫}‬
‫‪// Circle‬‬
‫)‪public double CalculateArea(double radius, int unused‬‬
‫{‬
‫;‪return radius * radius * 3.14159‬‬
‫}‬
‫}‬
‫نتیجه ی زیر حاصل می گردد‪.‬‬

‫‪Method Name‬‬ ‫)‪Argument(s‬‬ ‫‪Encoding‬‬

‫‪239‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪CalculateArea‬‬ ‫‪Calculate@None‬‬

‫‪CalculateArea‬‬ ‫‪double‬‬ ‫‪Calculate@Double‬‬

‫‪CalculateArea‬‬ ‫‪double،‬‬ ‫‪Calculate@Double@Double‬‬

‫‪double‬‬

‫‪CalculateArea‬‬ ‫‪double،‬‬ ‫‪Calculate@Double@Integer‬‬

‫‪double‬‬

‫همان طور که مشاهده می کنید رمز گذاری ها متمایز هستند‪.‬‬

‫به خاطر دارید که برای محاسبه ی محیط های یک مربع یا دایره‪ ،‬به تنها یک مقدار (‪ )value‬نیاز دارید‪ .‬به منظور تمیز دادن ‪ /‬وجه تمایز قائل‬

‫شدن بین محاسبات این دو محیط در کد‪ ،‬آرگومانی متفاوت (دومی) به محیط دایره ارسال می کردیم‪ .‬ما در مثال خود آرگومان را "‪"unused‬‬

‫نامیدیم‪ ،‬ولی شما می توانید هر اسمی که دوست دارید برای آن انتخاب کنید (یکی از تفاوت های بین زبان های ‪ C++‬و ‪ C#‬این است که در‬

‫‪ C++‬می توان اسم آرگومان را حذف کرد‪ .‬بنابراین‪ ،‬اگر کد فوق را با زبان ‪ C++‬می نوشتیم دیگر نیازی به نام گذاری آرگومان وجود نداشت)‪.‬‬

‫هنگام فراخوانی متدی که دو آرگومان می گیرد‪ ،‬توجه داشته باشید که حتماً باید مقداری به آرگومان دومی ارسال شود‪ .‬به این خاطر که متد‬

‫آرگومان گفته شده را به کار نمی برد‪ ،‬فرقی نمی کند چه مقداری به آن ارسال کنید‪ ،‬مادام این که با نوع متد هم خوانی و مطابقت داشته‬

‫باشد‪.‬‬

‫مثال‬

‫‪public class Geometry‬‬


‫{‬
‫‪// Unknown Shape‬‬
‫)(‪public double CalculateArea‬‬
‫{‬
‫;‪return 0D‬‬
‫}‬
‫‪// Square‬‬
‫)‪public double CalculateArea(double side‬‬
‫{‬
‫;‪return side * side‬‬
‫‪240‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
}
// Rectangle
public double CalculateArea(double length, double height)
{
return length * height;
}
// Circle
public double CalculateArea(double radius, int unused)
{
return radius * radius * 3.14159;
}
}
public class Exercise
{
static int Main()
{
var geo = new Geometry();
System.Console.WriteLine("Geometric Shapes");
System.Console.WriteLine("Calculation of Areas");
System.Console.Write("Square: ");
System.Console.WriteLine(geo.CalculateArea(26.38));
System.Console.Write("Rectangle: ");
System.Console.WriteLine(geo.CalculateArea(39.17, 26.38));
System.Console.Write("Circle: ");
System.Console.WriteLine(geo.CalculateArea(26.38, 0));
System.Console.ReadKey();
return 0;
}
}
‫نتیجه‬

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‬‬
‫آرگومان های اختیاری‬

‫آرگومانی با مقدار اختیاری‬

‫گفته شد در صورتی که متدی آرگومان گرفت‪ ،‬هنگام فراخوانی آن آرگومان‪ ،‬الزم است مقداری برای آرگومان نام برده فراهم کرد‪ .‬البته‪،‬‬

‫استثنایی برای قاعده ی مذکور وجود دارد‪ .‬چنانچه متدی دارید که آرگومان آن معموالً مقداری یکسان دریافت می کند‪ ،‬می توانید مقداری‬

‫پیش فرض به آرگومان مزبور اختصاص دهید‪.‬‬

‫کد زیر را در نظر بگیرید‪.‬‬

‫‪public class Exercise‬‬


‫{‬
‫)‪double? CalculateNetPrice(double? discountRate‬‬
‫{‬
‫;‪double? origPrice = 125.55‬‬
‫;)‪return origPrice - (origPrice * discountRate / 100‬‬
‫}‬
‫)(‪static int Main‬‬
‫{‬
‫;)(‪var exo = new Exercise‬‬
‫;‪double? finalPrice = null‬‬
‫‪double? discount = 15; // That is 25% = 25‬‬
‫;)‪finalPrice = exo.CalculateNetPrice(discount‬‬
‫;)"‪System.Console.WriteLine("After applying the discount‬‬
‫;)" = ‪System.Console.Write("Final Price‬‬
‫;)‪System.Console.WriteLine(finalPrice‬‬
‫;)(‪System.Console.ReadKey‬‬
‫;‪return 0‬‬
‫}‬
‫}‬
‫نتیجه‬

‫‪After applying the discount‬‬


‫‪Final Price = 106.7175‬‬
‫‪Press any key to continue...‬‬

‫برای نشان دادن این که آرگومانی مقدار پیش فرض دارد‪ ،‬مقدار پیش فرض را داخل پرانتز متد‪ ،‬پس از اسم آرگومان قرار دهید‪.‬‬

‫مثال‬

‫‪243‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
public class Exercise
{
double? CalculateNetPrice(double? discountRate = 25)
{
double? origPrice = 125.55;
return origPrice - (origPrice * discountRate / 100);
}
}
‫ دیگر نیازی به ارسال‬،‫ چنانچه می خواهید مقدار پیش فرض را به کارببرید‬.‫ یک مقدار به آرگومان ارسال کرد‬،‫می توان هنگام فراخوانی متد‬

.‫آرگومان نیست‬

‫مثال‬

public class Exercise


{
double? CalculateNetPrice(double? discountRate = 25)
{
double? origPrice = 125.55;
return origPrice - (origPrice * discountRate / 100);
}
static int Main()
{
var exo = new Exercise();
double? finalPrice = null;
finalPrice = exo.CalculateNetPrice();
System.Console.WriteLine("After applying the discount");
System.Console.Write("Final Price = ");
System.Console.WriteLine(finalPrice);
System.Console.ReadKey();
return 0;
}
}
.‫ نتیجه ی زیر به دست می آید‬.‫ به این معنی که آرگومانی ارسال نشده است‬،‫توجه داشته باشید که پرانتزهای متد خالی هستند‬

After applying the discount


Final Price = 94.1625
Press any key to continue...

‫ کلیه ی آرگومان های مزبور (یا برخی از آن ها) می توانند‬،‫ حال‬.‫ می توان متدی ایجاد کر د که آرگومان های متعددی می گیرد‬،‫به همین ترتیب‬

.‫مقدارهای پیش فرض داشته باشند‬

244
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫ سپس انتخاب کرد‬،‫ می توان آرگومانی پیش فرض برای هر یک فراهم کرد‬،‫در صورتی که متدی چند آرگومان (بیش از یک آرگومان) گرفت‬

‫ حین تعریف متد‬،‫ اگر می خواهید کلیه ی آرگومان ها مقدار پیش فرض داشته باشند‬.‫کدام یک از آرگوم ان ها مقدار پیش فرض دریافت کنند‬

.‫ توجه خود را به مثال زیر جلب کنید‬.‫ به دنبال هر اسم عالمت مساوی " = " و مقدار دلخواه را تایپ کنید‬،‫مورد نظر‬

public class Exercise


{
double? CalculateNetPrice(double? tax = 5.75, double? discount = 25,double? origPrice = 245.55)
{
double? discountValue = origPrice * discount / 100;
double? taxValue = tax / 100;
double? netPrice = origPrice - discountValue + taxValue;
System.Console.Write("Original Price: $");
System.Console.WriteLine(origPrice);
System.Console.Write("Discount Rate: ");
System.Console.Write(discount);
System.Console.WriteLine("%");
System.Console.Write("Tax Amount: $");
System.Console.WriteLine(tax);
return netPrice;
}
static int Main()
{
var exo = new Exercise();
double? finalPrice = null;
finalPrice = exo.CalculateNetPrice();
System.Console.WriteLine("After applying the discount");
System.Console.Write("Final Price = ");
System.Console.WriteLine(finalPrice);
System.Console.ReadKey();
return 0;
}
}
‫نتیجه‬

Original Price: $245.55


Discount Rate: 25%
Tax Amount: $5.75
After applying the discount
Final Price = 184.22
Press any key to continue...

‫ ترتیب قرار‬،‫ و شما خواستید مقدارهای پیش فرضی برای آن پارامترها فراهم کنید‬،‫چنانچه متدی چند آرگومان (بیش از یک آرگومان) گرفت‬

.‫گیری آرگومان ها از اهمیت خاصی برخوردار خواهد بود‬


245
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫ چنانچه می خواهید مقداری پیش فرض برای تنها یکی از‬.‫ می توان آن را با مقادیر پیش فرض تعریف کرد‬،‫اگر متد دو آرگومان داشت‬

‫ چنانچه تنها یک‬،‫ هنگام فراخوانی چنین تابعی‬.‫ آن مقدار پیش فرض فقط به آرگومان دومی تعلق می گیرد‬،‫آرگومان ها ارائه دهید‬

‫ مقدار آن را به اولین پارامتر در لیست تخصیص می دهد و هیچ مقداری به دومین پارامتر اختصاص‬compiler ،‫آرگومان فراهم کنید‬

.‫نمی دهد‬

public class Exercise


{
double? CalculateNetPrice(double? taxRate, double? discountRate = 25)
{
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;
}
}

‫مثال‬

After applying a 25% discount and a 5.50% tax rate


Final Price = 139.5175
Press any key to continue...

‫ با پیغام خطا‬،‫ تنها یک آرگومان هنگام فراخوانی تابع فراهم کنید‬،‫چنانچه پس از تعر یف تابع و تخصیص مقدار پیش فرض به اولین آرگومان‬

.‫ کد زیر را در نظر بگیرید‬.‫مواجه می شوید‬

public class Exercise


{
double? CalculateNetPrice(double? discountRate = 25, double? taxRate)

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;
}
}

.‫دو پیغام خطای زیر صادر می شوند‬

Error 1 Optional parameters must appear after all required parameters


C:\Exercises\Bank\Exercise.cs 3 70 Bank

‫ چنانچه متد چندین آرگومان (بیش از دو آرگومان) دریافت کرد و می خواهید که تنها تعدادی از آن آرگومان ها مقدار پیش فرض داشته‬،‫حال‬

‫ صرف نظر از این که چه تعداد آرگومان‬.‫ به خاطر داشته باشید که آرگومان های با مقدار پیش فرض باید انتهای لیست قرار بگیرند‬،‫باشند‬

‫ همیشه لیست خود را با آرگومان هایی آغاز کنید که‬،)‫مقدار پیش فرض دریافت می کنند (و چه تعداد مقدار پیش فرض دریافت نمی کنند‬

.‫مقدار پیش فرض به کار نمی گیرند‬

‫مثال‬
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;
}
}

‫مثال‬

After applying a 25% discount and a 5.75% tax rate


Final Price = 282.02
Press any key to continue...

‫فراخوانی آرگومان با (استفاده از) اسم‬

‫ ابتدا باید مقداری برای‬،‫ برای تخصیص مقدار به دومین آرگومان اختیاری‬،C++ ‫ در‬.‫تصور کنید متدی دارید که چندین آرگومان اختیاری می گیرد‬

‫ به مثال زیر‬.‫ باید آن را ارسال کنید‬،‫ حتی اگر هم بخواهید مقدار پیش فرض آرگومان اولی را به کارببرید‬.‫اولین آرگومان اختیاری ارسال کنید‬

.‫توجه کنید‬

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;
}
248
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
static int Main()
{
double? finalPrice;
Exercise exo = new Exercise();
finalPrice = exo.CalculateNetPrice(375.95, 5.75, 40);
System.Console.WriteLine("Original Price: 375.95");
System.Console.WriteLine("Tax Rate: 5.75%");
System.Console.WriteLine("Discount Rate: 40%");
System.Console.Write("Final Price: ");
System.Console.WriteLine(finalPrice);
System.Console.ReadKey();
return 0;
}
}

.‫نتیجه ی زیر حاصل می گردد‬

Original Price: 375.95


Tax Rate: 5.75%
Discount Rate: 40%
Final Price: 225.6275
Press any key to continue...

‫ می‬..‫ سوم‬،‫ ولی برای آرگومان های دوم‬،‫تصور کنید می خواهید یک آرگومان اختیاری را نادیده گرفته تا از مقدار پیش فرض آن استفاده کنید‬

‫) و مقدار‬:( ‫ اسم آرگومان مورد نظر و به دنبال آن دو نقطه‬،‫ در پرانتز متدی که فرا می خوانید‬،‫ برای این منظور‬.‫خواهید مقدار ارسال کنید‬

.)‫دلخواه را تایپ کنید ( که در واقع با پروسه ی فراخوانی متد با استفاده از اسم یکی است‬

‫مثال‬

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? finalPrice;
Exercise exo = new Exercise();
finalPrice = exo.CalculateNetPrice(discountRate: 40, origPrice: 375.95);
System.Console.WriteLine("Original Price: 375.95");
249
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫;)"‪System.Console.WriteLine("Tax Rate: 5.75%‬‬
‫;)"‪System.Console.WriteLine("Discount Rate: 40%‬‬
‫;)" ‪System.Console.Write("Final Price:‬‬
‫;)‪System.Console.WriteLine(finalPrice‬‬
‫;)(‪System.Console.ReadKey‬‬
‫;‪return 0‬‬
‫}‬
‫}‬

‫با استفاده از این روش‪ ،‬می توان آرگومان های اختیاری را که حاضر نیستید مقداری برای آن ها فراهم کنید نادیده گرفت‪.‬‬

‫مبانی سازنده ها‬

‫توصیف‬

‫کالس زیر را در نظر بگیرید‪.‬‬

‫‪public class BankAccount‬‬


‫{‬
‫;‪private string customerName‬‬
‫;‪private decimal originalDeposit‬‬
‫}‬

‫پس از تعریف متغیر یک کالس در برنامه‪ ،‬زمانی که برنامه باال می آید‪ compiler ،‬به هر یک از اعضای کالس به اندازه ی کافی حافظه اختصاص‬

‫می دهد‪ .‬فضای ای که به هر متغیر عضو تخصیص داده می شود با توجه به نوع آن متغیر مقداردهی اولیه می شود‪.‬‬

‫برای شی از نوع ‪ ،(string object) string‬فضای مزبور خالی نگه داشته می شود‪ .‬برای نوع ‪ ،integer‬فضای حافظه با ‪ 2‬پر می شود‪ .‬برای شئ‬

‫ای از این نوع‪ ،‬بهتر است مقداری فراهم شود که متغیرهای عضو را با مقدارهای دلخواه شما مقداردهی اولیه می کند‪.‬‬

‫متدی که شی ای را مقداردهی (اولیه) می کند‪ ،‬ممکن است هر مقداری برگرداند‪ ،‬اما بهتر است مقدار بازگشتی از نوع ‪ void‬باشد زیرا هدف‬

‫اصلی آن تنظیم دوباره ی مقادیر است‪ .‬به این خاطر که متد‪ ،‬مقداری اولیه به تک تک متغیرهای عضو می دهد (متغیرهایی که طبیعتاً باید‬

‫مقداردهی اولیه شوند)‪ ،‬الزم است آرگومانی معادل برای هر یک از متغیرهایی که مقداردهی اولیه می کند داشته باشد‪.‬‬

‫‪public class BankAccount‬‬


‫{‬
‫;‪private string customerName‬‬
‫;‪private decimal originalDeposit‬‬
‫)‪public void Initialize(string name, decimal deposit‬‬
‫{‬
‫}‬

‫‪250‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
}

( ‫ به منظور پیاده سازی متد‬.‫ لزومی ندارد حتماً تمامی اعضای یک کالس را مقداردهی (اولیه) کند‬،‫متدی که کالسی را مقداردهی اولیه می کند‬

.‫ به مثال های ذیل توجه کنید‬.‫ کافی است آرگومان متد را به متغیر مربوط اختصاص دهید‬،)‫منظور متدی است که مقداردهی اولیه می کند‬

public class BankAccount


{
private string customerName;
private decimal originalDeposit;
public void Initialize(string name, decimal deposit)
{
customerName = name;
originalDeposit = deposit;
}
}

.‫ فراخوانی کنید تا مقادیر اولیه را به فیلدهای کالس بدهد‬،‫سپس می توانید متد را پس از تعریف نمونه ای از کالس‬

‫مثال‬

public class BankAccount


{
private string customerName;
private decimal originalDeposit;
public void Initialize(string name, decimal deposit)
{
customerName = name;
originalDeposit = deposit;
}
public void Show()
{
System.Console.WriteLine("Customer Account Information");
System.Console.Write("Customer Name: ");
System.Console.WriteLine(customerName);
System.Console.Write("Original Deposit: ");
System.Console.WriteLine(originalDeposit);
}
}
public class Exercise
{
static int Main()
{
BankAccount account = new BankAccount();
account.Initialize("Paul Motto", 450.00M);
account.Show();
return 0;

251
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫}‬
‫}‬

‫نتیجه‬

‫‪Customer Account Information‬‬


‫‪Customer Name: Paul Motto‬‬
‫‪Original Deposit: 450.00‬‬
‫‪Press any key to continue...‬‬

‫معرفی سازنده ها‬

‫‪ Microsoft Visual Studio .8‬را اجرا کنید‪.‬‬

‫‪ .2‬به منظور ایجاد برنامه ی جدید‪ ،‬فهرست گزینه ی اصلی برنامه را باز کرده‪ ،‬سپس گزینه های ‪ File -> New Project‬را کلیک کنید‪.‬‬

‫‪ .1‬گزینه ی ‪ Empty Project‬را از لیست میانی انتخاب کنید‪.‬‬

‫‪ .4‬اسم را به ‪ DepartmentStore3‬تغییر داده‪ ،‬روی ‪ ok‬کلیک کنید‪.‬‬

‫‪ .5‬در پنجره ی ‪ Solution Explorer‬راست کلیک کرده‪ ،‬سپس طبق دستور زیر عمل کنید‪.‬‬

‫‪.DeparmentStore3 ->Add ->New Item .6‬‬

‫در لیست میانی پنجره ی محاوره ی ‪ Code File ،Add New Item‬را کلیک کنید‪.‬‬ ‫‪.4‬‬

‫‪ .1‬حال‪ ،‬اسم را به ‪ StoreItem‬تغییر داده و سپس ‪ Add‬را کلیک کنید‪.‬‬

‫‪ .1‬در فایل دستورات زیر را وارد کنید‪.‬‬

‫‪public class StoreItem‬‬


‫{‬
‫;‪public long itemNumber‬‬
‫;‪public string itemName‬‬
‫;‪public string size‬‬
‫;‪public decimal unitPrice‬‬
‫}‬

‫سازنده ی (‪ )constructor‬پیش فرض‬

‫سازنده متدی خاص است که هنگام به وجود آمدن شی جدید (‪ )object‬ساخته می شود‪ .‬متد و کالس هر دو یک اسم دارند‪ .‬الزم‬

‫به ذکر است متد‪ ،‬شی را درست در زمان به وجود آمدن آن مقداردهی اولیه می کند‪ .‬هنگامی که کالسی می سازید‪ ،‬چنانچه سازنده‬

‫ای برای آن معرفی نکنید‪ compiler ،‬به صورت خودکار یک سازنده برای شما ایجاد می کند؛ این کار باعث می شود که کلیه ی شی‬
‫‪252‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫های کالس از وجود شی جدید آگاه شوند‪ .‬به سازنده ای که توسط ‪ compiler‬ایجاد می شود‪ ،‬سازنده ی پیش فرض نیز می گویند‪.‬‬

‫البته شما می توانید سازنده ی خود را ایجاد کنید‪ .‬برای این منظور متدی معرفی کنید که با کالس هم نام است‪.‬‬

‫داخل کالس موردنظر راست کلیک کرده ‪ Insert Snippet...‬را انتخاب کنید‪ ،‬سپس ‪ C# Visual‬را دوبار کلیک کنید‪.‬حال‪ ،‬در لیستی‬

‫که ظاهر می شود روی ‪ ctor‬دوبار کلیک کنید‪.‬‬

‫‪ Code Editor‬برای ایجاد متد جدید از اسم کالس استفاده می کند‬

‫به خاطر داشته باشید که متد فوق نباید هیچ مقداری بازگرداند‪.‬‬

‫مثال‬

‫‪public class BankAccount‬‬


‫{‬
‫)(‪public BankAccount‬‬
‫{‬
‫}‬
‫}‬

‫‪253‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫زمانی که نمونه ای از کالس تعریف می کنید‪( ،‬چه از آن شی استفاده بکنید چه نکنید)‪ ،‬سازنده ای برای شی ایجاد می شود‪ .‬پس از این که‬

‫نمونه ای از کالس تعریف شد‪ ،‬سازنده ی پیش فرض فراخوانده می شود ( چه شی نام برده را به کار ببرید و چه آن را نادیده بگیرید)‪ .‬مثال‬

‫زیر به زیبایی عملیات ذکر شده را تشریح می کند‪.‬‬

‫‪public class BankAccount‬‬


‫{‬
‫)(‪public BankAccount‬‬
‫{‬
‫;)"‪System.Console.WriteLine("New Bank Account‬‬
‫}‬
‫}‬
‫‪public class Exercise‬‬
‫{‬
‫)(‪static int Main‬‬
‫{‬
‫;)(‪BankAccount account = new BankAccount‬‬
‫;‪return 0‬‬
‫}‬
‫}‬

‫نتیجه‬

‫‪New Bank Account‬‬


‫‪Press any key to continue...‬‬

‫همان طور که در مثال فوق مشاهده کردید‪ ،‬اگرچه شی مذکور مورد استفاده قرار نگرفت‪ ،‬تعریف آن به تنهایی وجود شی جدید را نشان داد‪.‬‬

‫به کاربردن سازنده ی پیش فرض‬

‫‪ .8‬در پنجره ی ‪ ،Solution Explorer‬راست کلیک کرده‪ ،‬سپس ‪DepartmentStore3 ->Add ->New Item...‬‬

‫‪ .2‬در لیست میانی پنجره ی محاوره ی ‪ ،Add New Item‬روی ‪ Code File‬کلیک کنید‪ .‬حال‪ ،‬اسم را به ‪ DepartmentStore‬تغییر داده و‬

‫‪ Add‬را کلیک کنید‬

‫‪ .1‬فایل را به صورت زیر اصالح کنید‪.‬‬

‫‪public class DepartmentStore‬‬


‫{‬
‫)(‪static int Main‬‬
‫{‬

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

‫‪ .5‬پنجره ی ‪ DOS‬را بسته و به محیط برنامه نویسی باز گردید‪.‬‬

‫سازنده ای که مقداردهی اولیه می کند‬

‫می توان از سازنده (‪ )constructor‬برای مقداردهی اولیه ی فیلدهای یک کالس نیز استفاده کرد‪ .‬به همین دلیل‪ ،‬می تواند جایگزین‬

‫مناسبی برای متدی باشد که مقداردهی اولیه می کند‪ .‬برای استفاده از سازنده به منظور مقداردهی اولیه ی فیلدهای یک کالس‪،‬‬

‫متغیرهایی را که می خواهید مقداردهی اولیه کنید را به عنوان آرگومان تعریف کنید‪ .‬نیازی نیست تمامی متغیرهای عضو را تعریف‬

‫کنید‪ ،‬بلکه تنها آن دسته متغیرهایی که ملزوم به مقداردهی اولیه هستید کفایت می کند‪ .‬در حقیقت‪ ،‬تنها باید آن عضوهایی را‬

‫مقداردهی (اولیه) کنید که مطمئن هستید‪ ،‬دیگر شی ها به هنگام استفاده از این شئ به آن ها نیاز دارند‪ .‬به عبارت روشن تر‪،‬‬

‫‪ object‬شما فیلدهایی دارد که اشیا خارجی (‪ )external objects‬نیاز ندارند تغییر دهند ( یا به آن ها دسترسی پیدا کنند) یا‬

‫متغیرهای عضو بعده ها هنگامی که از شئ مورد نیاز فراخوانده می شوند‪ ،‬مقداردهی اولیه می شوند‪.‬‬

‫‪255‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
،‫ برای متغیری از نوع عددی‬.‫ می توانید فقط فیلدهای دلخواه کالس را مقداردهی اولیه کنید‬، ‫به منظور ایجاد سازنده ی پیش فرض‬

‫ فقط یک تک کوتیشن)’( به آن‬،‫ در صورتی که متغیر یک کاراکتر بود‬.‫کافی است ثابت دلخواه را به هر متغیر عضو اختصاص دهید‬

.‫ باید مقداری با (") دابل کوتیشن به متغیر اختصاص داد‬،‫ چنانچه متغیر یک رشته بود‬،‫ حال‬.‫اضافه می کنیم‬

public class BankAccount


{
private string customerName;
private decimal originalDeposit;
public BankAccount()
{
customerName = "John Doe";
originalDeposit = 0M;
}
public void Show()
{
System.Console.WriteLine("Customer Account Information");
System.Console.Write("Customer Name: ");
System.Console.WriteLine(customerName);
System.Console.Write("Original Deposit: ");
System.Console.WriteLine(originalDeposit);
}
}
public class Exercise
{
static int Main()
{
BankAccount account = new BankAccount();
account.Show();
System.Console.ReadKey();
return 0;
}
}

‫نتیجه‬

Customer Account Information


Customer Name: John Doe
Original Deposit: 0
Press any key to continue...

‫دستورالعمل ایجاد سازنده ای که مقداردهی (اولیه) می کند‬

.‫ کلیک کنید‬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‬‬
‫}‬
‫}‬

‫‪ .1‬برنامه را اجرا کنید‪ .‬نتیجه ی زیر حاصل می گردد‪.‬‬

‫‪Department Store‬‬
‫‪Item #: 0‬‬
‫‪Item Name: Unknown‬‬
‫‪Item Size: 0‬‬
‫‪Unit Price: 0.00‬‬

‫‪ .4‬پنجره ی ‪ DOS‬را بسته و به محیط برنامه نویسی بازگردید‪.‬‬

‫سربارگذاری سازنده (‪)constructor overloading‬‬

‫مناسب ترین مکان برای تعریف اولیه ی متغیر ها درون سازنده می باشد (مناسب ترین جا برای تخصیص مقادیر پیش فرض به اعضای کالس‪،‬‬

‫سازنده ی پیش فرض می باشد)‪ .‬عالوه بر سازنده ی پیش فرض‪ ،‬می توانید هر تعداد سازنده که ملزوم می دانید اضافه کنید‪ .‬این جنبه به‬

‫شما اجازه می دهد برای اهداف مختلف‪ ،‬سازنده های متفاوت تولید کنید‪ .‬بنابراین‪ ،‬یک سازنده نیز (مثل متد) امکان ‪ overload‬شدن دارد‪.‬‬

‫در مورد کلیه ی قواعد سربارگذاری متد قبالً مفصل بحث کردیم‪ .‬ابتدایی ترین سازنده ای که ایجاد می کنید‪ ،‬قابلیت استفاده از یک آرگومان‬

‫را دارد‪ .‬هنگام ایجاد سازنده ای که تنها یک آرگومان می گیرد‪ ،‬باید آن عضوی را مقداردهی اولیه کنید که با آرگومان مذکور مطابقت دارد‪ ،‬و‬

‫دیگر اعضا را با مقادیر پیش فرض مقداردهی کنید‪ .‬به مثال زیر توجه کنید‪.‬‬

‫‪public class BankAccount‬‬


‫{‬
‫;‪private string accountNumber‬‬
‫;‪private string customerName‬‬

‫‪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();
}
}

‫ سازنده ی نام برده‬،‫ باید هنگام معرفی نمونه ای از کالس‬،)‫در صورتی که کالسی با تنها یک سازنده ایجاد کردید (مانند مثال فوق‬

‫ هنگام تعریف‬.‫ توجه داشته باشید که نمی توان از سازنده ی پیش فرض ای که آرگومان نمی گیرد استفاده کرد‬: ‫را به کار ببرید‬

.‫ سپس مقادیر را داخل پرانتز سازنده قرار دهید‬،‫ آن را با سازنده مقداردهی اولیه کنید‬،‫متغیر‬

public class BankAccount


{
private string accountNumber;
private string customerName;
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 #: ");
System.Console.WriteLine(accountNumber);
System.Console.Write("Customer Name: ");
System.Console.WriteLine(customerName);
System.Console.Write("Original Deposit: ");
System.Console.WriteLine(originalDeposit);

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

‫نتیجه ی زیر حاصل می گردد‪.‬‬

‫‪Customer Account Information‬‬


‫‪Account #:‬‬ ‫‪27-940025-17‬‬
‫‪Customer Name: John Doe‬‬
‫‪Original Deposit: 0‬‬
‫‪Press any key to continue...‬‬

‫به همین ترتیب‪ ،‬می توان برای مقداردهی های اولیه ی متفاوت‪ ،‬سازنده های متفاوت ایجاد کرد‪ ،‬البته این امکان وجود ندارد که برای هر متغیر‬

‫سازنده ای متفاوت ایجاد کرد‪ .‬چنانچه سازنده ای متفاوت با آرگومان های مختلف (برای مقداردهی اولیه) ایجاد کنید‪ ،‬هنگام تعریف متغیرهای‬

‫کالس‪ ،‬دقت کنید که هر نمونه را با تعداد صحیح آرگومان مقداردهی اولیه کنید‪ ،‬در غیر این صورت‪ compiler ،‬ایراد می گیرد‪.‬‬

‫چنانچه کالسی با تنها یک سازنده ایجاد کنید‪ ،‬و آن سازنده نیز حداقل یک آرگومان داشته باشد‪ ،‬سازنده ی پیش فرض دیگر قابل استفاده و‬

‫در دسترس نخواهد بود‪ .‬برای دسترسی به سازنده ی پیش فرض یک شی‪ ،‬دو گزینه پیش رو دارید‪.‬‬

‫· در صورتی که هیچ سازنده ای در کالس ایجاد نکنید‪ ،‬سازنده ی پیش فرض همیشه هنگام فراخوانی کالس آماده هست‪.‬‬

‫· اگر حداقل یک سازنده برای کالس ایجاد کنید و حداقل یک آرگومان برای سازنده ی مزبور فراهم کنید‪ ،‬باید خودتان (صراحتا) یک‬

‫سازنده ی پیش فرض برای کالس ایجاد کنید‪.‬‬

‫سربارگذاری سازنده‬

‫‪ .8‬به فهرست گزینه ی اصلی مراجعه کرده‪ ،‬روی گزینه های ‪ Window ->StoreItem.cs‬کلیک کنید‪.‬‬

‫‪ .2‬فایل را به صورت زیر اصالح کنید‪.‬‬

‫‪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;
}
}

.‫ سپس آن را به صورت زیر تغییر دهید‬،‫ دسترسی پیدا کرده‬DepartmentStore.cs ‫ به فایل‬.1

public class DepartmentStore


{
static int Main()
{
// Using the default contructor to create an unknown object
StoreItem unknown = new StoreItem();
System.Console.WriteLine("Department Store");
System.Console.Write("Item #: ");
System.Console.WriteLine(unknown.itemNumber);
System.Console.Write("Item Name: ");
System.Console.WriteLine(unknown.itemName);
System.Console.Write("Item Size: ");
System.Console.WriteLine(unknown.size);
System.Console.Write("Unit Price: ");
System.Console.WriteLine(unknown.unitPrice);
System.Console.WriteLine("=-------------------------------------------=");
260
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
// Using the contructor that takes one argument create an object
// whose only known information is the item number
StoreItem knownNumber = new StoreItem(227174);
System.Console.WriteLine("Department Store");
System.Console.Write("Item #: ");
System.Console.WriteLine(knownNumber.itemNumber);
System.Console.Write("Item Name: ");
System.Console.WriteLine(knownNumber.itemName);
System.Console.Write("Item Size: ");
System.Console.WriteLine(knownNumber.size);
System.Console.Write("Unit Price: ");
System.Console.WriteLine(knownNumber.unitPrice);
System.Console.WriteLine("=-------------------------------------------=");
// Using the contructor that has all the information
// necessary to create an object
StoreItem complete = new StoreItem(180318, "V-Neck Cardigan with Ruffle Trim", "M", 74);
System.Console.WriteLine("Department Store");
System.Console.Write("Item #: ");
System.Console.WriteLine(complete.itemNumber);
System.Console.Write("Item Name: ");
System.Console.WriteLine(complete.itemName);
System.Console.Write("Item Size: ");
System.Console.WriteLine(complete.size);
System.Console.Write("Unit Price: ");
System.Console.WriteLine(complete.unitPrice);
System.Console.WriteLine("=-------------------------------------------=");
System.Console.ReadKey();
return 0;
}
}
.‫ نتیجه ی زیر به دست می آید‬.‫ برنامه را اجرا کنید‬.4

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

‫‪ .5‬پنجره ی ‪ DOS‬را بسته و به محیط برنامه نویسی بازگردید‪.‬‬

‫سازنده ای با مقادیر پیش فرض‬

‫به این خاطر که یک سازنده پیش از هر چیز یک متد است و می تواند آرگومان بگیرد‪،‬متعاقباً آرگومان های آن می توانند مقادیر پیش فرض به‬

‫کارببرند‪.‬‬

‫به منظور تخصیص مقدار پیش فرض به آرگومان یک سازنده‪ ،‬مقدار مناسب را هنگام ایجاد سازنده به آرگومان اختصاص دهید‪.‬‬

‫مثال‬

‫‪public class Rectangle‬‬


‫{‬
‫;‪private double len‬‬
‫;‪private double hgt‬‬
‫)‪public Rectangle(double side = 10.00D‬‬
‫{‬
‫}‬
‫}‬

‫می توان از سازنده برای مقداردهی اولیه ی فیلدهای یک کالس استفاده کرد‪.‬‬

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

‫عمل می کند‪ ،‬هم به عنوان سازنده ای که یک آرگومان می گیرد‪ .‬به این معنا که شما می توانید متغیری تعریف کرده و از سازنده ای استفاده‬

‫کنید که پرانتزهای آن خالی است‪ .‬به مثال زیر توجه کنید‪.‬‬

‫‪public class Rectangle‬‬


‫{‬
‫;‪private double len‬‬
‫;‪private double hgt‬‬
‫‪// Length = Height: Square‬‬
‫)‪public Rectangle(double side = 10.00D‬‬
‫{‬
‫;‪len = side‬‬
‫;‪hgt = side‬‬
‫}‬

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

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

‫ برخی آرگومان ها می‬،‫ سازنده های گوناگون می توانند آرگومان های از نوع متفاوت (مختلفی) داشته باشند‬.‫مقادیر پیش فرض داشته باشند‬

،‫ هنگام ایجاد شی‬.‫ در حالی که برخی دیگر (از این آرگومان ها) مقادیر پیش فرض نداشته باشند‬،‫توانند مقادیر پیش فرض داشته باشند‬

.‫ مثال زیر را در نظر بگیرید‬.‫الزم است به نوع سازنده ای که به کار می برید دقت کنید‬

public class Rectangle


{
private double len;
private double hgt;
/* If the constructor is called with only one argument,
* we are dealing with a square.
* If the constructor is called with two arguments,
* then we have a rectangle */
public Rectangle(double length, double height = 10.00D)
{
len = length;
hgt = height;
}
/* If the constructor is called with only one argument,
* we are dealing with a square.*/

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...

‫استفاده از سازنده های یک کالس‬

)class destructor( ‫مخرب های کالس‬

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

‫ خود‬compiler ،‫ در صورتی که مخربی برای کالس تعریف نکنید‬،‫ درست مثل سازنده ی پیش فرض‬.‫پاک سازی را پشته صحنه انجام می دهد‬

264
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫یک مخرب پیش فرض ایجاد می کند‪ .‬برخالف سازنده‪ ،‬مخرب را نمی توان سربارگذاری (‪ )overload‬کرد‪ .‬به عبارت دیگر‪ ،‬شما نمی توانید‬

‫بیش از یک مخرب داشته باشید‪ .‬اما درست مثل سازنده‪ ،‬مخرب با کالس هم اسم است‪ .‬این بار اسم مخرب با عالمت "~" آغاز می شود‪.‬‬

‫برای ایجاد مخرب‪ ،‬عالمت ~ و به دنبال آن اسم کالس را تایپ کنید‪.‬‬

‫مثال‬

‫‪public class BankAccount‬‬


‫{‬
‫;‪private string accountNumber‬‬
‫;‪private string customerName‬‬
‫;‪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 #:‬‬ ‫;)"‬
‫;)‪System.Console.WriteLine(accountNumber‬‬
‫;)" ‪System.Console.Write("Customer Name:‬‬
‫;)‪System.Console.WriteLine(customerName‬‬
‫;)" ‪System.Console.Write("Original Deposit:‬‬
‫;)‪System.Console.WriteLine(originalDeposit‬‬
‫}‬
‫)(‪~BankAccount‬‬
‫{‬
‫}‬
‫}‬

‫متغیرهای خواندنی (‪)read-only variables‬‬

‫هنگام ایجاد متغیر عضو کالس‪ ،‬یکی از تصمیماتی که اتخاذ می کنید این است که فیلد کالس چگونه مقدارش را دریافت کند‪ .‬گاهی اوقات به‬

‫آن اعضایی (‪ )clients of a class‬که از کالس استفاده می کنند‪ ،‬اجازه ی تغییر مقادیر فیلدها داده می شود‪ .‬گاهی اوقات هم شما می‬

‫خواهید فیلد‪ ،‬فقط مقدار مزبور را نگه دارد یا ارائه بدهد‪ ،‬ولی در عین حال نتواند آن را تغییر دهد‪ .‬این کار باز هم به اعضا اجازه می دهد که‬

‫به فیلد دسترسی پیدا کنند ولی تنها در حد خواندن آن‪.‬‬

‫‪265‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫ به مثال زیر توجه‬.‫ را تایپ کرد‬readonly ‫ پیش از نوع داده ی آن باید کلیدواژه ی‬،‫به منظور ایجاد فیلدی که مقدار آن را فقط بتوان خواند‬

.‫کنید‬

public readonly double PI;

‫ می توانید فیلد را هنگام تعریف مقداردهی اولیه‬،‫ دو گزینه اصلی پیش رو دارید‬.‫ الزم است آن را مقداردهی اولیه کنید‬،‫پس از تعریف متغیر‬

.‫کنید‬

‫مثال‬

public class Circle


{
public double radius;
public Circle(double rad)
{
radius = rad;
}
public readonly double PI = 3.14159;
}
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;
}
}

.‫نتیجه ی زیر را به دست می دهد‬

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( ‫چنانچه مقدار یک فیلد خواندنی‬

.‫) نمی شود‬compile( ‫ کد زیر ترجمه‬،‫ بر این اساس‬.‫مقداردهی اولیه شود‬

public class Circle


{
public double radius;
public Circle(double rad)
{
radius = rad;
PI = 3.14159;
}
public readonly double PI;
public readonly double Diameter = radius * 2;
}
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);
267
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
System.Console.Write("Diameter: ");
System.Console.WriteLine(circ.Diameter);
System.Console.ReadKey();
return 0;
}
}

.‫نتیجه ی زیر به دست می آید‬

Error 1 A field initializer cannot reference the non-static


field، method، or property 'Circle.radius'
C:\Exercise1\Exercise.cs 12 39 Bank

‫ سپس آن‬،‫) در کالس تعریف کرده‬read-only( ‫ این است که فیلد مزبور را به عنوان متغیری فقط خواندنی‬،‫یکی از راه حل های رفع خطای فوق‬

.‫ نمونه های آن را زیر مشاهده می کنید‬. ‫را در سازنده و با عبارت موردنظر مقداردهی اولیه کنید‬

public class Circle


{
public double radius;
public Circle(double rad)
{
radius = rad;
Diameter = radius * 2;
Circumference = Diameter * PI;
Area = radius * radius * PI;
}
public readonly double PI = 3.14159;
public readonly double Diameter;
public readonly double Circumference;
public readonly double Area;
}
public class Exercise
{
static int Main()
{
Circle circ = new Circle(24.72);
System.Console.WriteLine("Circle Characteristics");
System.Console.Write("Radius: ");
System.Console.WriteLine(circ.radius);
System.Console.Write("Diameter: ");
System.Console.WriteLine(circ.Diameter);
System.Console.Write("Circumference: ");
System.Console.WriteLine(circ.Circumference);
System.Console.Write("Area: ");
System.Console.WriteLine(circ.Area);
System.Console.ReadKey();

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‬شدن را دارد‪ ،‬می تواند مقادیر متفاوتی‬

‫داشته باشد‪ ،‬اما مقدار متغیر ثابت هیچ گاه تغییر نمی کند ‪ :‬یک بار در کالس (یا متد) مقداردهی می شود و آن مقدار را برای همیشه سرتاسر‬

‫کالس (یا متد) نگه می دارد (در تمام بخش های کالس از همان مقدار استفاده می کند)‪.‬‬

‫معرفی فضاهای نام )‪(Namespace‬‬

‫فضای نام بخشی از یک کد است‪ ،‬که با نام به خصوصی شناسایی می شود‪ .‬آن نام می تواند هر اسمی از جمله اسم یک شخص‪ ،‬شرکت یا شهر‬

‫باشد‪.‬‬

‫مقدمه‬

‫ابتدا برنامه ی ‪ Microsoft Visual Studio‬را اجرا کنید‪.‬‬ ‫‪.8‬‬

‫به منظور ایجاد پروژه ی جدید‪ ،‬به فهرست گزینه ی اصلی مراجعه کرده‪ ،‬سپس روی گزینه های ‪ File -> New Project‬کلیک کنید‪.‬‬ ‫‪.2‬‬

‫در فهرست سمت چپ‪ Windows ،‬را انتخاب کنید‪.‬‬ ‫‪.1‬‬

‫حال‪ ،‬روی ‪ Empty Project‬در لیست سمت راست کلیک کنید‪.‬‬ ‫‪.4‬‬

‫اسم را به ‪ DepartmentStore4‬تغییر دهید‪.‬‬ ‫‪.5‬‬

‫اکنون‪ ok ،‬را کلیک کنید‪.‬‬ ‫‪.6‬‬

‫برای ایجاد فایل جدید‪ ،‬فهرست گزینه ی اصلی را باز کرده‪ ،‬روی گزینه های ‪ Project -> Add New Item...‬کلیک کنید‪.‬‬ ‫‪.4‬‬

‫‪269‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫گزینه ی ‪ Code‬را از لیست سمت چپ انتخاب کنید‪.‬‬ ‫‪.1‬‬

‫در لیست سمت راست‪ ،‬روی ‪ Code File‬کلیک کنید‪.‬‬ ‫‪.1‬‬

‫‪ .82‬اسم را به ‪ DepartmentStore‬تغییر دهید‪ Add ،‬را کلیک کنید‪.‬‬

‫‪ .88‬در فایل خالی دستورات زیر را تایپ کنید‪.‬‬

‫‪public class DepartmentStore‬‬


‫{‬
‫)(‪static int Main‬‬
‫{‬
‫;‪return 0‬‬
‫}‬
‫}‬

‫ایجاد فضای نام به صورت دستی‬

‫برای ایجاد فضای نام‬

‫کد را با کلیدواژه ی ‪ namespace‬آغاز کرده و به دنبال آن اسم بخش موردنظر را تایپ کنید‪.‬‬

‫روی بخشی که می خواهید فضای نام در آنجا ایجاد شود راست کلیک کرده‪ ،‬حال روی ‪ Insert Snippet...‬دوبار کلیک کنید‪.‬‬

‫درست مثل یک کالس‪ ،‬بخشی که متعلق به فضای نام است با عالمت "{" آغاز شده و به "}" ختم می شود‪.‬‬

‫مثال‬

‫‪namespace Business‬‬
‫{‬
‫}‬

‫داخل {} می توان هر چه مربوط به فضای نام است قرار داد‪ .‬برای مثال‪ ،‬می توان داخل فضای نامی یک کالس ایجاد کنید‪ .‬به مثال زیر توجه‬

‫کنید‪.‬‬

‫‪namespace Business‬‬
‫{‬
‫‪class House‬‬
‫{‬
‫}‬
‫}‬

‫‪270‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫نحوه ی ایجاد فضای نام‬

‫برای این منظور‪ ،‬فایل را به صورت زیر تغییر دهید‪.‬‬


‫‪public class DepartmentStore‬‬
‫{‬
‫)(‪static int Main‬‬
‫{‬
‫;‪return 0‬‬
‫}‬
‫}‬
‫‪namespace Store‬‬
‫{‬
‫‪public class StoreItem‬‬
‫{‬
‫;‪public int itemNumber‬‬
‫;‪public string itemName‬‬
‫;‪public decimal unitPrice‬‬
‫}‬
‫}‬

‫فضای نامی که به صورت اتوماتیک ایجاد شده‬

‫برای ایجاد کالسی جدید به فهرست گزینه ی اصلی مراجعه کرده‪ ،‬روی ‪ 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;
}
}

‫دسترسی به اعضای فضای نام‬

.‫ فایل را به صورت زیر اصالح کنید‬،‫برای دسترسی به محتوای فضای نام‬ .8


public class DepartmentStore
{
static int Main()
{
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 Store
{
public class StoreItem
{
public int itemNumber;
public string itemName;
public decimal unitPrice;
}
}

.‫ برنامه را اجرا کنید‬.2

272
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫‪Store Inventory‬‬
‫‪Item #: 613508‬‬
‫‪Item Name: Merino Crew Neck Cardigan‬‬
‫‪Unit Price: 80.00‬‬

‫‪ .1‬کلید ‪ Enter‬را زده تا به محیط برنامه نویسی باز گردید‪.‬‬

‫استفاده از چندین فضای نام‬

‫مقدمه‬

‫در مثال باال‪ ،‬تنها یک فضای نام ایجاد کردیم‪ .‬به همین شکل‪ ،‬می توانید فضاهای نامی متعددی در فایل ایجاد کنید‪ ،‬البته به شرط اینکه بدنه‬

‫ی تمامی آن ها به درستی مرتب (‪ )delimit‬شده باشد‪.‬‬

‫مثال‬

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

.‫فایل را به این شکل زیر تغییر دهید‬ .4

namespace Store
{
public class StoreItem
{
public int itemNumber;
public string itemName;
public decimal unitPrice;
}
}

Project -> Add New Item... : ‫ فهرست اصلی را باز کرده سپس‬،‫برای ایجاد فایل جدید‬ .5

.‫ کلیک کنید‬Code File ‫ در لیست سمت راست روی‬،‫ اکنون‬.‫ را از لیست سمت چپ انتخاب کنید‬Code ‫ گزینه ی‬،‫در صورت لزوم‬ .6

.‫ کلیک کنید‬Add ‫ سپس روی‬،‫ تغییر داده‬Suppliers ‫اسم را به‬ .4

.‫فایل را به صورت زیر اصالح کنید‬ .1

namespace Supply
{
public class Manufacturer
{
public string companyName;
public string contactName;
public string contactPhone;
}
}

.‫ کلیک کنید‬DepartmentStore.cs ‫ روی برچسب‬،‫برای دستیابی به فایل دیگر‬ .1

.‫ فایل را به صورت زیر اصالح کنید‬،‫برای به کار بردن فضاهای نامی‬ .82

public class DepartmentStore


{
static int Main()
{
Supply.Manufacturer dealer = new Supply.Manufacturer();
dealer.companyName = "Peel Corp";
dealer.contactName = "Sylvain Yobo";
dealer.contactPhone = "(602) 791-8074";

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‬می توان هر تعداد فضای نام خارجی که الزم است دخیل کرد‪.‬‬

‫در صورت بروز تداخل اسم‪ ،‬حتی اگر هم از کلیدواژه ی ‪ using‬استفاده می کنید‪ ،‬باز هم باید اسم کالس را کامل تعریف کنید‪.‬‬

‫به کار بردن فضاهای نام‬

‫برای استفاده از کلیدواژه ی ‪ ،using‬فایل را به صورت زیر تغییر دهید‪.‬‬ ‫‪.8‬‬


‫‪public class DepartmentStore‬‬
‫{‬
‫)(‪static int Main‬‬
‫{‬
‫;)(‪Manufacturer dealer = new Manufacturer‬‬
‫;"‪dealer.companyName = "Peel Corp‬‬
‫;"‪dealer.contactName = "Sylvain Yobo‬‬
‫;"‪dealer.contactPhone = "(602) 791-8074‬‬
‫;)(‪StoreItem si = new StoreItem‬‬
‫;‪si.itemNumber = 613508‬‬
‫;"‪si.itemName = "Merino Crew Neck Cardigan‬‬

‫‪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;
}
}

.‫ نتیجه ی زیر به دست می آید‬،‫برنامه را اجرا کنید‬ .2

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
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

.‫ را زده و به محیط برنامه نویسی باز گردید‬Enter .1

‫گنجاندن یک فضای نامی در دل فضای نامی دیگر‬

.‫ یا تودرتو کردن فضای نام می گویند‬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‬‬
‫}‬
‫}‬
‫}‬
‫}‬

‫‪ .2‬حال فایل ‪ DepartmentStore.cs‬را باز کرده و آن را به ترتیب زیر اصالح کنید‪.‬‬

‫;‪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 ‫گزینه ی دیگری نیز وجود دارد که در مبحث‬

.‫ نباشد‬generic ‫) باشد و دیگری‬generic( ‫عمومی‬

‫مثال‬

namespace Arithmetic
{
public class Numbers
{
public int value;
}
public class Numbers<T>
{
public int value;
}
}

‫استفاده از کالس نام گذاری شده‬

.‫ سپس آن را به صورت زیر اصالح کنید‬،‫ را بازکنید‬Suppliers.cs ‫ فایل‬،‫ ابتدا‬.8


namespace Supply
{
public class SalesPerson
{
public string fullName;
public string expertise;
public string phoneNumber;
}
}
namespace Manufacturers.Domestic
{
public class Manufacturer
{
public string companyName;
public string contactName;
public string contactPhone;
}
}
namespace Manufacturers.Foreign.Asia
{
public class Manufacturer
{

281
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
public string country;
public string companyName;
public string contactName;
public string contactPhone;
public string webSite;
}
}

.‫ مراجعه کرده و آن را به صورت زیر تغییر دهید‬DepartmentStore.cs ‫ به فایل‬،‫ حال‬.2


using Supply;
using Manufacturers.Foreign.Asia;
using Store.Inventory;
public class DepartmentStore
{
static int Main()
{
. . . No Change
return 0;
}
}

‫( فضای نام‬alias) ‫اسم مستعار‬

،‫ برای حل این مسئله‬.‫دسترسی به فضای نامی که آن فضای نام خود در دل فضای نام های دیگر گنجانده شده بسیار دشوار و زمان بر است‬

‫می توان از نام مستعار یک فضای نام بهره جست ( که در واقع میانبری برای دست یافتن به فضای نامی است که در دل فضای نامی دیگر جای‬

.‫ را تایپ کنید‬namespace ‫ و‬،= ‫ عالمت‬،‫ و به دنبال آن اسم دلخواه‬using ‫ کلیدواژه ی‬،‫ برای ایجاد نام مستعار‬.)‫گرفته‬

‫نحوه ی ایجاد و استفاده از فضای نام‬

.‫ آن را به صورت زیر اصالح کنید‬،DepartmentStore.cs ‫ پس از باز کردن فایل‬.8


using Supply;
using Asian = Manufacturers.Foreign.Asia;
using Store.Inventory;
public class DepartmentStore
{
static int Main()
{
Asian.Manufacturer dealer = new Asian.Manufacturer();
dealer.companyName = "Peel Corp";
dealer.contactName = "Sylvain Yobo";
dealer.contactPhone = "(602) 791-8074";
StoreItem si = new StoreItem();
si.itemNumber = 613508;

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;
}
}

.‫ برنامه را اجرا کنید‬.2

.‫ را بسته و به محیط برنامه نویسی برگردید‬DOS ‫ پنجره ی‬.1

‫مدیرت فضای نام‬

‫درج کردن فضای نام‬

.‫چنانچه کدی از قبل آماده دارید و می خواهید آن را داخل یک فضای نام قرار دهید‬

‫ اکنون به انتهای بخش کد‬.‫ و به دنبال آن یک اسم و عالمت } را درج کنید‬namespace ،‫روی باالترین قسمت کد نویسی کلیک کرده‬

.‫نویسی مراجعه کرده و کاراکتر { را تایپ کنید‬

‫ را انتخاب‬Surround With... ‫ سپس‬.‫ روی گزینه ی انتخابی کلیک کنید‬،‫کدی را که می خواهید در فضای نام دخیل کنید انتخاب کرده‬

.‫ کلیک کنید‬namespace ‫کرده و در لیستی که ظاهر می شود دوبار روی‬

283
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫تغییر اسم فضای نام‬

‫فرایند تغییر اسم فضای نام‪ ،‬از همان منطقی که برای تغییر اسم متغیرها‪،‬کالس ها‪ ،‬و متدها تعریف کردیم پیروی می کند‪ .‬اگر نمی خواهید‬

‫خود به صورت دستی اسم را تغییر دهید‪ ،‬می توانید از ‪ Code Editor‬استفاده کنید‪ .‬برای این منظور‬

‫در ‪ ،Code Editor‬ابتدا اسم فضای نام مورد نظر را پیدا کنید‪ .‬سپس روی پیکان تَگ فضای نام مذکور کلیک کرده و یک گزینه را از‬

‫فهرست آن انتخاب کنید‪.‬‬

‫روی اسم راست کلیک کرده‪ ،‬سپس گزینه ی ‪ Rename...‬را انتخاب کنید‪.‬‬

‫معرفی فضای نام توکار (‪)built-in namespaces‬‬

‫پنجره ی ‪Object Browser‬‬

‫برنامه ی‪ NET Framework.‬کتابخانه ای بسیار غنی و گسترده است‪ .‬مزیت برجسته ی آن‪ ،‬مجموعه ی بزرگ و گسترده ی کالس های آن‬

‫است‪ .‬برای سازمان دهی این کالس ها‪ ،‬برنامه ی‪ NET Framework.‬فضاهای نامی متعددی ایجاد کرده و به کار می برد‪ .‬از هر فضای نامی به‬

‫وجود آمده به منظور ایجاد یک مجموعه کالس (های) منحصر به فرد استفاده می شود‪.‬‬

‫‪ Microsoft Visual Studio‬پنجره ی ‪ Object Browser‬را برای بررسی و پویش فضاهای نامی برنامه ی‪ NET Framework.‬ارائه می دهد‪.‬‬

‫برای دسترسی به آن‬

‫‪284‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫فهرست گزینه ی اصلی را باز کرده‪ ،‬به ‪ View -> Object Browser‬مراجعه کنید‪.‬‬

‫در ‪ Standard toolbar‬روی دکمه ی ‪ Object Browser‬کلیک کنید‪.‬‬

‫اکنون‪ ،‬کلید ‪ F2‬را فشار دهید‪.‬‬

‫‪ Object Browser‬خود از سه پنجره تشکیل شده‬

‫‪285‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫پنجره ی سمت چپ فهرستی از کتابخانه های موجود را نمایش می دهد‪ .‬همان طور که در تصویر فوق مشاهده می کنید برخی از گره ها‬

‫(‪ )nodes‬اعدادی داخل عالمت ][ دارند‪ .‬این اعداد نشانگر نسخه ی‪ NET Framework.‬هستند‪ .‬چنانچه گره های مختلف ولی هم نام دارای‬

‫][ بودند‪ ،‬بدانید که کتابخانه ی مورد نظر در نسخه های متفاوت‪ NET Framework.‬ایجاد و به روز رسانی شده‪ .‬برای مثال‪4.0.0.0 ،‬‬

‫نشانگر ورژن ‪ Microsoft.NET Framework 4.0‬است‪.‬‬

‫به این خاطر که اغلب کتابخانه های مذکور فضاهای نام متعددی دارند‪ ،‬هر گره مجهز به دکمه ی ‪ +‬می باشد‪ .‬برای باز کردن گره‪ ،‬کافی است‬

‫روی ‪ +‬کلیک کنید‪ .‬پس از باز کردن کتابخانه مورد نظر‪ ،‬فضاهای نامی داخل آن به صورت گره پدیدار می شوند‪ .‬به دلیل این که اکثر فضاهای‬

‫نام حاوی چندین (بیش از یک کالس) کالس هستند‪ ،‬هر فضای نام مجهز به دکمه ی ‪ +‬می باشد‪ .‬همان طور که پیش تر ذکر شد برای باز کردن‬

‫آن‪ ،‬باید روی ‪ +‬کلیک کنید‪ .‬پس از باز کردن فضای نام دلخواه‪ ،‬فهرست کالس های آن ظاهر می شود‪ .‬برای مشاهده ی اعضای یک کالس (در‬

‫پنجره ی سمت چپ) روی اسم کالس مورد نظر کلیک کنید‪.‬‬

‫‪286‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫برای مشاهده ی توصیفی از یک عضو کالس (در پنجره ی باالیی سمت راست)‪ ،‬روی آن عضو کلیک کنید‪ .‬حال‪ ،‬پنجره ی پایینی سمت راست‬

‫اطالعاتی در رابطه با آیتم انتخابی شما ارائه می دهد‪.‬‬

‫معرفی فضای نام ‪System‬‬

‫پرکاربرد ترین فضای نام در ‪ System ،NET Framework.‬نام دارد‪ .‬برای استفاده از فضای نام ‪ System‬باید آن را داخل یک متد تایپ‬

‫کنید‪.‬‬

‫مثال‬

‫‪public class Exercise‬‬

‫‪287‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
{
static int Main()
{
System.Console.WriteLine("The wonderful world of C# programming");
return 0;
}
}

.‫ را به کار برد‬:: ‫ و عملگر‬global ‫ کلید واژه ی‬،System ‫همچنین می توان پیش از‬

public class Exercise


{
static int Main()
{
global::System.Console.WriteLine("The wonderful world of C# programming");
return 0;
}
}

‫ از همین روش برای اشاره و دسترسی به فضای‬.‫ استفاده می شود‬using ‫ از کلید واژه ی‬،‫پیش تر ذکر شد که برای دستیابی به یک فضای نام‬

.‫ نیز استفاده می شود‬System ‫نامی‬

‫مثال‬

using System;
public class Exercise
{
static int Main()
{
System.Console.WriteLine("The wonderful world of C# programming");
return 0;
}
}

.‫ به کار ببرید‬System ‫ را پیش از کلیدواژه ی‬global:: ‫این بار نیز می توانید‬

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

‫تمامی نوع داده هایی که تا کنون به کار برده ایم در ‪ NET Framework.‬در قالب (توسط) کالس ها نشان داده می شوند‪ .‬به عبارت دیگر‪،‬‬

‫نوع داده های مذکور خود مجهز به متد هستند‪ .‬کالس های مزبور در فضای نام ‪ System‬تعریف می شوند‪ .‬کالس های نوع داده های نام برده‬

‫بدین ترتیب تعریف می شوند‪.‬‬

‫‪289‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪C# Data Type‬‬ ‫‪Equivalent.NET Class C# Data Type Equivalent.NET Class‬‬

‫(نوع داده ی‬ ‫(کالس معادل در‪)NET.‬‬

‫‪)C#‬‬

‫‪bool‬‬ ‫‪Boolean‬‬ ‫‪char‬‬ ‫‪Char‬‬

‫‪byte‬‬ ‫‪Byte‬‬ ‫‪sbyte‬‬ ‫‪SByte‬‬

‫‪short‬‬ ‫‪Int16‬‬ ‫‪ushort‬‬ ‫‪UInt16‬‬

‫‪int‬‬ ‫‪Int32‬‬ ‫‪uint‬‬ ‫‪UInt32‬‬

‫‪long‬‬ ‫‪Int64‬‬ ‫‪ulong‬‬ ‫‪UInt64‬‬

‫‪float‬‬ ‫‪Single‬‬ ‫‪double‬‬ ‫‪Double‬‬

‫‪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.‬می باشد)‪.‬‬

‫ایجاد کتابخانه ی سفارشی‬

‫برنامه ی ‪ Microsoft Visual C#‬را اجرا کنید‪.‬‬ ‫‪.8‬‬

‫برای ایجاد برنامه ی جدید‪ ،‬فهرست اصلی را باز کرده‪ File -> New Project... ،‬را انتخاب کنید‪.‬‬ ‫‪.2‬‬

‫گزینه ی ‪ Windows‬را از لیست سمت چپ انتخاب کنید‪.‬‬ ‫‪.1‬‬

‫حال در لیست سمت راست روی ‪ Empty Project‬کلیک کنید‪.‬‬ ‫‪.4‬‬

‫اسم را به ‪ SaleRecord‬تغییر داده‪ ،‬سپس روی گزینه ی ‪ OK‬کلیک کنید‪.‬‬ ‫‪.5‬‬

‫‪ Save All‬کلیک کنید‪.‬‬ ‫به منظور ذخیره ی پروژه مورد نظر‪ ،‬به ‪ Standard toolbar‬مراجعه کرده‪ ،‬اکنون روی دکمه ی‬ ‫‪.6‬‬

‫در صورت پذیرفتن فولدر پیشنهادی (در مکانی که کامپیوتر توصیه می کند)‪ ،‬محل ذخیره سازی آن را به خاطر بسپرید‪ .‬در غیر این‬ ‫‪.4‬‬

‫صورت‪ ،‬مسیر دلخواه خود را وارد کنید و آن را به یاد بسپارید‪.‬‬


‫‪291‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫گزینه ی ‪ Save‬را کلیک کنید‪.‬‬ ‫‪.1‬‬

‫نحوه ی ایجاد کتابخانه‬

‫کتابخانه ممکن است از تنها یک فایل تشکیل شده باشد یا از چندین فایل متعدد (هر تعداد که الزم است)‪ .‬فایلی که عضوی از یک کتابخانه‬

‫هست می تواند یک یا چند کالس دربرداشته باشد‪ .‬هر کالس باید کارکردی را پیاده و فراهم کند که سرانجام برای تمامی کالس ها مفید‬

‫واقع شده و در دسترس آن ها قرار گیرد‪ .‬کالس های یک کتابخانه درست مثل کالس های دیگر برنامه ها ایجاد می شوند‪.‬‬

‫برای ایجاد کتابخانه‪ ،‬فهرست گزینه ی اصلی ‪ Microsoft Visual Studio‬را باز کرده‪ ،‬روی گزینه های ‪ File -> New Project..‬کلیک کنید‪.‬‬

‫در لیست میانی‪ ،‬می توانید روی ‪ Empty Project‬یا گزینه ی ‪ Class Library‬کلیک کنید‪ .‬حال‪ ،‬اسمی برای آن انتخاب کنید‪.‬‬

‫در صورت انتخاب گزینه ی ‪ Empty Project‬در پنجره ی محاوره ی ‪ ،New Project‬باید پنجره ی ‪ Properties‬را باز کرده‪ ،‬سپس در ‪Output‬‬

‫‪ Type combo box‬گزینه ی ‪ Class Library‬را انتخاب کنید‪.‬‬

‫در هر دو صورت‪ skeleton code ،‬ای در اختیار شما قرار می گیرد که می توانید باب میلتان به کارببرید‪.‬‬
‫‪292‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫مثال‬

public class Algebra


{
public double Addition(double x = 0, double y = 0)
{
return x + y;
}
public double Subtraction(double x = 0, double y = 0)
{
return x - y;
}
public double Multiplication(double x = 0, double y = 0)
{
return x * y;
}
public double Division(double x = 0, double y = 1)
{
return x / y;
}
}
293
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫راه اندازی کتابخانه‬

‫به فهرست گزینه ی اصلی (‪ )main menu‬مراجعه کرده‪ ،‬روی ‪ Project -> SaleRecord Properties...‬کلیک کنید‪.‬‬ ‫‪.8‬‬

‫در ‪ Output Type combo box‬گزینه ی ‪ Class Library‬را انتخاب کنید‪.‬‬ ‫‪.2‬‬

‫برای ایجاد فایل جدید‪ ،‬در فهرست گزینه ی اصلی‪ ،‬روی گزینه های ‪ Project -> Add New Item...‬کلیک کنید‪.‬‬ ‫‪.1‬‬

‫در لیست سمت چپ‪ Code ،‬را کلیک کنید‪.‬‬ ‫‪.4‬‬

‫در لیست سمت راست‪ Code File ،‬را انتخاب کنید‪.‬‬ ‫‪.5‬‬

‫اسم را به ‪ StoreItem‬تغییر داده‪ ،‬سپس روی ‪ Add‬کلیک کنید‪.‬‬ ‫‪.6‬‬

‫فایل را به صورت زیر اصالح کنید‪.‬‬ ‫‪.4‬‬


‫‪public class StoreItem‬‬
‫{‬
‫;‪public int itemNumber‬‬
‫‪294‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫;‪public string itemName‬‬
‫;‪public string size‬‬
‫;‪public decimal unitPrice‬‬
‫}‬

‫تمامی تغییرات وارد آمده را با کلیک روی دکمه ی ‪ Save all‬ذخیره کنید‪.‬‬ ‫‪.1‬‬

‫ساختن کتابخانه‬

‫به این خاطر که فایل انتخابی کتابخانه هست نه یک برنامه ‪ /‬فایل اجرایی‪ ،‬برای ترجمه (‪ )compile‬آن‬

‫در فهرست اصلی‪ ،‬می توانید روی ‪ Build -> Build ProjectName‬کلیک کنید‪.‬‬

‫در پنجره ی ‪ ،Solution Explorer‬ابتدا روی اسم پروژه ی مورد نظر راست کلیک کرده‪ ،‬سپس گزینه ی ‪ Build‬را انتخاب کنید‪.‬‬

‫در پنجره ی ‪ ،Class View‬روی اسم پروژه راست کلیک کرده‪ Build ،‬را انتخاب کنید‪.‬‬

‫برای ترجمه ی (‪ )compile‬کتابخانه در پنجره ی فرمان (‪ ،)Command Prompt‬دستور زیر را تایپ کنید‪.‬‬

‫‪csc /target:library NameOfFile.cs‬‬

‫اکنون کلید ‪ Enter‬را بزنید‪.‬‬

‫ایجاد کتاب خانه در برنامه‬

‫برای ایجاد کتابخانه‪ ،‬در فهرست اصلی روی گزینه های ‪ Build -> Build Solution‬کلیک کنید‪.‬‬

‫به کاربردن کتابخانه ی سفارشی (‪)custom library‬‬

‫پس از ایجاد پروژه می توانید آن (پروژه ی ایجاد شده) را در همان پروژه ای که کتابخانه در آن ساخته شده به کارببرید یا آن را در پروژه ای‬

‫دیگر مورد استفاده ی خود قرار دهید‪ ،‬در صورت کار با ‪ ،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 ،‬را کلیک کنید‪ ،‬اکنون می توانید متدها و کالس های کتابخانه را (به همان ترتیبی که از متدها و کالس‬

‫های کتابخانه ی‪ NET Framework،‬استفاده می کردید) به کار ببرید‪.‬‬

‫مثال‬

‫;‪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‬کنید‪ ،‬دستوری مشابه به دستور زیر را تایپ کنید‪.‬‬

‫‪csc /target:library /out:DesiredNameOfLibrary.dll NameOfFile.cs‬‬

‫نتیجه ی زیر را به دست می دهد‪.‬‬

‫‪244.58 + 5082.88 = 5327.46‬‬


‫‪Press any key to continue...‬‬

‫استفاده از کتابخانه ی سفارشی‬

‫برای راه اندازی پروژه ی جدید‪ ،‬در فهرست اصلی روی ‪ File -> New Project...‬کلیک کنید‪.‬‬ ‫‪.8‬‬

‫در لیست میانی‪ ،‬گزینه ی ‪ Empty Project‬را انتخاب کنید‪.‬‬ ‫‪.2‬‬

‫اسم را به ‪ DepartmentStore5‬تغییر داده‪ ،‬سپس ‪ Add‬را کلیک کنید‪.‬‬ ‫‪.1‬‬

‫‪297‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
Add ‫ سپس گزینه ی‬،‫ راست کلیک کرده‬References ‫ روی‬،DepartmentStore5 ‫ پایین‬،Solution Explorer ‫در پنجره ی‬ .4

.‫ را از لیست انتخاب کنید‬Reference...

.‫ مراجعه کنید‬Browse ِ‫اکنون به تَب‬ .5

.‫ پیدا کنید‬،‫فولدری را که کتابخانه در آن ایجاد شده‬ .6

.‫ را انتخاب کنید‬SaleRecord.dll ‫فایل‬ .4

.‫ را کلیک کنید‬OK .1

DepartmentStore5 -> Add -> New ‫ سپس‬،‫ راست کلیک کرده‬DepartmentStore5 ‫ روی‬،Solution Explorer ‫در پنجره ی‬ .1

Item...

.‫ کلیک کنید‬Code File ‫ در لیست میانی روی‬.82

.‫ را انتخاب کنید‬Add ‫ سپس گزینه ی‬،‫ تغییر داده‬DepartmentStore ‫ اسم را به‬.88

.‫ فایل را به صورت زیر اصالح کنید‬.82


using System;
public class Program
{
static int Main()
{
StoreItem si = new StoreItem();
si.itemNumber = 660284;
si.itemName = "Tropical Wool Neutral Jacket";
si.unitPrice = 200.00M;
Console.WriteLine("Store Inventory");
Console.Write("Item #: ");
Console.WriteLine(si.itemNumber);
Console.Write("Item Name: ");
Console.WriteLine(si.itemName);
Console.Write("Unit Price: ");
Console.WriteLine(si.unitPrice);
Console.WriteLine("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
System.Console.ReadKey();
return 0;
}
}

.‫ حال برنامه را اجرا کنید‬.81

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...‬‬

‫‪ .84‬به محیط برنامه نویسی باز گردید‪.‬‬

‫مقدمه ای بر کتابخانه های توکار‬

‫مقدمه ای بر کتابخانه ی ‪C#‬‬

‫برخالف خیلی از زبان های برنامه نویسی دیگر مثل ‪ 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‬کتابخانه ی بیان شده را به پروژه ی خود اضافه کنید‪.‬‬

‫نوع داده ی پویا (‪)dynamic data type‬‬

‫در دروس پیشین‪ ،‬با نوع داده های مختلفی از ‪ 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 ،‬را با مسائلی همچون تدارکات متغیر (مثل اینکه به چه قدر حافظه نیاز دارد) درگیر نمی کنیم تا زمانی که عملیاتی که به‬

‫متغیر نیاز دارد به آن (متغیر) دسترسی پیدا کند‪ .‬به چنین متغیری‪ ،‬متغیر پویا یا داینامیک گفته می شود‪.‬‬

‫برای تعریف متغیر پویا‪ ،‬از کلید واژه ی ‪ dynamic‬استفاده می کنیم‪.‬‬

‫مثال‬

‫‪public class Exercise‬‬


‫{‬
‫)(‪static int Main‬‬
‫{‬
‫;‪dynamic value‬‬
‫;‪return 0‬‬
‫}‬
‫}‬

‫برخالف متغیری که با کلیدواژه ی ‪ var‬تعریف می شود‪ ،‬الزم نیست متغیر پویا را حین تعریف (آن) مقداردهی اولیه کنید‪ .‬به هر حال‪ ،‬باید‬

‫مقداری به آن اختصاص دهید (ترجیحاً پیش از به کار بردن آن)‪ .‬هنگامی که مقداری به متغیر پویا اختصاص می دهید‪ compiler ،‬بررسی‬

‫نمی کند چه مقدار حافظه مناسب یا مورد نیاز متغیر مزبور است‪ .‬چنانچه نشانگر موس را روی متغیر قرار دهید‪ Code Editor ،‬تنها نوع متغیر‬

‫(پویا) را به شما نشان می دهد ‪:‬‬

‫‪301‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫متغیر پویا اغلب زمانی استفاده می شود که پروژه ی شما نیاز به برقراری ارتباط با برنامه ی کاربردی (‪ )application‬خارجی دارد و از مقادیر‬

‫آن برنامه استفاده می کند‪ .‬نمونه ی آن ‪ Microsoft Word document‬یا صفحه گسترده ی ‪ Microsoft Excel‬است که توسط زبان ‪C#‬‬

‫طراحی شده‪ ،‬و کتابخانه ی خارجی وارد می کنند‪.‬‬

‫به کاربردن متغیر پویا‬

‫برای ایجاد پروژه ی جدید‪ ،‬در فهرست اصلی روی ‪ File -> New Project...‬کلیک کنید‪.‬‬ ‫‪.8‬‬

‫در لیست میانی‪ ،‬روی ‪ Empty Project‬کلیک کنید‪.‬‬ ‫‪.2‬‬

‫اسم آن را به ‪ DepartmentStore7‬تغییر داده‪ ،‬سپس روی ‪ Add‬کلیک کنید‪.‬‬ ‫‪.1‬‬

‫‪ .4‬در پنجره ی‪ ،Solution Explorer‬روی ‪ DepartmentStore7‬راست کلیک کرده سپس >‪DepartmentStore7 -> Add -‬‬

‫‪ New Item...‬را کلیک کنید‪.‬‬

‫‪ .5‬گزینه ی ‪ Code File‬را از لیست میانی انتخاب کنید‪.‬‬

‫‪ .6‬اسم را به ‪ PayrollProcessing‬تغییر داده و روی ‪ Add‬کلیک کنید‪.‬‬

‫به فهرست گزینه ی اصلی مراجعه کرده و گزینه های ‪ Project -> Add Reference...‬را انتخاب کنید‪.‬‬ ‫‪.4‬‬

‫حال روی تَبِ ‪ .NET‬کلیک کنید‪.‬‬ ‫‪.1‬‬

‫در لیست موردنظر‪ Microsoft. CSharp،‬را انتخاب کنید‪.‬‬ ‫‪.1‬‬

‫‪302‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
.‫ را کلیک کنید‬OK .82

.‫ فایل را به صورت زیر اصالح کنید‬.88

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

‫‪ .82‬برنامه را اجرا کنید‪ .‬نتیجه ی زیر حاصل می گردد‪.‬‬

‫==============================‬
‫‪Payroll Summary‬‬
‫‪------------------------------‬‬
‫‪Employee Name: Patricia Katts‬‬
‫‪Hourly Salary: 22.75‬‬
‫‪Weekly Time: 38.5‬‬
‫‪Weekly Salary: 875.875‬‬
‫==============================‬

‫‪ .81‬پنجره ی ‪ DOS‬را بسته و به محیط برنامه نویسی بازگردید‪.‬‬

‫قابلیت همکاری‬

‫یکی از اهداف اصلی که در‪ .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‬‬
‫}‬
‫}‬

‫کتابخانه ی ‪CLI/Visual C++‬‬

‫در زمان های قبل ایجاد یک کتابخانه (به خصوص در ‪ )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 ،‬فایلی با‬

‫پسوند ‪ dll.‬ایجاد می کند‪.‬‬

‫به کاربردن کتابخانه‬

‫ایجاد کتابخانه در محیط ‪ 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 ‫تصور کنید کالسی به وجود آورده اید به نام‬

‫ به همین شکل می توان هر تعداد نمونه که مورد نیاز است از کالس‬.‫ نمونه ای از آن کالس نیز اطالق می گردد‬،‫ متغیر تعریف شده ی کالس‬.‫کنید‬

.‫(واحد) تعریف کرد‬

public class Book


{
public string title;
public string author;

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;
}
}

‫ ولی باید در نظر داشت که هر نمونه تنها مقدارهای خاص‬.‫ دسترسی به عضوهای کالس مربوط را فراهم می کند‬،‫هر یک از نمونه های گفته شده‬

.‫ توجه خود را به مثال زیر جلب کنید‬.‫اعضای نمونه ی مختص به خود را نگه می دارد‬

public class Exercise


{
static int Main()
{
var first = new Book();
first.title = "Psychology and Human Evolution";
first.author = "Jeannot Lamm";
first.yearPublished = 1996;
first.numberOfPages = 872;
first.coverType = 'H';
Console.WriteLine("Book Characteristics");
Console.Write("Title: ");
Console.WriteLine(first.title);
Console.Write("Author: ");
Console.WriteLine(first.author);
Console.Write("Year: ");
Console.WriteLine(first.yearPublished);
Console.Write("Pages: ");
Console.WriteLine(first.numberOfPages);
Console.Write("Cover: ");
Console.WriteLine(first.coverType);
var second = new Book();
second.title = "C# First Step";
second.author = "Alexandra Nyango";
second.yearPublished = 2004;
second.numberOfPages = 604;
second.coverType = 'P';
Console.WriteLine("Book Characteristics");
Console.Write("Title: ");
Console.WriteLine(second.title);
Console.Write("Author: ");
Console.WriteLine(second.author);
308
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫;)" ‪Console.Write("Year:‬‬
‫;)‪Console.WriteLine(second.yearPublished‬‬
‫;)" ‪Console.Write("Pages:‬‬
‫;)‪Console.WriteLine(second.numberOfPages‬‬
‫;)" ‪Console.Write("Cover:‬‬
‫;)‪Console.WriteLine(second.coverType‬‬
‫;)(‪Console.ReadKey‬‬
‫;‪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‬یا ایستا تلقی می گردد‪.‬‬

‫تعریف متغیر ایستا‬

‫برای تعریف متغیر (عضو یک) کالس به عنوان ایستا‪ ،‬باید کلید واژه ی ‪ static‬را در سمت چپ آن تایپ کنید‪ .‬به مثال زیر توجه کنید‪.‬‬

‫‪public class Book‬‬


‫{‬
‫;‪static string title‬‬
‫}‬
‫‪309‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫ برای کنترل سطح‬،‫ همان طور که در مباحث پیشین تشریح شد‬.‫به همین ترتیب می توانید هر تعداد متغیر ایستا که الزم می دانید معرفی کنید‬

‫ می توانید‬،modifier ‫ در صورت استفاده از‬.‫ (تنظیم کننده های سطح دسترسی) استفاده می شود‬modifier ‫دسترسی به فیلد های کالس از‬

.)‫ را پیش یا پس از آن به کار ببردید (البته مادام اینکه قبل از نوع داده استفاده شود‬static ‫کلیدواژه ی‬

‫مثال‬

public class Book


{
public static string title;
static public string author;
}

‫ این کار مستلزم‬.)‫ باید ابتدا مکان به کار گیری آن را تعریف کنید ( این که کجا می خواهید از آن استفاده کنید‬،‫برای دسترسی به متغیر ایستا‬

.‫تعیین (کردن) کالس متغیر ایستا است‬

‫مثال‬

public class Book


{
public static string title;
static public string author;
public short yearPublished;
public int pages;
public char coverType;
}
public class Exercise
{
static int Main()
{
var first = new Book();
Book.title = "Psychology and Human Evolution";
Book.author = "Jeannot Lamm";
first.yearPublished = 1996;
first.pages = 872;
first.coverType = 'H';
Console.WriteLine("Book Characteristics");
Console.Write("Title: ");
Console.WriteLine(Book.title);
Console.Write("Author: ");
Console.WriteLine(Book.author);
Console.Write("Year: ");
Console.WriteLine(first.yearPublished);
Console.Write("Pages: ");

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 ‫ فلیدهای‬،‫ در مثال ذیل‬.‫دسترسی به آن ها متغیری از کالسشان تعریف کنید‬

.‫ قابل دسترسی می باشد‬Exercise ‫ برای کالس‬،Book ‫کالس‬

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;
}
}

.‫نتیجه ی زیر را به دست می دهد‬


Book Characteristics
Title: Psychology and Human Evolution
Author: Jeannot Lamm
Pages: 472
Price: 24.95

.‫ به مثال های زیر توجه کنید‬.‫ عضو مورد نظر را را تایپ کرد‬،‫همچنین می توان ابتدا اسم کالس و به دنبال آن نقطه‬
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 . . .‬‬

‫توابع سازنده ی ‪Static‬‬

‫می توان ‪ 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‬که در تابع سازنده مقداردهی اولیه شدند‪ ،‬می بینید که آن فیلدها مقادیر‬

‫تخصیص یافته را درخود ذخیره کرده و آماده ی استفاده دارند‪.‬‬


‫;‪using System‬‬
‫‪public class Person‬‬
‫{‬
‫;‪public static string firstName‬‬
‫)(‪static Person‬‬
‫{‬
‫;"‪firstName = "Gertrude‬‬
‫}‬
‫}‬
‫‪public class Exercise‬‬
‫{‬
‫)(‪public static int Main‬‬
‫{‬
‫;)"‪Console.WriteLine("Personal Identification‬‬
‫;)" ‪Console.Write("Name:‬‬
‫;)‪Console.WriteLine(Person.firstName‬‬
‫;)(‪Console.ReadKey‬‬
‫;‪return 0‬‬
‫}‬
‫}‬
‫نتیجه ی زیر را به دنبال دارد‪:‬‬
‫‪Personal Identification‬‬
‫‪Name: Gertrude‬‬
‫‪Press any key to continue . . .‬‬

‫از آنجایی که تابع سازنده ‪ static‬می باشد‪ ،‬دسترسی به آن از طریق اعالن متغیر برای کالس مورد نظر امکان پذیر نمی باشد‪.‬‬

‫‪318‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫قانون دیگری که در کار با تابع سازنده ی ‪ static‬باید رعایت کرد این است که نباید تحت هیچ شرایطی به آن تنظیم کننده ی سطح دسترسی‬

‫(‪ )access modifier‬اضافه کرد‪ .‬کد زیر با خطا مواجه می شود‪:‬‬


‫‪public class Person‬‬
‫{‬
‫)(‪public static Person‬‬
‫{‬
‫}‬
‫}‬

‫می توانید یک کالس تعریف کنید که ترکیبی از تابع سازنده ی ‪ static‬و یک یا چند تابع ‪ constructor‬غیر ‪ static‬می باشد‪ .‬مثال‪:‬‬

‫‪public class Person‬‬


‫{‬
‫;‪public string firstName‬‬
‫;‪public string lastName‬‬
‫)(‪static Person‬‬
‫{‬
‫}‬
‫)‪public Person(string first, string last‬‬
‫{‬
‫;‪firstName = first‬‬
‫;‪lastName = last‬‬
‫}‬
‫}‬

‫اگر چنین کالسی تعریف کرده و متغیری برای آن اعالن کنید‪ constructor ،‬پیش فرضی برای آن وجود نداشته یا در حال حاضر دسترس پذیر‬

‫نمی باشد‪ .‬اگر هم می خواهید متغیری برای آن تعریف کنید‪ ،‬بایستی از یک ‪ constructor‬که دو پارامتر ورودی می گیرد (آن متغیر را به عنوان‬

‫آرگومان می پذیرد)‪ ،‬استفاده نمایید‪ .‬مثال‪:‬‬


‫;‪using System‬‬
‫‪public class Person‬‬
‫{‬
‫;‪public string firstName‬‬
‫;‪public string lastName‬‬
‫)(‪static Person‬‬
‫{‬
‫}‬
‫)‪public Person(string first, string last‬‬
‫{‬
‫;‪firstName = first‬‬
‫;‪lastName = last‬‬
‫}‬
‫}‬
‫‪public class Exercise‬‬
‫{‬

‫‪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‬در واقع ارجاع به کالس جاری می باشد)‪.‬‬

‫مثال‬

‫‪public class House‬‬


‫{‬
‫;‪internal char propertyType‬‬
‫;‪internal uint bedrooms‬‬
‫)(‪internal void Display‬‬

‫‪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‬کمک گرفت‪.‬‬

‫به هیچ وجه نمی توان از شی ‪ this‬در متد ‪ static‬استفاده کرد‪.‬‬

‫بررسی اجمالی اعداد‬

‫زبان ‪ ،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‬‬
‫}‬
‫}‬

‫نتیجه ی زیر را به دست می دهد‪.‬‬

‫‪Short Integer:‬‬ ‫‪225‬‬


‫‪Integral Number: -847779‬‬
‫‪Double-Precision: 9710.275‬‬
‫‪Extended Precision: 35292742.884295‬‬
‫‪Press any key to continue...‬‬

‫هنگام مقداردهی اولیه متغیر با یک ثابت (‪ ،)constant‬در واقع مشخص می کنید که متغیر نام برده مثبت باشد یا منفی و یا ‪ 2‬که سرانجام‬

‫عالمت آن متغیر محسوب می شود‪ .‬در صورتی که مقدار متغیر را از راه دیگری به دست آورید‪ ،‬ممکن است عالمت آن مشخص نشود‪ .‬اگر چه‬
‫‪325‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫ متدی در اختیار شما‬math ‫ اما کالس‬،‫می توان با استفاده از عملگر های مقایسه عالمت متغیر (مثبت یا منفی بودن عدد) را به دست آورد‬

.‫قرار می دهد که این کار را برای شما انجام می دهد‬

‫) آن ها به شکل زیر‬syntax( ‫ البته متد مذکور در نسخه های مختلف که دستور نحوی‬.‫ را فراخواند‬Math.Sign() ‫برای این منظور باید متد‬

.‫است اضافه بارگذاری شده‬

public static int Sign(sbyte value);


public static int Sign(short value);
public static int Sign(int value);
public static int Sign(long value);
public static int Sign(sbyte value);
public static int Sign(double value);
public static int Sign(decimal value);

.‫ متد نتایج زیر را بر می گرداند‬.‫ متغیر یا مقدار دلخواه را به عنوان آرگومان ارسال کنید‬،‫هنگام فراخوانی این متد‬

.‫ چنانچه آرگومان منفی بود‬-8

.‫ بود‬2 ‫ چنانچه آرگومان‬2

.‫ چنانچه آرگومان مثبت بود‬8

‫مثال های فراخوانی متد‬

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‬در این زمینه کمک شایانی به شما می کند‪.‬‬

‫برای به دست آوردن بخش عدد صحیح یک رقم دهدهی‪ ،‬کالس ‪ Math‬با متد )(‪ Trancate‬این امکان را برای شما فراهم می کند‪ .‬متد باال در‬

‫دو نسخه ی زیر اضافه بار گذاری شده و دستور نحوی آن به شرح زیر است‪.‬‬

‫;)‪public static double Truncate(double d‬‬


‫;)‪public static double Truncate(double d‬‬

‫هنگام فراخوانی این متد‪ ،‬یک عدد یا متغیر از نوع شناور‪ ،‬دابل و دهدهی به آن ارسال کنید‪ .‬متد نام برده بخش عدد صحیح یک مقدار را باز‬

‫می گرداند‪.‬‬

‫مثال‬

‫;‪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 ‫مزبور در ورژن های متفاوت اضافه بارگذاری شده که هر نسخه با نوع داده ی‬

.‫نحوی آن ها به شرح زیر است‬

public static byte Min(byte val1, byte val2);


public static sbyte Min(sbyte val1, sbyte val2);
public static short Min(short val1, short val2);
public static ushort Min(ushort val1, ushort val2);
public static int Min(int val1, int val2);
public static uint Min(uint val1, uint val2);
public static float Min(float val1, float val2);
public static long Min(long val1, long val2);
public static ulong Min(ulong val1, ulong val2);
public static double Min(double val1, double val2);
public static decimal Min(decimal val1, decimal val2);
‫مثال‬
using System;
class Program
{
static int Main()
{
int number1 = 8025;
int number2 = 73;
Console.WriteLine("The minimum of {0} and {1} is {2}", number1, number2, Math.Min(number1, number2));
Console.ReadKey();
return 0;
}
}

.‫نتیجه ی زیر حاصل می گردد‬

The minimum of 8025 and 73 is 73


Press any key to continue...

: ‫ برای تعریف متغیرهای مورد نظر استفاده کرد‬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;
}
}

‫ یک سری‬integer ‫بیشینه ی مقدار‬

.‫ دستور نحوی این متد به ترتیب زیر است‬.‫) فراخواند‬Math ‫ را (از کالس‬Max() ‫ می توان متد‬،‫برای بدست آوردن بیشینه ی دو عدد‬

public static byte Max(byte val1, byte val2);


public static sbyte Max(sbyte val1, sbyte val2);
public static short Max(short val1, short val2);
public static ushort Max(ushort val1, ushort val2);
public static int Max(int val1, int val2);
public static uint Max(uint val1, uint val2);
public static float Max(float val1, float val2);
public static long Max(long val1, long val2);
public static ulong Max(ulong val1, ulong val2);
public static double Max(double val1, double val2);
public static decimal Max(decimal val1, decimal val2);

‫مثال فراخوانی متد باال‬

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
‫نتیجه‬

‫‪The maximum of 8025 and 73 is 8025‬‬


‫‪Press any key to continue...‬‬

‫تبدیل مقادیر‬

‫تبدیل ضمنی‬

‫با نحوه ی تعریف نوع های رشته‪ ،‬ممیز شناور و صحیح (‪ )integral‬آشنا شدیم‪ .‬طریقه ی مقداردهی اولیه ی آن ها نیز تشریح شد‪ .‬در صورت‬

‫داشتن برنامه ای که متغیرهای مختلفی در آن به کار گرفته شده‪ ،‬می توان مقدار یک متغیر را به (مقدار) متغیر دیگری تبدیل کرد‪ .‬در درس ‪8‬‬

‫با مقدار حافظه ی مورد نیاز برای ذخیره سازی متغیر هر نوع داده آشنا شدیم‪.‬‬

‫‪Data Type‬‬ ‫‪Name‬‬ ‫‪Memory Size‬‬

‫‪byte‬‬ ‫‪Byte‬‬ ‫‪8 bits‬‬

‫‪sbyte‬‬ ‫)بایت با عالمت( ‪Signed Byte‬‬ ‫‪8 bits‬‬

‫‪char‬‬ ‫‪Character‬‬ ‫‪16 bits‬‬

‫‪short‬‬ ‫)عدد صحیح کوچک( ‪Small Integer‬‬ ‫‪16 bits‬‬

‫‪ushort‬‬ ‫‪Unsigned Small Integer‬‬ ‫‪16 bits‬‬

‫‪int‬‬ ‫)عدد صحیح عالمت دار(‪Signed Integer‬‬ ‫‪32 bits‬‬

‫‪uint‬‬ ‫)عدد صحیح بدون عالمت(‪Unsigned Integer‬‬ ‫‪32 bits‬‬

‫‪float‬‬ ‫‪ 32 bits‬عدد با ممیز ( ‪Single-Precision Floating-Point Number‬‬

‫)شناور با تنها یک رقم اعشار‬

‫‪330‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪double‬‬ ‫عدد با ( ‪Double-Precision Floating-Point Number‬‬ ‫‪64 bits‬‬

‫)ممیز شناور با دو رقم اعشار‬

‫‪long‬‬ ‫)عدد صحیح بزرگ عالمت دار( ‪Signed Long Integer‬‬ ‫‪64 bits‬‬

‫‪ulong‬‬ ‫‪Unsigned Long Integer‬‬ ‫‪64 bits‬‬

‫‪decimal‬‬ ‫(عدد (‪Extended Precision Floating-Point Number‬‬ ‫‪128 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‬‬
‫}‬
‫}‬

‫با اخطار زیر مواجه می شوید‪.‬‬

‫‪Cannot implicitly convert type 'int' to 'short'.‬‬

‫تبدیل (نوع) مقدار عبارتند از تبدیل یک مقدار به مقداری با نوع متفاوت‪ .‬برای مثال‪ ،‬مقداری ‪ 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.‬برگرفته شده است‪.‬‬

‫‪C# Data Type‬‬ ‫‪Name‬‬ ‫‪.NET Framework Structure‬‬

‫‪bool‬‬ ‫‪Bollean‬‬ ‫‪Boolean‬‬

‫‪byte‬‬ ‫‪Byte‬‬ ‫‪Byte‬‬

‫‪sbyte‬‬ ‫‪Signed Byte‬‬ ‫‪SByte‬‬

‫‪char‬‬ ‫‪Character‬‬ ‫‪Char‬‬

‫‪short‬‬ ‫‪Small Integer‬‬ ‫‪Int16‬‬

‫‪ushort‬‬ ‫‪Unsigned Small Integer‬‬ ‫‪UInt16‬‬

‫‪int‬‬ ‫‪Integer‬‬ ‫‪Int32‬‬

‫‪uint‬‬ ‫‪Unsigned Integer‬‬ ‫‪UInt32‬‬

‫‪long‬‬ ‫‪Long Integer‬‬ ‫‪Int64‬‬

‫‪ulong‬‬ ‫‪Unsigned Long Integer‬‬ ‫‪UInt64‬‬

‫‪334‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
float Single-Precision Floating-Point Single

double Double-Precision Floating-Point Double

decimal Extended Precision Floating- Decimal

Point Number

No Explicit Date/Time Value DateTime

Type

string String String

NET .‫ آغاز شده و با اسم‬To ‫ کالس مزبور مجهز به متد ایستایی است که نام آن با‬،C# ‫ به نوع داده های‬Convert ‫برای تطبیق دادن کالس‬

‫ به منظور تبدیل عدد‬،‫ بر این اساس‬.‫ آن نوعی را می گیرد که باید تبدیل شود‬،‫ ساختارش پایان می یابد و به عنوان آرگومان‬Framework

‫را به عنوان آرگومان ارسال‬ double ‫ را فراخواند سپس متغیر‬ToInt32() ‫ می توان متد‬،int ‫ به عددی از نوع‬double ‫دهدهی از نوع‬

.‫ دستور نحوی آن به صورت زیر است‬.‫کرد‬

public static int ToInt32(double value);


‫مثال‬

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‬هست‪ ،‬این در‬

‫حالی است که مقدار مطلق ‪ 82 ، -82‬است‪.‬‬

‫برای به دست آوردن مقدار مطلق یک عدد‪ ،‬کالس ‪ Math‬مجهز به متدی است به نام ‪ ،Abs‬که در نسخه های متعدد اضافه بار گذاری‬

‫(‪ )overload‬شده است‪ .‬دستور زبان (‪ )syntax‬آن ها به شرح زیر است‪.‬‬

‫;)‪public static sbyte Abs(sbyte value‬‬


‫;)‪public static short Abs(short value‬‬
‫;)‪public static int Abs(int value‬‬
‫;)‪public static float Abs(float value‬‬
‫;)‪public static double Abs(double value‬‬
‫;)‪public static long Abs(long value‬‬
‫;)‪public static decimal Abs(decimal value‬‬
‫متد فوق آرگومانی می گیرد که باید مقدار مطلق آن را به دست آورد ‪:‬‬

‫;‪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‬‬
‫}‬
‫}‬
‫نتیجه ی زیر را بدست می دهد‪.‬‬

‫‪Original Value = -6844‬‬


‫‪bsolute Value = 6844‬‬
‫‪ress any key to continue...‬‬

‫‪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‬که در دو نسخه اضافه بارگذاری شده است‪ .‬دستور‬

‫نحوی این دو نسخه به صورت زیر می باشد‪.‬‬

‫;)‪public static double Ceiling(double a‬‬


‫;)‪public static decimal Ceiling(decimal d‬‬

‫متد باال به عنوان آرگومان یک متغیر عدد با ممیز اعشار می گیرد که سقف آن را باید به دست آورد‪.‬‬

‫مثال‬

‫;‪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‬پیاده سازی خودش از متد نام برده را با دستور نحوی زیر ارائه می دهد‪.‬‬

‫;)‪public static decimal Ceiling(decimal d‬‬

‫کف (کمترین مقدار) یک عدد‬

‫دو عدد اعشاری ‪ 128.44‬و ‪ -36.72‬را در نظر بگیرید‪ 128.44 .‬بین دو عدد ‪ 128‬و ‪ 129‬قرار دارد که ‪ 821‬عدد کوچکتر محسوب می شود‪- .‬‬

‫‪ 36.72‬بین دو عدد ‪ -37‬و ‪ -36‬قرار گرفته که ‪ -37‬عدد کوچکتر محسوب می شود‪ .‬کمترین یا پایین ترین ولی در عین حال نزدیک ترین مقدار‬

‫‪ integer‬یک عدد را کف آن عدد می گویند‪.‬‬

‫برای بدست آوردن کمترین مقدار یک عدد کالس ‪ ،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‬‬
‫}‬
‫}‬
‫نتیجه ی زیر حاصل می گردد‪.‬‬

‫‪The floor of 1540.25 is 1540‬‬


‫‪he floor of -360.04 is -361‬‬
‫‪ress any key to continue...‬‬

‫به جای استفاده از کالس ‪ ،Math‬می توان ساختار ‪ Double‬را به کار برد که متدی ویژه ی بدست آوردن کم ترین مقدار (کف) عدد اعشاری‬

‫دارد‪ .‬دستور نحوی آن به شکل زیر است ‪:‬‬

‫;)‪public static decimal Ceiling(decimal d‬‬

‫توان یک عدد‬

‫در ‪ #C‬توان با فرمول زیر انجام می شود ‪:‬‬

‫‪ReturnValue = X y‬‬
‫کالس ‪ Math‬برای انجام عملیات توان‪ ،‬متد ‪ Pow‬را در اختیار شما قرار می دهد که دستور نحوی آن به شکل زیر است ‪:‬‬

‫;)‪public static double Pow(double x, double y‬‬


‫‪339‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫ را‬x ‫ آرگومان‬،‫ که توان نامیده می شود‬،y ،‫ آرگومان دوم‬.‫ عدد پایه است که باید ارزیابی شود‬،x ،‫ آرگومان اول‬.‫این متد دو آرگومان می گیرد‬

.‫ می برد‬y ‫به توان آرگومان‬

‫مثال‬

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;
}
}

‫نتیجه‬

Pow(25.38، 3.12) = 24099.8226934415


Press any key to continue...

)the Exponentional( ‫مقدار نمایی‬

‫ دستور نحوی آن به شکل زیر‬.‫() را برای این منظور در نظر گرفته است‬Exp ‫ متد‬،Math ‫ کالس‬.‫می توان مقدار نمایی یک عدد را محاسبه کرد‬

.‫می باشد‬

public static double Exp (double d);


‫مثال‬

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
‫نتیجه ی زیر به دست می آید ‪:‬‬

‫‪The exponential of 709.78222656 is 1.79681906923757E+308‬‬


‫‪Press any key to continue...‬‬

‫چنانچه مقدار ‪ x‬از عدد (تقریبی) ‪ -708.395996093‬کوچکتر بود‪ ،‬مقدار صفر برگردانده می شود و وضعیت پاریز (‪ )underflow‬رخ می‬

‫دهد‪ .‬در صورتی که مقدار آرگومان ‪ x‬بزرگتر از عدد (تقریبی) ‪ 709.78222656‬بود‪( ،‬نتیجه) وضعیت سرریز (‪ )overflow‬رخ می دهد‪.‬‬

‫لگاریتم طبیعی‬

‫برای محاسبه لگاریتم طبیعی یک عدد‪ ،‬می توان متد ‪)(Math.Log‬را فراخواند‪ .‬متد مزبور به دو صورت زیر ارائه می شود‪ .‬دستور نحوی یکی از‬

‫آن دو‬

‫;)‪public static double Log(double d‬‬


‫مثال‬

‫;‪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‬‬
‫}‬
‫}‬
‫نتیجه ی زیر حاصل می شود‪.‬‬

‫‪Log of 12.48 is 2.52412736294128‬‬


‫‪Press any key to continue...‬‬

‫لگاریتم پایه ی ‪82‬‬

‫متد ‪ )(Math.Log10‬لگاریتم پایه ی ‪ 82‬یک عدد را محاسبه می کند‪ .‬دستور نحوی متد نام برده به صورت زیر است‪.‬‬

‫;)‪public static double Log10(double d‬‬

‫‪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‬‬
‫}‬
‫}‬
‫نتیجه ی زیر حاصل می گردد‪.‬‬

‫‪Log of 12.48 is 1.09621458534641‬‬


‫‪Press any key to continue...‬‬

‫لگاریتم به هر مبنایی‬

‫متد ‪ )(Math.Log‬نسخه ی دیگری فراهم می کند که دستور نحوی آن بدین صورت است‪.‬‬

‫;)‪public static double Log(double a, double newBase‬‬

‫متغیری که مقدار لگاریتمی آن محاسبه می شود‪ ،‬به عنوان اولین آرگومان به متد ارسال می گردد‪ .‬آرگومان دوم به شما اجازه می دهد مبنای‬

‫(لگاریتم) دلخواه خود را تعیین کنید‪ .‬چنین متدی از فرمول زیر استفاده می کند‪.‬‬

‫‪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;
}
}
‫نتیجه‬

Log of 12.48 is 1.82077301454376


Press any key to continue...

‫ جذر‬/ ‫ریشه ی دوم‬

‫ که دستور‬Sqrt ‫ مجهز به متدی است به نام‬Math ‫ کالس‬،‫ برای این منظور‬.‫می توان ریشه ی مربع یک عدد مثبت اعشاری را به دست آورد‬

.‫نحوی آن به شکل زیر می باشد‬

public static double Sqrt(double d);

.‫ را برمی گرداند‬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п‬یا ‪ 2 * R * п‬و یا ‪2 * R * Pi‬‬

‫یک رادیان از فرمول ‪ 2Rп/R‬یا ‪ 2Rп/R rad‬به دست می آید که برابر است با ‪ 2п‬یا ‪.2 * Pi rad‬‬

‫برای انجام عملیات تبدیل بین درجه و رادیان (تبدیل درجه به رادیان)‪ ،‬می توان از فرمول زیر استفاده کرد ‪:‬‬

‫‪ 360˚ = 2п rad‬که برابر است با ˚‪.1 rad = 360˚ / 2п = 57.3‬‬

‫کسینوس یک مقدار‬

‫شکل هندسی زیر را در نظر بگیرید‪.‬‬

‫حال ‪ AB‬را‪ ،‬طول نقطه ی ‪ A‬تا ‪ B‬در نظر بگیرید که از آن به عنوان وتر (‪ )hypotenuse‬یاد می شود‪ .‬همچنین تصور کنید ‪ AC‬طول نقطه ی ‪A‬‬

‫تا ‪ C‬است که ضلع مجاور (‪ )Adjacent‬نقطه ی ‪ A‬نیز خوانده می شود‪ .‬کسینوس زاویه ی نقطه ی ‪ A‬نسبت ‪ AC/AB‬می باشد‪ .‬به عبارت‬

‫دیگر‪ ،‬نسبت ضلع مجاور‪ ،AC ،‬بر وَتر‪AB‬‬

‫مقدار باز گردانده شده حاصل تقسیم‪ ،‬عددی با دو رقم اعشار بین ‪ -1‬و ‪ 8‬می باشد‪.‬‬

‫برای محاسبه ی کسینوس یک زاویه‪ ،‬کالس ‪ Math‬متد )(‪ Cos‬را به کار می برد‪ .‬دستور نحوی آن به شکل زیر است‪.‬‬

‫;)‪public static double Cos(double d‬‬


‫مثال‬

‫‪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;
}
}
‫نتیجه‬

The cosine of 82 is 0.949677697882543


Press any key to continue...

‫سینوس یک مقدار‬

‫ که ضلع مقابل‬،B ‫ تا نقطه ی‬C ‫ طول نقطه ی‬،‫ را در نظر بگیرید‬CB ‫ همچنین‬.‫ در نظر بگیرید که همان وتر نام دارد‬B ‫ تا‬A ‫ را طول نقطه ی‬AB

.AB ‫ بر وتر‬CB ،‫ نسبت ضلع مقابل‬،‫؛ به عبارت دیگر‬CB/AB ‫ سینوس یک مقدار عبارتند از نسبت‬.‫نامیده می شود‬

‫ دستور نحوی آن‬.‫ فراخواند‬Math ‫ را از کالس‬Sin() ‫ می توان متد‬،‫برای محاسبه ی سینوس یک مقدار‬

public static double Sin(double a);


‫مثال‬

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;
}
}
‫نتیجه‬

The sine of 82.55 is 0.763419622322519


Press any key to continue...

347
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫تانژانت‬

‫ بر‬BC ‫ نسبت‬،‫ هست؛ به عبارت روشن تر‬BC/AC ‫ تانژانت نتیجه ی‬.‫ در نظر بگیرید‬C ‫ تا‬B ‫ را طول نقطه ی‬BC ‫ و‬C ‫ تا‬A ‫ را طول نقطه ی‬AC

.‫ که دستور نحوی آن به شکل زیر می باشد‬Tan ‫ مجهز به متدی است به نام‬Math ‫ کالس‬،‫ برای کمک در محاسبه ی تانژانت یک عدد‬.AC

public static double Tan(double a);


‫مثال‬

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;
}
}
‫نتیجه‬

The tangent of 225 is -2.53211499233434


Press any key to continue...

Arc Tangent

arc ‫ به منظور محاسبه ی‬.‫ است‬BC/AC ‫ نسبت‬arc tangent .‫ در نظر بگیرید‬B ‫ تا نقطه ی‬A ‫ را طول‬AC ‫ و‬C ‫ تا‬B ‫ را طول نقطه ی‬BC

‫ دستور نحوی‬.‫ را مورد استفاده قرار داد‬Math.Atan() ‫ می توان متد‬،‫ یک مقدار‬tangent

public static double Atan(double d);


‫مثال‬

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
‫}‬
‫نتیجه‬

‫‪The arc tangent of 225 is 1.56635191161394‬‬


‫‪Press any key to continue...‬‬

‫خواندن وقالب بندی داده ها‬

‫درخواست (دریافت) مقدار رشته‬

‫در اغلب انتساب های ( که به آن دستور ‪ /assignment‬تساوی نیز می گویند و با عالمت = نشان داده می شود و کار آن کپی مقدار در متغیر‬

‫است ) کدنویسی‪ ،‬هنگام نوشتن برنامه ی کاربردی از مقدار رشته (‪ )string value‬خبر نداریم‪ .‬به منظور درخواست دریافت مقدار رشته (یا‬

‫هر متغیر دیگری که در این مبحث به آن می پردازیم)‪ ،‬باید توابع )(‪ Console.Read‬یا )(‪ Console.ReadLine‬را فراخوانده‪ ،‬سپس تابع‬

‫مذکور را به اسم متغیری که می خواهید مقدار آن را بازیابی کنید‪ ،‬اختصاص دهید‪.‬‬

‫مثال‬

‫برنامه ی ‪ Microsoft Visual Studio‬را اجرا کنید‪.‬‬ ‫‪.8‬‬

‫برای راه اندازی پروژه ی جدید به فهرست گزینه ی اصلی برنامه مراجعه کرده‪ ،‬گزینه ی ‪ File -> New Project‬را انتخاب کنید‪.‬‬ ‫‪.2‬‬

‫در لیست میانی روی ‪ Empty Project‬کلیک کنید‪.‬‬ ‫‪.1‬‬

‫اسم پروژه را به ‪ gdcs5‬تغییر دهید‪.‬‬ ‫‪.4‬‬

‫حال‪ ok ،‬را کلیک کنید‪.‬‬ ‫‪.5‬‬

‫در پنجره ی ‪ ،Solution Explorer‬روی ‪ gdcs5‬راست کلیک کرده‪ ،‬سپس ‪gdcs5 -> Add -> New Item... :‬‬ ‫‪.6‬‬

‫گزینه ی ‪ Code File‬را از لیست میانی آن انتخاب کنید‪.‬‬ ‫‪.4‬‬

‫اسم مورد نظر را به ‪ ClearningOrder‬تغییر داده و کلید ‪ Enter‬را بزنید‪.‬‬ ‫‪.1‬‬

‫اکنون‪ ،‬به منظور درخواست رشته ها از کاربر‪ ،‬فایل مورد نظر را به صورت زیر اصالح کنید‪.‬‬ ‫‪.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 -/-


Enter Customer Name: James Watson
Enter Customer Phone: (410) 493-2005
.‫ را فشار دهید‬Enter ‫ کلید‬.81

====================================
/- 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;
}
}

.‫ برنامه را اجرا کنید‬.2

‫مثال‬

-/- Georgetown Dry Cleaning Services -/-


Enter Customer Name: Genevieve Alton
Enter Customer Phone: (202) 974-8244
Number of Shirts: 8
Number of Pants: 2
Number of Dresses: 3
The Total order is: 28.711125
Amount Tended? 30
.‫ را بزنید‬Enter ‫ کلید‬،‫ حال‬.1

===============================
-/- 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‬‬
‫====================================‬

‫‪ .4‬پنجره ی ‪ DOS‬را ببندید‪.‬‬

‫درخواست تاریخ و زمان‬

‫هما ن فرایندی که برای دریافت هر رقم دیگری انجام می شود‪ ،‬می توان برای درخواست مقدار تاریخ پیاده کرد‪ .‬برای این منظور ابتدا الزم است‬

‫رشته را از کاربر درخواست کنید‪.‬‬

‫;‪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;
}
}

.‫ نتیجه ی زیر به دست می آید‬. ‫ حال برنامه را اجرا کنید‬.2

-/- Georgetown Dry Cleaning Services -/-


Enter Customer Name: Alexander Pappas
Enter Customer Phone: (301) 397-9764
Enter the order date and time (mm/dd/yyyyhh:mm AM/PM)
06/22/98 08:26 AM
Number of Shirts: 2
Number of Pants: 6
Number of Dresses: 0
The Total order is: 20.727000
Amount Tended? 50
.‫ را فشار دهید‬Enter ‫ کلید‬.1

====================================
-/- 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

placeholder ‫نمایش داده ها با‬

.‫ برای این منظور فایل مورد نظر را به صورت زیر اصالح کنید‬.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‬برنامه را اجرا کرده تا نتیجه ی آن را مشاهده کنید‪.‬‬

‫‪.1‬اکنون پنجره ی ‪ DOS‬را ببندید‬

‫تبدیل به رشته‬

‫پیش تر ذکر شد که هر آنچه در محیط ‪ 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‬قرار داد‪.‬‬

‫قالب بندی نمایش داده ها‬

‫‪ .8‬برای این منظور‪ ،‬فایل را به ترتیب زیر تغییر دهید‪.‬‬

‫‪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;
}
}

.‫ برنامه را اجرا کنید‬.2


-/- Georgetown Dry Cleaning Services -/-
Enter Customer Name: Gretchen McCormack
Enter Customer Phone: (410) 739-2884
Enter the order date and time (mm/dd/yyyyhh:mm AM/PM)
04/09/2001 10:25 AM
Number of Shirts: 5
Number of Pants: 12
Number of Dresses: 8
The Total order is: 80.951625
Amount Tended? 100
.‫ را بزنید‬Enter ‫ حال‬.1

====================================
-/- 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‬‬
‫}‬
‫}‬
‫نتیجه‬

‫‪Full Name:‬‬ ‫‪Anselme Bogos‬‬


‫‪Age:‬‬ ‫‪15‬‬
‫‪Distance: 22.74‬‬

‫عالمتی که برای پهنا (‪ )width‬در نظر می گیرید بسیار مهم است‪ .‬اگر مثبت بود‪ ،‬خط متن در سمت راست قرار می گیرد که باید ‪alignment‬‬

‫مرجع‪ ،‬به خصوص برای مقادیر عددی باشد‪ .‬حال چنانچه عالمتی که ارائه می دهید منفی باشد‪ ،‬متن در سمت چپ قرار می گیرد‪.‬‬

‫قالب بندی تاریخ و زمان‬

‫همان طور که پیش تر ذکر شد‪ ،‬هنگامی که کاربر مقدار زمان برای متغیر ‪ DateTime‬وارد می کند‪ compiler ،‬خود یک بخش زمان به مقدار‬

‫مذکور اضافه می کند‪ .‬اگر بخواهید تنها بخش زمان یا بخش تاریخ بررسی شود‪ ،‬الزم است این امر را برای ‪ compiler‬مشخص کنید‪ .‬برای این‬

‫منظور‪ ،‬نوع داده ی ‪ DateTime‬یک سری حروف در نظر گرفته است که با استفاده از آن می توان نحوه ی نمایش مقدار (نوع قالب بندی آن)‬

‫برای کاربر را تعیین کرد‪ .‬کاراکتر مورد نظر داخل ‪ placeholder‬متغیر ‪ DateTime‬پس از ‪ 2‬یا مقدار عددی افزایشی ( ‪incremental‬‬

‫‪ )numeric value‬باید تایپ شود‪.‬‬

‫مدیریت قالب بندی تاریخ ‪ /‬زمان‬

‫‪ .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;
}
}
}

‫ برنامه را اجرا کنید‬.2.


-/- Georgetown Dry Cleaning Services -/-
Enter Customer Name: Antoinette Calhoun
Enter Customer Phone: (703) 797-1135
Enter the order date(mm/dd/yyyy): 04/12/2002
Enter the order time(hh:mm AM/PM): 2:12 PM
Number of Shirts: 5
Number of Pants: 2
Number of Dresses: 1
The Total order is: $16.07
Amount Tended? 20
.‫ را فشار دهید‬Enter ‫ اکنون کلید‬.1
====================================
/- Georgetown Dry Cleaning Services -/-
===================================
ustomer: Antoinette Calhoun
ome Phone: (703) 797-1135
rder Date: Friday، April 12، 2002
rder Time: 2:12 PM
367
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫‪-----------------------------------‬‬
‫‪tem Type Qty Unit/Price Sub-Total‬‬
‫‪-----------------------------------‬‬
‫‪hirts 5 $0.95 $4.75‬‬
‫‪ants 2 $2.95‬‬ ‫‪$5.90‬‬
‫‪Dresses 1 $4.55‬‬ ‫‪$4.55‬‬
‫‪------------------------------------‬‬
‫‪Total Order: $15.20‬‬
‫‪Tax Rate: 5.75 %‬‬
‫‪Tax Amount: $0.87‬‬
‫‪Net Price: $16.07‬‬
‫‪------------------------------------‬‬
‫‪Amount Tended: $20.00‬‬
‫‪Difference: $3.93‬‬
‫====================================‬
‫‪ .4‬پنجره ی ‪ DOS‬را بسته و به محیط برنامه نویسی برگردید‪.‬‬
‫‪ .5‬به فهرست اصلی مراجعه کرده‪ ،‬گزینه ی ‪ File -> Close Solution‬را کلیک کنید‪.‬‬
‫‪ .6‬زمانی که از شما درخواست شد می خواهید ‪ Save‬کنید یا نه روی ‪ no‬کلیک کنید‪.‬‬

‫ترکیبات کالس ها‬

‫تودرتو کردن کالس ها (‪)class nesting‬‬

‫می توان کالسی را در دل کالسی دیگر گنجاند‪ .‬به کالسی که داخل کالسی دیگر ایجاد می شود‪ ،‬کالس ‪ nested‬یا تودرتو می گویند‪ .‬برای این‬

‫منظور‬

‫داخل کالس موجود کلیک کرده و کد مورد نیاز را برای کالس جدید وارد کنید‪ ،‬ابتدا کلید واژه ی ‪ ،class‬سپس یک اسم و کاراکتر {} را‬

‫تایپ کنید‪.‬‬

‫حال‪ ،‬کل کالس را انتخاب کنید‪ .‬روی انتخاب راست کلیک کرده و گزینه ی ‪ Surround With...‬را انتخاب کنید‪ .‬در لیستی که ظاهر می‬

‫شود روی ‪ class‬دوبار کلیک کنید‪.‬‬

‫در مثال زیر کالسی به نام ‪ Inside‬داخل کالس دیگری به نام ‪ Outside‬قرار گرفته‬

‫‪public class Outside‬‬


‫{‬
‫‪public class Inside‬‬
‫{‬
‫}‬
‫}‬

‫‪368‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫طبق دستور باال می توان هر تعداد کالس که الزم است در کالس های دیگر جای گذاری کرد‪ .‬طریقه ی مدیریت و کنترل کالس تودرتو هیچ‬

‫تفاوتی با (مدیریت) یک کالس عادی ندارد‪ .‬برای مثال‪ ،‬می توان تمامی فیلدها‪ ،‬متدها و ‪ properties‬مورد نیاز را داخل کالس تودرتو یا‬

‫کالس میزبان (کالس تودرتو) تعریف کرد‪ .‬هنگامی که کالسی را در کالس دیگر جای گذاری می کنید‪ ،‬هیچ گونه ارتباط (برنامه ای) خاصی بین‬

‫دو کالس به وجود نمی آید ‪ :‬یعنی تنها به صرف قرار گرفتن یک کالس در کالس دیگر‪ ،‬کالس تودرتو (‪ nested class‬یا کالس گنجانده شده)‬

‫به اعضای کالس میزبان (‪ )nesting class‬دسترسی فوری پیدا نخواهد کرد‪ .‬در حقیقت‪ ،‬این دو کالس از هم مجزا هستند‪.‬‬

‫اسم کالس تودرتو (کالس گنجانده شده) بیرون از کالس میزبان قابل رویت نیست‪ .‬برای دسترسی به کالس تودرتو بیرون از کالس میزبان‪،‬‬

‫باید اسم کالس تودرتو را هر جایی که می خواهید از آن استفاده کنید‪ ،‬تعریف کنید‪ .‬اگر می خواهید متغیر ‪ Inside‬را جایی درون برنامه ولی‬

‫بیرون از ‪ Outside‬تعریف کنید‪ ،‬الزم است اسم آن را تعریف کنید‪.‬‬

‫مثال‬

‫;‪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‬‬
‫}‬
‫}‬
‫نتیجه ی زیر را به دست می دهد‪.‬‬

‫=‪=- Outside -‬‬


‫‪-= Inside =-‬‬

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

Show me the wonderful world of C# Programming

Standing outside! It's cold and 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‬‬
‫}‬
‫}‬
‫نتیجه ی زیر به دست می آید‪.‬‬

‫‪-= Insider =-‬‬


‫=‪=- The Parent -‬‬
‫‪-= Insider =-‬‬
‫‪-= Insider =-‬‬
‫=‪=- The Parent -‬‬
‫!!‪Standing outside! It's cold and raining‬‬
‫‪Sitting inside while it's raining‬‬

‫کالسی به عنوان فیلد‬

‫م ثل تمامی متغیرهایی که تاکنون به کار برده ایم‪ ،‬می توان یک کالس یا ساختار را متغیر عضو کالسی دیگر کرد‪ .‬برای این که بتوانید کالس‬

‫دیگری را در کالس خود به کار ببرید‪ ،‬در وهله ی اول الزم است آن کالس را در دسترس داشته باشید‪ .‬هم می توانید از کالس های آماده ی‬

‫‪ C#‬برای این منظور استفاده کنید‪ ،‬هم می توانید کالس خود را ایجاد کنید‪.‬‬

‫مثال‬

‫‪public class Point‬‬


‫{‬
‫;‪internal short x‬‬
‫;‪internal short y‬‬
‫}‬
‫فیلد در حقیقت متغیر عضوی است که به جای نوع اولیه (‪ )primitive type‬از کالس دیگری ساخته می شود‪ .‬برای استفاده از یک کالس به‬

‫عنوان متغیر عضو کالسی دیگر‪ ،‬کافی است متغیر آن را تعریف کنید‪ .‬به مثال زیر توجه کنید‪.‬‬

‫‪373‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪public class Point‬‬
‫{‬
‫;‪internal short x‬‬
‫;‪internal short y‬‬
‫}‬
‫‪public class CoordinateSystem‬‬
‫{‬
‫;‪public Point start‬‬
‫}‬

‫پس از تعریف کالسی به عنوان عضو متغیر کالس دیگر‪ ،‬می توان از متغیر مزبور به طور منظم استفاده کرد‪ .‬به این خاطر که عضو مورد نظر یک‬

‫کالس است‪ ،‬که به عنوان (یک) ارجاع (‪ )reference‬معرفی شده‪ ،‬قوانینی وجود دارد که هنگام استفاده از آن باید رعایت کرد‪ .‬پس از‬

‫تعریف متغیر عضو‪ ،‬باید مطمئن شوید که حافظه ی کافی به آن تخصیص داده شده است‪ .‬همچنین الزم است متغیر مذکور صحیح و به طور‬

‫مقتضی مقداردهی (اولیه) شده باشد‪ .‬در غیر این صورت‪ ،‬هنگام ترجمه ی (‪ )compile‬برنامه با ‪ error‬مواجه می شوید‪.‬‬

‫استفاده از کالس به عنوان فیلد‬

‫‪ .8‬برنامه ی ‪ Microsoft Visual C#‬را راه اندازی کنید‪.‬‬

‫‪ .2‬برای ایجاد برنامه ی جدید‪ ،‬در فهرست اصلی برنامه روی ‪ File -> New Project...‬کلیک کنید‪.‬‬

‫‪ .1‬در لیست میانی‪ ،‬روی گزینه ی ‪ Empty Project...‬کلیک کنید‪.‬‬

‫‪ .4‬اسم پروژه را به ‪ ElectonicStore1‬تغییر داده‪ ،‬حال کلید ‪ Enter‬را فشار دهید‪.‬‬

‫‪ .5‬به منظور ایجاد کالس جدید‪ ،‬در پنجره ی ‪ ،Solution Explorer‬روی اسم پروژه راست کلیک کرده‪ ،‬اکنون نشانگر موس را روی‬

‫‪ Add‬قرار دهید و گزینه ی ‪ class‬را انتخاب کنید‪.‬‬

‫‪ .6‬اسم کالس را ‪ StoreItem‬انتخاب کنید‪ ،‬سپس روی گزینه ی ‪ Add‬کلیک کنید‪.‬‬

‫‪ .4‬فایل را به صورت زیر تکمیل کنید‪.‬‬

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

.‫ را از لیست میانی انتخاب کنید‬Code File ‫ گزینه ی‬.1

.‫ را فشار دهید‬Enter ‫ تغییر داده و کلید‬OrderProcessing ‫ اسم را به‬.82

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

‫کالس به عنوان یک نوع‬

‫بازگرداندن شی از متد‬

‫می توان مقدار یک کالس را از متد یک کالس بازگرداند‪ .‬برای این منظور‪ ،‬ابتدا متد را تعریف کرده‪ ،‬سپس کالس را به عنوان نوع بازگشتی‬

‫(‪ )return type‬مشخص می کنید‪.‬‬

‫مثال‬

‫‪public class Point‬‬


‫{‬
‫;‪internal short x‬‬
‫;‪internal short y‬‬
‫}‬
‫‪public class CoordinateSystem‬‬
‫{‬
‫;‪private Point start‬‬
‫;‪private Point end‬‬
‫)(‪public Point GetThePoint‬‬
‫{‬
‫}‬
‫}‬
‫پس از پیاده سازی (‪ )implementing‬متد‪ ،‬باید مقداری بازگردانید که با کالس همخوانی داشته باشد‪ ،‬در غیر این صورت حین ترجمه ‪/‬‬

‫کامپایل برنامه با ‪ error‬مواجه می شوید‪ .‬بنابراین‪ ،‬ابتدا متغیر کالس را در بدنه ی متد تعریف می کنید‪ ،‬در این خالل متغیر را مقداردهی‬

‫اولیه می کنید‪ ،‬سپس آن را باز می گردانید‪.‬‬

‫‪376‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫مثال‬

‫‪public class Point‬‬


‫{‬
‫;‪internal short x‬‬
‫;‪internal short y‬‬
‫}‬
‫‪public class CoordinateSystem‬‬
‫{‬
‫;‪private Point start‬‬
‫;‪private 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 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

Store Item Description


Category: L
Make: NEC
Model: VT48 Video Projector
Unit Price: $705.95
Discount Rate: 15.00 %
Discount Amount: $105.89
Price/Item: $600.06
Quantity: 1
Sale Total: $600.06
.‫ از برنامه خارج شده و به محیط برنامه نویسی بازگردید‬Enter ‫ با زدن‬.5

‫ارسال یک کالس به عنوان آرگومان خود آن کالس‬

‫ آرگومان را مثل هر کالس‬،‫ برای این منظور‬.‫می توان نمونه ای از یک کالس را به عنوان آرگومان به یکی از متدهای خود آن کالس فرستاد‬

.‫دیگری ارسال می کنید‬

‫مثال‬

public class Point


383
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫{‬
‫;‪internal int x‬‬
‫;‪internal int y‬‬
‫)‪public void Equivalent(Point Same‬‬
‫{‬
‫}‬
‫}‬
‫حال‪ ،‬می توانید هر کاری که می خواهید در بدنه ی متد انجام دهید‪ .‬همچنین‪ ،‬می توانید آرگومان را مورد استفاده قرار دهید‪ .‬حال در صورت‬

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

‫ترین روش استفاده از آرگومان‪ ،‬تخصیص (هر یک از) مقادیر آن به عضو های معادل و مربوط در کالس است‪.‬‬

‫مثال‬

‫‪public class Point‬‬


‫{‬
‫;‪internal int x‬‬
‫;‪internal int y‬‬
‫)‪public void Equivalent(Point Same‬‬
‫{‬
‫;‪this.x = Same.x‬‬
‫;‪this.y = Same.y‬‬
‫}‬
‫}‬
‫هنگام فراخوانی متد‪ ،‬الزم است نمونه ای از کالس به آن ارسال کنید‪ .‬در وهله ی اول کالس مورد نظر را ایجاد و تعریف می کنیم‪ ،‬بعد آن را‬

‫ارسال می کنیم‪.‬‬

‫مثال‬

‫;‪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;
}
}
.‫نتیجه ی زیر حاصل می گردد‬

Point Coordinates: A(4، 6)


Point Coordinates: A(4، 6)
Press any key to continue...

(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) ‫به جای متد رسمی‬

.)‫ آرگومان را بر اساس نیازتان به کار ببرید (نظر به اینکه تمامی اعضای کالس در دسترس هستند‬،‫سازنده‬

‫مثال‬

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.y = Same.y;
}
}

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);
}

static int Main(string[] args)


{
Point pt = new Point();
pt.x = 4;
pt.y = 6;
ShowPoint(pt);
Point One = new Point();
One.CreatePointOneUnitAway(pt);
ShowPoint(One);

387
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫;))‪One.CreatePointOneUnitAway(new Point(-8, -3‬‬
‫;)‪ShowPoint(One‬‬
‫;‪return 0‬‬
‫}‬
‫}‬
‫نتیجه ی زیر به دست می آید‪.‬‬

‫)‪Point Coordinates: A(4، 6‬‬


‫)‪Point Coordinates: A(5، 7‬‬
‫)‪Point Coordinates: A(-7، -2‬‬
‫‪Press any key to continue...‬‬

‫بازگرداندن کالسی از متد همان کالس‬

‫می توانید متدی در کالس ایجاد کنید که نمونه ای از همان کالس را بر می گرداند‪ .‬برای شروع کار‪ ،‬اسم کالس مربوط را در سمت چپ متد وارد‬

‫کنید‪.‬‬

‫مثال‬

‫‪public class Point‬‬


‫{‬
‫)(‪public Point MethodName‬‬
‫{‬
‫}‬
‫}‬
‫می توانید کا رهای متفاوتی با متد موردنظر انجام دهید‪ .‬اگر می خواهید مقدار جدیدی از کالس باز گردانید‪ ،‬می توانید نمونه ای از کالس را‬

‫تعریف و مقداردهی اولیه کرده‪ ،‬سپس آن را برگردانید‪ .‬به مثال زیر توجه کنید‪.‬‬

‫;‪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;
}
}

‫نتیجه‬

Point Coordinates: A(4، 6)


Point Coordinates: A(5، 5)
Press any key to continue...

‫ مقادیر جاری کالس را همراه با مقدارهای نمونه ی کالس به کار ببرید تا مقادیر جدیدی به دست‬،‫می توانید نمونه ای از کالس را تعریف کرده‬

.‫ سپس نمونه ی مذکور را برگردانید‬،‫آورید‬

‫مثال‬

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;
}
}
.‫نتیجه ی زیر را به دست می دهد‬

Point Coordinates: A(4، 6)


Point Coordinates: A(9، 11)
Press any key to continue...

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‬‬
‫}‬
‫}‬
‫نتیجه ی زیر حاصل می گردد‪.‬‬

‫)‪Point Coordinates: A(4، 6‬‬


‫)‪Point Coordinates: A(-7، 6‬‬
‫‪Press any key to continue...‬‬

‫شایان توجه است که می توان متدی ساخت که عالوه بر گرفتن آرگومان با کالس والد خود هم نوع باشد‪ .‬در متد‪ ،‬می توان به تمامی اعضای‬

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

‫مقدمه ای بر شرطی ها‬

‫متغیر های ‪Boolean‬‬

‫هنگام تعامل با کامپیوتر‪ ،‬کاربر ممکن است مقادیری را به برنامه ی در حال اجرا عرضه کند که برخی از این مقادیر معتبر هستند ولی برخی‬

‫دیگر نیاز به اصالحاتی دارند یا توسط رایانه رد می شوند‪ .‬برای جلوگیری از این رخداد مقادیر باید مرتب مورد بررسی قرار بگیرند‪ .‬اعتبار یک‬

‫مقدار در رابطه با نوعش بررسی می شود‪ .‬برای مثال‪ ،‬یک شرط می تواند درست باشد یا یک عدد مساوی عدد دیگری باشد‪.‬‬

‫برای اعتبار سنجی مقادیر‪ ،‬زبان ‪ C#‬یک سری نشانه عرضه می کند که از آن ها به عنوان عملگرهای ‪ Boolean‬یاد می شود‪.‬‬

‫تعریف متغیرهای ‪Boolean‬‬

‫‪ Microsoft Visual Studio‬را اجرا کنید‪.‬‬ ‫‪.8‬‬

‫برای ایجاد برنامه ی جدید‪ ،‬به فهرست اصلی مراجعه کرده‪ ،‬روی ‪ File -> New Project...‬کلیک کنید‪.‬‬ ‫‪.2‬‬

‫در فهرست میانی روی گزینه ی ‪ Empty Project‬کلیک کنید‪.‬‬ ‫‪.1‬‬

‫اسم مورد نظررا به ‪ NationalBank2‬تغییر دهید‪.‬‬ ‫‪.4‬‬

‫برای ایجاد فایل جدید‪ ،‬در پنجره ی ‪ ،Solution Explorer‬راست کلیک کرده سپس ‪NationalBank2 -> Add -> New Item...‬‬ ‫‪.5‬‬

‫گزینه ی ‪ Code File‬را از لیست میانی انتخاب کنید‪.‬‬ ‫‪.6‬‬

‫‪392‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
.‫ تغییر دهید‬Employee ‫اسم فایل را به‬ .4

.‫ را کلیک کنید‬Add .1

.‫ را به شکل زیر اصالح کنید‬Employee.cs ‫فایل‬ .1


public class Employee
{
public string EmployeeNumber;
public string FirstName;
public string LastName;
public double HourlySalary;
public Employee(string emplNbr = "00-000", string fName = "John",
string lName = "Doe", double salary = 0.00)
{
EmployeeNumber = emplNbr;
FirstName = fName;
LastName = lName;
HourlySalary = salary;
}
}

.NationalBank2 -> Add -> New Item... : ‫ راست کلیک کرده سپس‬،Solution Explorer ‫ در پنجره ی‬،‫ برای ایجاد فایل جدید‬.82

‫ تغییر دهید و کلید‬Management ‫ اسم آن را به‬.‫ انتخاب شده باشد‬Code File ‫ توجه داشته باشید که در لیست میانی گزینه ی‬.88

.‫ را بزنید‬Enter

.‫ فایل را به صورت زیر اصالح کنید‬.82

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

.‫ اطالعات الزم را به صورت زیر اصالح کنید‬.84

Employee # 88-602

First Name Joan

Last Name Gergman

Hourly Salary 16.85

.‫ را فشار دهید‬Enter ‫ کلید‬.85

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

‫به متغیری ‪ 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;
}
}

‫نتیجه‬

Drinking Under Age: True


Press any key to continue…
‫ مثال‬.‫ تغییر دهید‬false ‫ یا‬true ‫ را با تخصیص مقادیر‬Boolean ‫ مقدار متغیر‬،‫می توانید هر زمان که الزم می دانید‬

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...

Boolean ‫بازیابی مقدار متغیر‬

‫) را تایپ‬false ‫ (یا‬False ‫) یا‬true ‫ (یا‬True ‫ الزم است کاربر‬،‫ در این مورد‬.‫ را از کاربر در خواست کرد‬Boolean ‫می توان مقدار یک متغیر‬

.‫ کمک گرفت‬Console ‫ کالس‬ReadLine() ‫ یا‬Read() ‫ برای بازیابی آن باید از متدهای‬.‫کند‬

‫مثال‬

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;
}
}

‫مثال‬

Were you driving under age?


If Yes، enter True. Otherwise enter False: true
as Driving Under Age: True
ress any key to continue...

Boolean ‫ایجاد فیلد‬

‫ متغیر‬.‫ را به فیلد یک کالس تبدیل کرد‬Boolean ‫ می توان متغیر‬،‫مثل دیگر نوع متغیر هایی که در مباحث پیشین با آن برخورد داشتیم‬

.‫ تعریف می کنید‬Boolean ‫ یا نوع داده ی‬bool ‫ البته با کلید واژه ی‬،‫مذکور را مثل هر نوع متغیر دیگر‬

‫مثال‬

public class House


{
char typeOfHome;

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
}

.‫نتیجه ی زیر به دست می آید‬

=//= Altair Realtors =//=


=== Property Listing ===
Type of Home: C
Number of Bedrooms: 2
Number of Bathrooms: 1.5
Number of Stories: 18
Year Built: 2002
Has Car Garage: False
Monetary Value: 155825
Press any key to continue...

Boolean ‫آرگومان های‬

‫ چنین آرگومانی می تواند تنها دو مقدار‬.‫ به متد ارسال کرد‬Boolean ‫ یا‬bool ‫ می توان آرگومان (از) نوع‬،‫درست مثل پارامترهای انواع دیگر‬

.‫ را داشته باشد‬false ‫ یا‬true

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

‫مثالی از اجرای برنامه‬

‫‪Enter the type of house you want to purchase‬‬


‫‪1 - Single Family‬‬
‫‪2 - Townhouse‬‬
‫‪3 - Condominium‬‬
‫‪Your Choice: 3‬‬
‫‪Enter the type of garage you want‬‬
‫‪0 - Doesn't matter‬‬
‫‪1 - Interior‬‬
‫‪2 - Exterior‬‬
‫‪Your Choice: 1‬‬
‫‪---------------------------------------------------‬‬
‫‪House Type: 3‬‬
‫‪Garage Type: 1‬‬
‫‪Press any key to continue...‬‬

‫برای چنین برنامه ای‪ ،‬ارقام ممکن است گنگ یا مبهم باشد‪ .‬عدد ‪ ،8‬رقمی کلی است ولی در برنامه ی مورد نظر ممکن است نشانگر خانه ای با‬

‫ظرفیت گنجایش تنها یک خانوار باشد‪ .‬حال برنامه ی نام برده از ثابت ‪ 8‬در راه های معنی دار مختلفی بهره می برد‪ .‬برای ایجاد امکان دادن بیش‬

‫از یک معنی یا کاربرد به یک عدد ثابت‪ ،‬به خصوص هنگامی که قرار است عدد مربوطه جزئی از یک سری باشد‪ ،‬زبان برنامه نویسی ‪ C#‬به شما‬

‫اجازه می دهد یک نوع لیست ایجاد کنید‪.‬‬

‫‪ enumeration‬در واقع یک سری عدد صحیح ثابت (‪ )constant integer‬است که هر یک موقعیت خاصی در لیست دارد و با اسم مشخصی‬

‫شناسایی می شود‪ .‬بر این اساس‪ ،‬به جای به خاطر داشتن این که ثابت ‪ 8‬نشانگر تک خانوار است‪ ،‬می توان لیستی ایجاد کرد که نمونه ی خانه‬

‫ی مزبور را شامل می شود‪ .‬در لیست دیگر‪ ،‬به جای استفاده ی دوباره از ‪ ،8‬می توان اسم برای آن انتخاب کرد‪ .‬در نتیجه‪ ،‬در هر لیست ‪ ،‬اگرچه‬

‫ثابت ‪ 8‬باز هم در نظر گرفته می شود‪ ،‬حداقل معنای آن دقیق خواهد بود‪.‬‬

‫‪400‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫ایجاد ‪enumeration‬‬

‫برای این منظور‪ ،‬کلیدواژه ی ‪ enum‬و به دنبال آن اسم ‪ enumeration‬و همچنین اسمی مختص هر یک از آیتم های لیست را تایپ کنید‪ .‬اسم‬

‫شمارنده (‪ )enumerator‬و همچنین اسم تک تک آیتم های لیست از همان قوانینی که برای انتخاب اسم (ها) نام بردیم پیروی می کند‪.‬‬

‫فرمول ایجاد ‪ enumeration‬به شرح زیر است‪.‬‬

‫;}‪enum Enumeration_Name {Item1، Item2، Item_n‬‬

‫برای ایجاد ‪ ،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‬‬

‫پس از ایجاد ‪ ،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‬باید به متغیر تخصیص یابد‪ .‬برای این منظور‪ ،‬در سمت راست عملگر‬

‫جایگزین‪ ،‬اسم ‪ 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‬‬
‫}‬
‫}‬

‫نتیجه ی زیر را به دست می دهد‪.‬‬

‫‪House Type: SingleFamily‬‬


‫…‪Press any key to continue‬‬

‫‪ 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‬را خواهد داشت‪ .‬همچنین می توان مقداری را به‬

‫چندین عضو ‪ enumeration‬اختصاص داد‪.‬‬

‫مثال‬

‫;‪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‬را بیرون از پروژه اش مدیرت و تنظیم کرد‪ .‬به‬

‫عبارت دیگر‪ ،‬می توان ‪ 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‬باید همان قوانینی را که برای داده های نوع اولیه رعایت می کردیم پیاده کنیم ‪ :‬اسم ‪ ،enumeration‬به دنبال آن اسم‬

‫متغیر و نقطه ویرگول " ; "‪ .‬به مثال زیر توجه کنید ‪:‬‬

‫‪public enum HouseType‬‬


‫{‬
‫‪Unknown,‬‬
‫‪SingleFamily,‬‬
‫‪TownHouse,‬‬
‫‪Condominium‬‬
‫}‬
‫‪public class House‬‬
‫{‬
‫;‪HouseType propertyType‬‬
‫}‬

‫به همین ترتیب‪ ،‬می توان هر تعداد متغیر عضو که الزم است ایجاد کرد‪ .‬پس از تعریف متغیر‪ ،‬برای مقداردهی اولیه ی آن‪ ،‬عضو دلخواه‬

‫‪ )enumeration member( enumeration‬را به متغیر اختصاص دهید‪.‬‬

‫مثال‬

‫‪public enum HouseType‬‬


‫{‬
‫‪Unknown,‬‬
‫‪SingleFamily,‬‬
‫‪TownHouse,‬‬
‫‪Condominium‬‬
‫}‬
‫‪public class House‬‬
‫{‬
‫;‪HouseType propertyType‬‬
‫)(‪public House‬‬
‫{‬
‫;‪propertyType = HouseType.Unknown‬‬
‫}‬
‫}‬

‫‪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;
}
}

.‫نتیجه ی زیر حاصل می شود‬


Property Type: Unknown
Property Type: SingleFamily
Press any key to continue...

‫ همچنین می توانید‬.‫ بازمی گرداند‬enumeration ‫ می توانید متدی ایجاد کنید که‬،‫چنانچه از آن به عنوان یک نوع داده ی ساده استفاده کنید‬

.‫ را به عنوان یک آرگومان به متد ارسال کنید‬enumeration


406
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫ارسال ‪ enumeration‬به عنوان آرگومان‬

‫همان طور که پیش تر ذکر شد‪ ،‬پس از این که ‪ enumeration‬ایجاد می شود‪ ،‬دیگر یک نوع تلقی می گردد‪ .‬می توان آن را به عنوان آرگومان‬

‫ارسال کرد یا آن را از یک متد بازگرداند‪.‬‬

‫‪ Enumeration‬به همان شکلی که یک نوع داده ی معمولی فرستاده می شود‪ ،‬باید به عنوان آرگومان ارسال گردد‪.‬‬

‫مثال‬

‫‪public class Exercise‬‬


‫{‬
‫)‪private static void ShowHouse(HouseType propType‬‬
‫{‬
‫}‬
‫}‬

‫به همین ترتیب‪ ،‬می توان هر تعداد نوع شمارشی که الزم است ارسال کرد‪ .‬می توان ‪ 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‬‬
‫نتیجه‬

Type of house: SingleFamily


Press any key to continue...
‫ برای این که نشان دهیم آرگومان مقدار پیش فرض دارد و عضو دلخواه را به آن‬،‫ هنگام ایجاد متد‬.‫ارسال آرگومان می تواند اختیاری باشد‬

‫ می توان مقدار برای آرگومان گفته شده ارسال کرد یا از‬،‫ هنگام فراخوانی متد‬.‫اختصاص دهیم از عملگر جایگزین " = " استفاده می کنیم‬

.‫ارسال آن صرف نظر کرد‬

‫مثال‬

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;
}
}

.‫نتیجه ی زیر به دست می آید‬

Type of house: Unknown


Press any key to continue...

enum ‫تعریف و استفاده از نوع داده ای‬

.‫ را باز کنید‬Employee.cs ‫ فایل‬.8

408
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
:‫ فایل مذکور را به صورت زیر ویرایش نمایید‬،enumeration ‫ برای ایجاد تعدادی‬.2

public enum EmploymentStatus


{
FullTime,
PartTime,
Internship,
Unknown
}
public class Employee
{
public string EmployeeNumber;
public string FirstName;
public string LastName;
public string Title;
public double HourlySalary;
public EmploymentStatus Status;
public Employee(string emplNbr = "00-000", string fName = "John",
string lName = "Doe", string function = "Temporary",
double salary = 0.00,
EmploymentStatus emplStatus = EmploymentStatus.Unknown)
{
EmployeeNumber = emplNbr;
FirstName = fName;
LastName = lName;
Title = function;
HourlySalary = salary;
Status = emplStatus;
}
}
.‫ را باز نمایید‬Management.cs ‫ حال فایل‬.1

:‫ فایل را به صورت زیر ویرایش کنید‬،enumeration ‫ برای استفاده از‬.4

using System;
public class Management
{
private static Employee HireEmployee()
{
int? status = null;
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();

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;
}

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("Employee Title: {0}", empl.Title);
Console.WriteLine("Hourly Salary: {0}", empl.HourlySalary);
Console.WriteLine("Employment Status: {0}", empl.Status);
Console.WriteLine("=======================================");
}
public static int Main()
{
Employee clerk = null;
clerk = HireEmployee();
Console.Clear();
ShowEmployeeRecord(clerk);
Console.ReadKey();
return 0;
}
}

.‫ را فشار دهید‬F5 ‫ کلید‬،‫ برای اجرای برنامه‬.5

:‫ اطالعات زیر را وارد نمایید‬.6

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

.‫ را بزنید‬Enter ‫ اکنون کلید‬.4

=======================================
==-= National Bank =-==
Employee Record
---------------------------------------
Employee #: 42-855
First Name: Paula
Last Name: Meyer
Employee Title: Cashier
Hourly Salary: 18.25
Employment Status: PartTime
=======================================

.‫ خارج شوید و به محیط ویژوال برگردید‬Dos ‫ را زده تا از محیط‬Enter ‫ کلید‬.1

411
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫ از متد‬enumeration ‫برگرداندن‬

‫ در بدنه ی‬.‫ مشخص کنید‬enumeration ‫ نوع بازگشتی آن را به عنوان اسم‬،‫ باز می گرداند‬enumeration ‫برای ایجاد متدی که‬

‫ مطمئن شوید مقداری که بازمی گردانید از نوع شمارشی‬،‫ پیش از خروج از متد‬.‫ هر کاری که الزم است انجام دهید‬،enumeration

.‫ مثال زیر را در نظر بگیرید‬.‫) باشد‬enumeration type(

public class Exercise


{
private HouseType SpecifyPropertyType()
{
HouseType pt;
pt = HouseType.TownHouse;
return pt;
}
}

.‫ می توان مقدار بازگشتی آن را برای این منظور مورد استفاده قرار داد‬.‫می توان متدی را که نوع شمارشی بازمی گرداند با اسم آن فراخواند‬

‫مثال‬

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

‫نتیجه ی زیر حاصل می گردد‪.‬‬


‫‪Type of house: TownHouse‬‬
‫‪Press any key to continue...‬‬

‫عملگرهای منطقی‬

‫مقدمه‬

‫برنامه در واقع مجموعه ای از دستور ها است که از ‪ compiler‬درخواست می کند شرایط را بسنجد و بر اساس آن شرایط عمل کند‪ .‬برای‬

‫بررسی چنین شرایطی‪ ،‬کامپیوتر بخش عظیمی از زمان خود را صرف مقایسه ی مقادیر مختلف می کند‪ .‬فرایند مقایسه در حقیقت همان عملیات‬

‫‪ Boolean‬است که بسته به مقادیری که مقایسه بر پایه ی آن انجام شده نتیجه ی صحیح (‪ )true‬یا غلط (‪ )false‬می دهد‪.‬‬

‫مقایسه بین دو مقدار هم نوع صورت می گیرد ؛ برای مثال‪ ،‬می توان دو عدد‪ ،‬دو کاراکتر‪ ،‬اسامی دو شهر را با هم مقایسه کرد‪ .‬از سوی دیگر‪،‬‬

‫مقایسه ی بین دو مقدار متف اوت (از نوع مختلف) کامالً بی معنا می باشد‪ .‬برای مثال‪ ،‬نمی توان یک شماره تلفن را با سن کسی مقایسه کرد یا‬

‫یک نوع موسیقی را با فاصله ی بین دو نقطه قیاس کرد‪ .‬مشابه عملیات حسابی دودویی (‪ ،)binary‬عملیات مقایسه بر اساس دو مقدار‬

‫صورت می گیرد‪ .‬بر خالف عملیات حسابی که نتایج حاصله آن متنوع و متفاوت هستند‪ ،‬نتیجه ی فرایند مقایسه از دو حالت خارج نیست به‬

‫طوری که نتیجه یا منطقی صحیح (‪ )logical true‬یا منطقی ناصحیح (‪ )logical false‬است‪ .‬در صورتی که مقایسه صحیح باشد‪ ،‬مقدار توکار ‪8‬‬

‫یا مثبت را به دست می دهد‪ ،‬که منظور همان مقداری است که از ‪ 2‬بزرگتر باشد‪ .‬چنانچه مقایسه صحیح یا ‪ true‬نباشد‪ ،‬غلط یا ‪ false‬تلقی می‬

‫گردد و مقدار آن ‪ 2‬خواهد بود‪.‬‬

‫زبان ‪ C#‬مجهز به عملگرهای گوناگونی است که به کمک آن ها می توان هر قسم مقاسیه ای بین مقادیر هم نوع انجام داد‪ .‬مقادیر نام برده‬

‫می توانند عددی‪ ،‬از نوع رشته و یا اشیاء باشند (عملیاتی که بر روی اشیا صورت می گیرد در فرایندی به نام ‪ operator overloading‬یا‬

‫اضافه بارگذاری عملگر‪ ،‬اختصاصی تنظیم می شوند‪.‬‬

‫هنگام نوشتن دستورات شرطی (دستوراتی که در شرطی ها به کار می روند) یک سری ملزومات اولیه هست که باید رعایت کرد‪.‬‬

‫‪413‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫سادگی و وضوح ‪ :‬یک دستور باید کامالً واضح و تا حد ممکن ساده ولی در عین حال کامل باشد‪ .‬زمانی که دستوری طوالنی می گردد‪ ،‬ممکن‬

‫است به بخش های کوتاه مختلفی تقسیم شود که وضوح دستور را مختل کرده و منجر به بروز مسائل و مشکالت متعددی می شود‪.‬‬

‫واقعی ‪ :‬دستور مورد نظر باید به عنوان یک حقیقت عرضه شود و نه یک نظر یا عقیده‪ ،‬به این معنا که لزومی ندارد شما آن دستور را دوست‬

‫داشته باشید بلکه باید مثل اکثریت آن را به عنوان صحیح (‪ )true‬یا غلط (‪ )false‬بپذیرید‪ .‬در حقیقت‪ ،‬نیازی نیست که دستور به خودی خود‬

‫درست باشد بلکه باید آن را به عنوان صحیح پذیرفت‪ .‬بر این اساس‪ ،‬دستوری مثل اینکه " یک ساعت ‪ 45‬دقیقه هست " لزومی ندارد با نظر‬

‫شما همخوانی داشته باشد بلکه باید یا به عنوان صحیح یا غلط پذیرفته شود‪ .‬دستوری مثل " این متقاضی شغل گزینه ی مناسبی است " یک‬

‫نظر می باشد‪ ،‬بنابراین در دستورات شرطی جایی ندارد‪.‬‬

‫درستی ضمنی و وابسته به موقعیت ‪ :‬زمانی که دستوری نوشته یا ایجاد می شود باید به عنوان صحیح یا غلط پذیرفته شود‪ ،‬اگرچه ممکن‬

‫است بعده ها تغییر کند‪ .‬برای مثال‪ ،‬تصور کنید در سال مشخصی دستوری به این صورت نوشته شود " امسال ماه فبریه ‪ 21‬روز خواهد‬

‫داشت "‪ .‬اگرچه استفاده از آن مجاز می باشد‪ ،‬باید تا حد ممکن از به کاربردن آن خودداری کرد‪ ،‬مگر در شرایط اضطراری‪.‬‬

‫معکوس ‪ :‬باید این امکان وجود داشته باشد که یک دستور عکس خود را پیدا کند‪ .‬به عبارت روشن تر‪ ،‬زمانی که دستوری نوشته و به عنوان‬

‫صحیح یا غلط پذیرفته می شود‪ ،‬دستور ضد یا مغایری باید وجود داشته باشد که آن را عکس کند (از غلط به صحیح و بالعکس)‪ .‬برای مثال‪،‬‬

‫چنانچه دستوری دارید مانند " این متقاضی کار ‪ 81‬سال سن دارد " باید این امکان وجود داشته باشد که بگویید " این متقاضی کار ‪ 81‬ساله‬

‫نیست " یا " این متقاضی کار جوان تر از ‪ 81‬سال به نظر می رسد "‪.‬‬

‫سعی کنید تا حد ممکن دستورات خود را دقیق و واضح بیان و تنظیم کنید‪ .‬با این کار برنامه های شما خوانا می شوند و عیب زدایی آن آسان‬

‫می گردد‪.‬‬

‫عملگر تساوی ==‬

‫برای مقایسه ی دو متغیر‪ C# ،‬عملگر == را به کار می برد‪ .‬فرمول آن به شرح زیر می باشد‪.‬‬

‫‪value1 == Value2‬‬

‫عملیات تساوی به منظور کشف برابری بین دو متغیر (یا یک متغیر و یک ثابت) بکار می رود؛ به عبارت دیگر‪ ،‬ایا دو متغیر مقدار یکسانی دارند‬

‫یا نه‪ compiler .‬از طریق دستور نحوی‪ ،‬مقدار ‪ value1‬و ‪ value2‬را با هم مقایسه می کند‪ .‬چنانچه مقدار این دو ‪ value‬با هم یکسان یا‬

‫برابر بود‪ ،‬عملیات مقایسه نتیجه ی صحیح یا ‪ true‬را به دست می دهد‪ ،‬اما در صورتی که دو متغیر فوق با هم متفاوت باشند (مقدار آن ها‬

‫باهم برابر نباشد)‪ ،‬مقایسه نتیجه ی غلط یا ‪ false‬را ارائه می دهد‪.‬‬

‫‪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‬مواجه می شوید‪.‬‬

‫عملگر منطقی ‪Not‬‬

‫پس از تعریف و مقداردهی متغیر (این کار از طریق مقداردهی اولیه یا تغییر مقدار انجام می شود)‪ ،‬در واقع متغیر مذکور در برنامه زنده (یا‬

‫ایجاد) می شود‪ .‬حال متغیر می تواند در عملیات الزم شرکت داشته باشد‪ 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‬تبدیل می شود‪ .‬به این ترتیب می توان مقدار منطقی متغیر را معکوس کرد‪.‬‬

‫کوچکتر از ‪< :‬‬

‫برای کوچکتر نشان دادن مقداری از مقدار دیگر‪ ،‬عملگر < را به کار ببرید‪ .‬ترکیب نحوی عملگر نام برده به این شکل است‪.‬‬

‫‪Value1 < Value2‬‬

‫کوچکتر یا مساوی ‪<= :‬‬

‫دو عملیات پیشین را می توان با هم ترکیب کرد و با استفاده از آن دو مقدار را با هم مقایسه کرد‪ .‬با این کار متوجه می شوید که دو مقدار با‬

‫هم برابرند یا مقدار اولی از مقدار دومی کوچک تر است‪ .‬عملگر گفته شده به این شکل است ‪ <= :‬و دستور نحوی آن به ترتیب زیر می باشد‪.‬‬

‫‪Value1 <= Value2‬‬

‫‪417‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫عملگر =< درست مثل دو عمگلر پیشین‪ ،‬عملیات مقایسه انجام می دهد‪ .‬در صورتی که مقدار ‪ value1‬و ‪ value2‬برابر باشد‪ ،‬نتیجه صحیح یا‬

‫مثبت به دست می آید‪ .‬چنانچه عملوند طرف چپ‪ ،‬که در این مورد منظور ‪ value1‬است‪ ،‬مقداری داشته باشد که از مقدار عملوند دیگر‪،‬‬

‫‪ ،value2‬کمتر یا کوچکتر باشد نتیجه باز هم صحیح (‪ )true/positive‬خواهد بود‪.‬‬

‫بزرگتر از‪> :‬‬

‫برای بزرگتر نشان دادن مقداری از مقدار دیگر‪ ،‬عملگر > مورد استفاده قرار می گیرد‪ .‬فرمول آن به صورت زیر است‪.‬‬

‫‪Value1 > Value2‬‬

‫هر دو عملگر‪ ،‬در این مثال ‪ value1‬و ‪ ،value2‬می توانند متغیر باشند‪ ،‬یا عملگر سمت چپ متغیر و دیگری ثابت باشد‪ .‬چنانچه مقدار واقع در‬

‫سمت چپ عملگر بزرگتر از مقدار طرف راست آن بود‪ ،‬مقایسه نتیجه ی صحیح یا مثبت را به دست می دهد‪ .‬در غیر این صورت‪ ،‬مقایسه نتیجه‬

‫ی غلط یا تهی (‪ )null‬ارائه می دهد‪.‬‬

‫‪418‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫بزرگتر یا مساوی =>‬

‫دو عملگر بزرگتر از و تساوی با هم ترکیب شده و عملگر رو به رو را تولید می کند ‪ .>= :‬به این عملگر " بزرگتر از یا مساوی " می گویند‪ .‬دستور‬

‫نحوی آن به صورت زیر است‪.‬‬

‫‪Value1 >= Value2‬‬

‫عملیات مقایسه روی هر دو عملوند ‪ value1‬و ‪ value2‬اجرا می شود‪ .‬چنانچه مقدار هر دو عملوند برابر باشد‪ ،‬مقایسه نتیجه ی صحیح یا‬

‫مثبت می دهد‪ .‬در صورتی که مقدار عملوند چپ از مقدار عملوند راست بزرگتر باشد‪ ،‬باز هم نتیجه صحیح (‪ )true‬خواهد شد‪ .‬حال اگر مقدار‬

‫عملوند سمت چپ از مقدار عملوند سمت راست کوچکتر بود‪ ،‬نتیجه ی فرایند غلط یا تهی (‪ )null‬خواهد شد‪.‬‬

‫‪419‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫جدول زیر چکیده ی عملگرهای منطقی نام برده را فهرست می کند‪.‬‬

‫‪Operator Meaning‬‬ ‫‪Example‬‬ ‫‪Opposite‬‬

‫==‬ ‫‪Equality to‬‬ ‫‪a == b‬‬ ‫=!‬

‫=!‬ ‫‪Not equal to‬‬ ‫‪12 != 7‬‬ ‫==‬

‫<‬ ‫‪Less than‬‬ ‫‪25 < 84‬‬ ‫=>‬

‫=<‬ ‫‪Less than or equal Cab <= Tab‬‬ ‫>‬

‫‪to‬‬

‫>‬ ‫‪Greater than‬‬ ‫‪248 > 55‬‬ ‫=<‬

‫=>‬ ‫‪Greater than or‬‬ ‫=> ‪Val1‬‬ ‫<‬

‫‪equal to‬‬ ‫‪Val2‬‬

‫دستورات شرطی‬

‫چنانچه شرطی درست بود‬

‫دستور شرطی‪ ،‬عبارتی است که نتیجه ی صحیح (‪ )true‬یا غلط (‪ )false‬بدهد‪ .‬به منظور ایجاد عبارت )‪ (expression‬الزم‪ ،‬عملگرهای‬

‫‪ Boolean‬را به کار می ب ریم‪ .‬در مبحث پیشین‪ ،‬با نحوه ی اجرإ عملیات و دریافت نتایج و به کاربردن آن ها آشنا شدیم‪ .‬برای استفاده از‬

‫عملیات ‪ ،Boolean‬زبان برنامه نویسی ‪ C#‬عملگر های شرطی خود را ارائه می دهد‪.‬‬

‫عبارت های شرطی‬

‫‪ Microsoft Visual Studio‬را راه اندازی کنید‪.‬‬ ‫‪.8‬‬

‫برای ایجاد برنامه ی جدید‪ ،‬به فهرست گزینه ی اصلی مراجعه کرده‪ ،‬روی ‪ File -> New Project...‬کلیک کنید‪.‬‬ ‫‪.2‬‬

‫در لیست میانی روی ‪ Empty Project‬کلیک کنید‪.‬‬ ‫‪.1‬‬


‫‪420‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
.‫ تغییر دهید‬ElectronicStore2 ‫اسم پروژه را به‬ .4

.‫ را بزنید‬Enter ‫کلید‬ .5

ElectronicStore2 -> Add -> Class... : ‫ راست کلیک کرده سپس‬Class View ‫ در پنجره ی‬،‫به منظور ایجاد کالس جدید‬ .6

.‫ را کلیک کنید‬Add ‫ سپس‬،‫ انتخاب کرده‬StoreItem ‫اسم کالس را‬ .4

.‫ را به صورت زیر اصالح کنید‬StoreItem.cs ‫فایل‬ .1


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ElectronicStore2
{
public enum ItemsCategories
{
Unknown,
CablesAndConnectors,
CellPhonesAndAccessories,
Headphones,
DigitalCameras,
PDAsAndAccessories,
TelephonesAndAccessories,
TVsAndVideos,
SurgeProtectors,
Instructional
}
public class StoreItem
{
public long itemNumber;
public string name;
public ItemsCategories category;
public string manufacturer;
public string model;
public decimal unitPrice;
public StoreItem(long itmNbr = 0, string itemName = "N/A",
ItemsCategories kind = ItemsCategories.Unknown,
string make = "Unknown", string mdl = "Unspecified",
decimal price = 0.00M)
{
itemNumber = itmNbr;
name = itemName;
category = kind;
manufacturer = make;
model = mdl;
unitPrice = price;
}
}

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;
}
}
‫نتیجه‬

Enter the type of house you want to purchase


1. Single Family
2. TownHouse
3. Condominium
You Choice? 3
Desired House Type: Unknown
Press any key to continue...

422
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫ فرمول آن به‬.‫ به کار برده می شود‬if ‫ عملگر‬،‫ آن‬Boolean ‫ است یا نه) و استفاده از نتیجه ی‬true/ ‫به منظور بررسی عبارت (اینکه آیا صحیح‬

.‫شرح زیر است‬

if(Condition) Statement;
.‫ به عبارت دیگر می تواند فرمول زیر را داشته باشد‬،‫ می تواند از همان نوع عملیات بولی باشد که در درس پیش با آن شنا شدیم‬Condition

Operand1 BooleanOperator Operand2

)‫ اگر دستور مربوطه (دستوری که باید اجرا شود‬.‫ را اجرا می کند‬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

Desired House Type: SingleFamily


Press any key to continue...

‫ مثال‬.‫ نوشت یا جای گذاری کرد‬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 ‫ روی‬،‫ در لیست مورد نظر‬.‫ دوبار کلیک کنید‬Visual C#

.‫ به مثال های زیر توجه کنید‬.‫ ایجاد کرد‬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;
}
}
‫نمونه ای از برنامه‬

Enter the type of house you want to purchase


1. Single Family
2. Townhouse
3. Condominium
You Choice? 3
Desired House Type: Condominium
Press any key to continue...

if ‫به کاربردن شرط ساده ی‬

.‫ کلیک کنید‬Project -> Add New Item... ‫ روی‬،‫ فهرست گزینه ی اصلی را باز کرده‬،‫برای ایجاد فایل جدید‬ .8

.‫ را انتخاب کنید‬Code File ‫ گزینه ی‬،‫در لیست میانی‬ .2

.‫ را بزنید‬Enter ‫ کلید‬،‫ را تغییر داده‬ElectronicStore ‫اسم فایل را به‬ .1

.‫ دستورات زیر را وارد کنید‬،‫در فایل خالی که در اختیار شما قرار می گیرد‬ .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 ‫ را وارد کنید سپس‬972485 ،Item Number ‫برای‬ .6

.‫ را وارد کنید‬5 ‫ عدد‬your choice ‫برای گزینه ی‬ .4

.‫ را بزنید‬Enter ‫ سپس کلید‬،‫ را وارد کنید‬Canon ،)‫ (ساخت‬make ‫برای آیتم‬ .1

.‫ را بزنید‬Enter ‫ را تایپ کرده و‬PowerShot SX20IS ،model ‫برای آیتم‬ .1

.‫ را بزنید‬Enter ‫ اکنون‬،‫ تایپ کرده‬369.00 ،)‫ (قیمت محصول انتخابی‬unit price ‫ برای گزینه ی‬.82

=-= Nearson Electonics =-=


******* Store Items ******
To create a store item، enter its information
Item Number: 972485
Category
1. Unknown/Miscellaneous
2. Cables and Connectors
3. Cell Phones and Accessories
4. Headphones
5. Digital Cameras
6. PDAs and Accessories
7. Telephones and Accessories
8. TVs and Videos - Plasma / LCD
9. Surge Protector
10. Instructional and Tutorials (VHS & DVD)TVs and Videos

428
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
Your Choice? 5
Make: Canon
Model: PowerShot SX20IS
Unit Price: 369.00

.‫ را بزنید‬Enter ‫ کلید‬.88

=-= Nearson Electonics =-=


******* Store Items ******
Store Item Description
Item Number: 972485
Category: DigitalCameras
Make: Canon
Model: PowerShot SX20IS
Unit Price: $369.00
Press any key to continue...

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;
}
}

‫نمونه ای از نتیجه اجرای برنامه‬

Enter the type of house you want to purchase


1. Single Family
2. Townhouse
3. Condominium
You Choice? 1
Desired House Type: SingleFamily
Desired House Matched
Press any key to continue...

‫نمونه ای دیگر‬

Enter the type of house you want to purchase


1. Single Family
2. Townhouse
3. Condominium
You Choice? 2
Desired House Type: Townhouse
No House Desired
Press any key to continue...

if...else ‫استفاده از شرط‬

.‫ را به ترتیب زیر اصالح کنید‬ElectronicStore.cs ‫ فایل‬if...else ‫ به منظور استفاده از شرط‬.8


431
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
using System;
using ElectronicStore2;
public class Store
{
StoreItem CreateStoreItem()
{
int? category = null;
decimal itemPrice = 0m;
StoreItem sItem = new StoreItem();
Console.Title = "Electronic Super Store";
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: ");

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

=-= Nearson Electonics =-=


******* Store Items ******
To create a store item, enter its information
Item Number: 992052
Category
1. Unknown/Miscellaneous
2. Cables and Connectors
3. Cell Phones and Accessories
4. Headphones
5. Digital Cameras
6. PDAs and Accessories
7. Telephones and Accessories
8. TVs and Videos - Plasma / LCD
9. Surge Protector
10. Instructional and Tutorials (VHS & DVD)TVs and Videos
Your Choice? 4
Make: Sennheiser
Model: HD-555
Unit Price: 104.00

.‫ را بزنید‬Enter .4

=-= Nearson Electonics =-=


******* Store Items ******
Store Item Description
Item Number: 992052
Category: Headphones
Make: Sennheiser
Model: HD-555
Unit Price: $104.00

.‫ را بسته و به محیط برنامه نویسی برگردید‬DOS ‫ اکنون پنجره ی‬.5


434
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
if...else ‫عملگر های‬

(?:) ‫عملگر سه تایی‬

‫ یا دستور دوم اجرا‬else ،‫ غلط بود و اجرا نشد‬if ‫ (اگر‬else ‫ بررسی شود در غیر این صورت به عنوان‬if ‫چنانچه شرطی دارید که ابتدا به عنوان‬

.‫ " می باشد‬: " ‫ می توان از عملگر سه تایی استفاده کرد که ترکیبی از" ? " و‬،)‫شد‬

‫فرمول‬

Condition ? Statement1 : Statement2;

‫ اجرا می‬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‬‬

‫عملگر " ?? "‬

‫به خاطر دارید که هنگام تعریف متغیر (از) نوع اولیه‪ ،‬می توان یک عالمت سوال به نوع داده اضافه کرد که از این طریق مشخص شود متغیر‬

‫مذکور می تواند مقدار ‪ nullable‬داشته باشد‪.‬‬

‫مثال‬

‫;‪using System‬‬
‫‪public class Exercise‬‬
‫{‬
‫)(‪public static int Main‬‬
‫{‬
‫;‪double? distance = null‬‬
‫;)(‪Console.WriteLine‬‬
‫;‪return 0‬‬
‫}‬
‫}‬

‫ممکن است الزم شود مقدار چنین متغیری را به متغیر دیگری تخصیص دهید‪ .‬چنانچه مقدار متغیر ‪ null‬باشد (به این معنا که مقداری نداشته‬

‫باشد یا مقدار آن تهی باشد)‪ ،‬دیگر تخصیص آن به متغیر دیگر بی معنا خواهد بود‪ .‬بنابراین‪ ،‬ابتدا باید بررسی شود که مقدار متغیر مزبور‪،‬‬

‫مقداری تهی است یا مقدار واقعی‪ .‬به عبارت دیگر از ‪ compiler‬درخواست بررسی متغیر را می کنید تا مشخص شود مقدار آن مقداری تهی‬

‫است یا مقداری واقعی‪.‬‬

‫در صورتی که متغیر مقداری حقیقی دارد‪ ،‬نه تهی‪ ،‬می توان مقدار آن را به متغیر جدید تخصیص داد‬

‫چنانچه متغیر تهی (‪ )null‬بود‪ ،‬مقداری جایگزین به متغیر نام برده اختصاص می دهید‬

‫برای پشتیبانی از این امکان‪ ،‬زبان ‪ C#‬عملگر "??" را در اختیار شما قرار می دهد‪ .‬فرمول آن به ترتیب زیر است‪.‬‬

‫;‪TargetVariable = OriginalVariable ?? AlternateValue‬‬

‫‪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 = distance ?? 135.85; ‫دستور‬

.‫ تخصیص دهید‬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;

else if(Condition2) Statement2

‫ چنانچه‬.‫ اجرا می شود‬Statement1 ،Condition1 ‫) بودن‬true( ‫ در صورت صحیح‬.‫ را بررسی می کند‬Condition1 ‫کامپایلر ابتدا‬

‫ را اجرا‬Statement2 ‫ کامپایلر‬،Condition2 ‫ در صورت درست بودن‬.‫ را چک می کند‬Condition2 ‫ کامپایلر‬،‫) بود‬false( ‫ غلط‬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;
}
}

‫نمونه ای از اجرای برنامه‬

Enter the type of house you want to purchase


1. Single Family
2. Townhouse
3. Condominium
You Choice? 1
Does the house have an indoor garage (1=Yes/0=No)? 1
Desired House Type: SingleFamily
Has indoor garage? Yes
Press any key to continue...

‫نمونه ای دیگری از اجرای برنامه‬

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#‬خود به عنوان‬

‫آخرین راه حل یک ‪ else‬جایگزین در نظر می گیرد‪ .‬فرمول آن به شرح زیر است‪.‬‬

‫)‪if(Condition1‬‬ ‫)‪if(Condition1‬‬

‫;‪Statement1‬‬ ‫;‪Statement1‬‬

‫)‪else if(Condition2‬‬ ‫)‪else if(Condition2‬‬

‫;‪Statement2‬‬ ‫;‪Statement2‬‬

‫‪else‬‬ ‫)‪else if(Condition3‬‬

‫;‪Statement-n‬‬ ‫;‪Statement3‬‬

‫‪else‬‬

‫;‪Statement-n‬‬

‫‪ Compiler‬اولین شرط را بررسی می کند‪ .‬در صورت درست بودن ‪ Statement1 ،Condition1‬اجرا می شود‪ .‬چنانچه ‪ Condition2‬صحیح‬

‫باشد‪ Statement2 ،‬اجرا می شود‪ .‬زمانی که کامپایلر ‪ Condition-n‬را به ‪ true‬تفسیر کند‪ ،‬دستور همخوان (مربوطه ی) آن اجرا می شود‪.‬‬

‫حال اگر ‪ Condition-n‬غلط باشد‪ ،‬کامپایلر شرط بعدی را بررسی می کند‪ .‬به عبارت دیگر‪ ،‬می توان با استفاده از دستور ‪ else if‬هر تعداد شرط‬

‫‪440‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫ می‬،‫ باز هم فکر می کنید ممکن است شرطی غیر منتظره وجود داشته باشد‬،‫ اگر پس از بررسی جمیع شرایط احتمالی‬.‫که الزم است شامل کرد‬

.‫ کمک بگیرید‬else ‫توانید از‬

‫مثال‬

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

‫هنگام تعریف عبارت (که نتیجه ی آن به اجرای برنامه ی خاصی منجر می شود)‪ ،‬دستور ‪ 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‬وقفه در کد ایجاد شود‪ .‬پروسه ی ایجاد وقفه با استفاده از کلید واژه ی‬

‫‪ break‬امکان پذیر می باشد‪.‬‬

‫عبارتی که در دستور ‪ 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;
}
}

‫نمونه ای از اجرای برنامه‬

Enter the type of house you want to purchase


1. Single Family

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

Desired House Type: Unknown


Has indoor garage? No
Press any key to continue...

،‫ می توان با استفاده از حروف‬،‫ به عنوان مثال‬.‫ به کار برد‬switch ‫ می توان دیگر نوع های اعداد صحیح را در دستور‬،int ‫گذشته از مقدار نوع‬

.‫ به مثال زیر توجه کنید‬.‫ ها را اعتبار سنجی کرد‬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:

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;
}
}

‫نمونه ای از اجرای برنامه‬

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 (y/n)? y

Desired House Type: Condominium


Has indoor garage? Yes
Press any key to continue...

switch ‫دستورات شرطی‬

.‫ را اجرا کنید‬Microsoft Visual Studio ‫ابتدا‬ .8

447
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
.‫ کلیک کنید‬File -> New Project... ‫ روی‬،‫ در فهرست گزینه ی اصلی‬،‫برای ایجاد برنامه ی جدید‬ .2

.‫ را انتخاب کنید‬Empty Project ‫ گزینه ی‬،‫در لیست میانی‬ .1

.‫ را بزنید‬Enter ‫ تغییر دهید و کلید‬NationalBank3 ‫اسم پروژه را به‬ .4

.‫ کلیک کنید‬Project -> Add New Item... ،‫ به فهرست گزینه ی اصلی مراجعه کرده‬،‫به منظور ایجاد فایل جدید‬ .5

.‫ را از لیست میانی انتخاب کنید‬Code File ‫گزینه ی‬ .6

.‫ انتخاب کنید‬Customer ‫اسم فایل مورد نظر را‬ .4

.‫ را کلیک کنید‬Add ‫حال‬ .1

.‫ را به صورت زیر اصالح کنید‬Customer.cs ‫فایل‬ .1


public enum AccountType { Checking, Saving, Other }
public class Customer
{
public string AccountNumber;
public AccountType Type;
public string FullName;
public double Balance;
public short PIN;
public Customer(string acnt = "000-000000-000",AccountType category = AccountType.Other,string name = "John Doe")
{
AccountNumber = acnt;
Type = category;
FullName = name;
PIN = 0;
Balance = 0.00D;
}
}

NationalBank3 -> : ‫ راست کلیک کرده سپس‬NationalBank3 ‫ روی‬Solution Explorer ‫ در پنجره ی‬،‫ برای ایجاد فایل جدید‬.82

Add -> New Item...

.‫ را بزنید‬Enter ‫ تغییر دهید و کلید‬Management ‫ اسم آن را به‬.‫ در لیست میانی باید حتماً انتخاب شده باشد‬Code File ‫ گزینه ی‬.88

.‫ فایل مورد نظر را به ترتیب زیر تکمیل کنید‬.82

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;
}
}

.‫ را بزنید تا برنامه اجرا شود‬F5 ‫ کلید‬.81

.‫ اکنون اطالعات مورد نیاز را به ترتیب زیر وارد کنید‬.84

Account # 202-410443-240

Account Type: 1

Customer Name: Paul Martin Eloundou

450
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
PIN: 8402

Initial Deposit: 750

===========================================
==-= 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

.‫ را فشار دهید‬Enter ‫ سپس‬،‫ را تایپ کرده‬2 ‫ در مرحله ی بعدی‬.86

.‫ را بزنید‬Enter ‫ وارد کنید و باز‬226.85 ‫ مبلغ را رقم‬.84

.‫ خارج گشته و به محیط برنامه نویسی بازگردید‬DOS ‫ از پنجره ی‬.81

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;
}
}

.‫نتیجه ی زیر به دست می آید‬

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 (y/n)? Y
Desired House Type: Condominium
Has indoor garage? Yes
Press any key to continue...

Enumeration ‫استفاده از‬

‫ را به‬enumeration ‫ باید مقدار‬،‫ برای این منظور‬.‫ می باشد‬switch ‫ پردازش آن در دستور‬،enumeration ‫یکی از اصلی ترین کاربردهای‬

.‫ پردازش می شوند‬case ‫ سپس در دستورات‬enumeration ‫ مقادیر‬.‫ ارسال کرد‬switch

‫مثال‬

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;
}
}

‫نمونه ای از اجرای برنامه‬

Enter the type of house you want to purchase


1. Single Family
2. Townhouse
3. Condominium
You Choice? 1
Does the house have an indoor garage (y/n)? N
Desired House Type: Single Family
Has indoor garage? No
Press any key to continue...

AND ‫عطف منطقی‬

‫مقدمه‬

.‫تصور کنید دالل امالک و مستغالتی که از برنامه ی شما استفاده می کند با یک خریدار بالقوه مالقات دارد و سواالت زیر را از برنامه می پرسد‬

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( ‫ می گوید که خانه ی تک خانوار‬: ‫تصور کنید مشتری به این سواالت پاسخ می دهد‬

.‫ را ندارد‬000،$550 ‫بیش از‬

Enter the type of house you want to purchase


1. Single Family
2. Townhouse
3. Condominium
You Choice? 1
Up to how much can you afford? $550000
Desired House Type: SingleFamily
Maximum value afforded: $550،000.00
Press any key to continue...

‫ خانه ی مذکور باید برای تک خانوار تعبیه شده‬: ‫ دو پارامتر باید در نظر گرفته و اعتبار سنجی شود‬،‫هنگام بررسی خانه برای چنین مشتریی‬

.‫ دو دستور به شکل زیر می نویسیم‬،‫ بر این اساس‬.‫ باشد‬001،$550 ‫باشد و قیمت آن زیر مبلغ‬

a. The house is single family


b. The house costs less than $550،000

‫ چنانچه خانه ای با این مشخصه (تک خانوار بودن آن) پیدا کریدم آن را داخل فهرست امالک مورد نظرمان قرار می‬،‫از لیست امالک و مستغالت‬

.‫دهیم‬

Type of House House

The house is single family True

456
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫از سوی دیگر‪ ،‬در صورت پیدا کردن خانه ای با قیمت ‪ 000،$550‬یا پایین تر از آن‪ ،‬خانه را بررسی می کنیم‪.‬‬

‫‪Price Range‬‬ ‫‪Value‬‬

‫‪$550،000‬‬ ‫‪True‬‬

‫یکی از راه های ترکیب دو مقایسه‪ ،‬پیوند دادن آن ها است‪ .‬برای مشتری مزبور خانه ای را انتخاب می کنیم که (هر) دو مشخصه ی فوق را دارا‬

‫باشد‪ .‬اگر خانه ی مورد نظر ‪ town house‬باشد‪ ،‬طبق خواسته ی مشتری‪ ،‬مقدار شرطی آن غلط (‪ )false‬خواهد بود‪ .‬اگر قیمت خانه بیش از‬

‫‪ 000،$550‬باشد‪ ،‬باز هم مقدار ‪ Boolean Value‬ناصحیح خواهد بود‪.‬‬

‫‪Type of House House Value Result‬‬

‫‪Town House‬‬ ‫‪$625،000‬‬ ‫‪Town House AND $625،000‬‬

‫‪False‬‬ ‫‪False‬‬ ‫‪False‬‬

‫در ‪ ،C#‬عملگر بولی ‪ AND‬با && اجرا می شود‪.‬‬

‫مثال‬

‫;‪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;
}
}

‫نمونه ای از اجرای برنامه‬

Enter the type of house you want to purchase


1. Single Family
2. Townhouse
3. Condominium
You Choice? 1
Up to how much can you afford? $450000
Desired House Type: SingleFamily
Maximum value afforded: $450،000.00
Desired House Matched
Press any key to continue...

‫ می توان هر طرف شرط‬،‫ به منظور بهبود خوانایی برنامه‬.‫) دو شرط را با هم ادغام می کند‬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‬اگر هم شرط اول درست باشد‪ ،‬در صورت ناصحیح بودن شرط‬

‫یا معیار دوم کل شرط غلط تلقی می گردد‪.‬‬

‫‪Type of House‬‬ ‫‪House Value‬‬ ‫‪Result‬‬

‫‪Single Family‬‬ ‫‪$750،500‬‬ ‫‪Single Family AND $750،500‬‬

‫‪True‬‬ ‫‪False‬‬ ‫‪False‬‬

‫مثال‬

‫;‪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");
}
}

‫نمونه ای از اجرای برنامه‬

Enter the type of house you want to purchase


1. Single Family
2. Townhouse
3. Condominium
You Choice? 1
Up to how much can you afford? $750000
Desired House Type: SingleFamily
Maximum value afforded: $750،000.00
The House Doesn't Match the Desired Criteria
Press any key to continue...

460
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫حال تصور کنید خانه ی از نوع ‪( townhouse‬برای چندین خانوار) پیدا کرده ایم که ‪ 000،$420‬هزینه بر می دارد‪ .‬اگرچه دومین شرط صحیح‬

‫است‪ ،‬اولین معیار در نظر گرفته نشده‪ .‬در جبر بولی‪ ،‬چنانچه حتی یکی از شرایط ناصحیح باشد‪ ،‬عملیات ‪ AND‬کالً غلط می شود‪.‬‬

‫‪Type of House‬‬ ‫‪House Value‬‬ ‫‪Result‬‬

‫‪Town House‬‬ ‫‪$420،000‬‬ ‫‪Town House AND $420،000‬‬

‫‪False‬‬ ‫‪True‬‬ ‫‪False‬‬

‫مثالی از اجرای برنامه‪ ،‬زیر قابل مشاهده می باشد ‪:‬‬

‫‪Enter the type of house you want to purchase‬‬


‫‪1. Single Family‬‬
‫‪2. Townhouse‬‬
‫‪3. Condominium‬‬
‫‪You Choice? 2‬‬
‫‪Up to how much can you afford? $420000‬‬
‫‪Desired House Type:‬‬ ‫‪Townhouse‬‬
‫‪Maximum value afforded: $420،000.00‬‬
‫‪The House Doesn't Match the Desired Criteria‬‬
‫‪Press any key to continue...‬‬

‫چنانچه خانه ای تک خانوار (‪ )single family‬با قیمت ‪،$345,000‬پیدا کنیم‪ ،‬هر دو شرط برآورده می شود‪ .‬در جبر بولی‪ ،‬در صورتی که هر دو‬

‫شرط صحیح باشند‪ ،‬عملیات ‪ AND‬نیز ‪ true‬محسوب می شود‪.‬‬

‫‪Type of House‬‬ ‫‪House Value‬‬ ‫‪Result‬‬

‫‪Single Family‬‬ ‫‪$345،000‬‬ ‫‪Single Family AND $345،000‬‬

‫‪True‬‬ ‫‪True‬‬ ‫‪True‬‬

‫‪461‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫نمونه ای از اجرای برنامه ی باال را زیر رویت می کنید‪.‬‬

‫‪Enter the type of house you want to purchase‬‬


‫‪1. Single Family‬‬
‫‪2. Townhouse‬‬
‫‪3. Condominium‬‬
‫‪You Choice? 1‬‬
‫‪Up to how much can you afford? $345000‬‬
‫‪Desired House Type:‬‬ ‫‪SingleFamily‬‬
‫‪Maximum value afforded: $345،000.00‬‬
‫‪Desired House Matched‬‬
‫‪Press any key to continue...‬‬

‫چهار جدول باال را می توان به صورت زیر ادامه داد‪.‬‬

‫‪If Condition1 is‬‬ ‫‪If Condition2 is‬‬ ‫‪Condition1 AND Condition2‬‬

‫‪False‬‬ ‫‪False‬‬ ‫‪False‬‬

‫‪False‬‬ ‫‪True‬‬ ‫‪False‬‬

‫‪True‬‬ ‫‪False‬‬ ‫‪False‬‬

‫‪True‬‬ ‫‪True‬‬ ‫‪True‬‬

‫همان طور که مشاهده می کنید عطف منطقی تنها زمانی به ‪ true‬ارزیابی می شود که هر دو شرط درست باشند‪ .‬در برخی موارد الزم است‬

‫چندین شرط (بیش از دو شرط) را با هم ادغام یا ترکیب کنیم‪ .‬تصور کنید مراجعه کننده ای قصد خرید خانه ای با گنجایش ظرفیت یک خانوار‬

‫(‪ )single family house‬و مجهز به پارکینگ (‪ )indoor garage‬که ‪ 000،$450‬قیمت آن است را دارد‪ .‬به عبارت دیگر خانه ی مذکور باید‬

‫سه شرط زیر را داشته باشد‪.‬‬

‫‪462‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
a. The house is a single family home

b. The house costs less than $450،001

c. The house has an indoor garage

.‫برنامه ی زیر شرایط باال را مورد بررسی قرار می دهد‬

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

‫در صورتی که شرط اول (یا هر یک از شروط) غلط باشد‪ ،‬کل شرط نادرست اطالق می گردد ‪ ،‬صرفنظر از نتیجه ی شرط دوم‪ .‬اگر شرط اول صحیح‬

‫بود‪ ،‬شرط دوم ارزیابی می شود‪.‬‬

‫‪Type of House‬‬ ‫‪Property Value‬‬

‫‪A‬‬ ‫‪B‬‬

‫‪Single Family‬‬ ‫‪$655،000‬‬

‫‪True‬‬ ‫‪False‬‬

‫چنانچه شرط دوم نادرست بود‪ ،‬کل ترکیب غلط تلقی می گردد‪.‬‬

‫‪464‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫‪A‬‬ ‫‪B‬‬ ‫‪A && B‬‬

‫‪True‬‬ ‫‪False‬‬ ‫‪False‬‬

‫حین ارزیابی سه شرط باال اگر شرط اول یا دوم ناصحیح باشد‪ ،‬به دلیل اینکه کل شرط نادرست محسوب می شود‪ ،‬دیگر دلیلی برای بررسی‬

‫شرط سوم وجود ندارد‪ .‬اگر هر دو شرط اول و دوم غلط باشند باز هم ارزیابی شرط سوم لزومی ندارد‪ .‬فقط در صورت صحیح بودن دو شرط‬

‫مذکور شرط سوم ارزیابی می شود‪.‬‬

‫‪Type of House‬‬ ‫‪Property Value‬‬ ‫‪Indoor Garage‬‬

‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬

‫‪Single Family‬‬ ‫‪$425،650‬‬ ‫‪None‬‬

‫‪True‬‬ ‫‪True‬‬ ‫‪False‬‬

‫ترکیبی از سه شرط باال در عطف منطقی بدین صورت نمایش داده می شود ‪ .A && B && C :‬بار دیگر‪ ،‬چنانچه شرط سوم نادرست باشد‪ ،‬کل‬

‫شرط غلط می شود‪.‬‬

‫‪A‬‬ ‫‪B‬‬ ‫‪A && B‬‬ ‫‪C‬‬ ‫‪A && B && C‬‬

‫‪True‬‬ ‫‪True‬‬ ‫‪True‬‬ ‫‪False‬‬ ‫‪False‬‬

‫مثال‬

‫‪Enter the type of house you want to purchase‬‬


‫‪1. Single Family‬‬
‫‪2. Townhouse‬‬
‫‪3. Condominium‬‬
‫‪You Choice? 1‬‬
‫‪Up to how much can you afford? $425000‬‬
‫‪Does the house have an indoor garage (1=Yes/0=No)? 0‬‬

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

False Don't Care Don't Care False

True False Don't Care False

True True False False

.‫) در نظر گرفته می شود که هر سه شرط درست باشند‬true( ‫کل شرط تنها زمانی صحیح‬

A B C A && B && C

False False False False

False False True False

True False False False

True False True False

False True False False

False True True False

True True False False

True True True True

466
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫فصل منطقی ‪or :‬‬

‫مقدمه‬

‫حال در نظر بگیرید بنگاه معمالت امالک هر سه نوع خانه ی ‪ townhouse ،single family‬و ‪ condominium‬را دارد‪ .‬کلیه‬

‫ی ‪ condominium‬ها فقط یک طبقه دارند‪ .‬برخی از خانه های ‪ single family‬یک طبقه‪ ،‬برخی دو طبقه و تعدادی دارای سه طبقه می باشند‪.‬‬

‫ولی تمامی خانه های ‪ townhouse‬سه طبقه ای می باشند‪.‬‬

‫مراجعه کننده ی دیگری قصد خرید خانه را دارد و وی ‪ condominium‬می پسندد‪ .‬حال چنانچه شرکت ما چه خانه داشته باشد چه ‪،condo‬‬

‫نباید بیشتر از یک طب قه باشد (مشتری به هر دلیلی تمایل به باال رفتن از پله ها را ندارد)‪ .‬هنگام بررسی امالک بنگاه‪ ،‬با در نظر گرفتن شرط‬

‫باال‪ ،‬دستور های زیر را می نویسیم‪.‬‬

‫‪a. The property is a condominium‬‬

‫‪b. The property has one story‬‬

‫در صورت پیدا کردن ‪ ،condo‬به این خاطر که کلیه ی ‪ condo‬ها تنها یک طبقه دارند‪ ،‬معیار موردنظر برآورده می شود‪.‬‬

‫‪Type of House‬‬ ‫‪House‬‬

‫‪Condominium‬‬ ‫‪True‬‬

‫امالک دیگر‪ ،‬به خصوص آن دسته ای که بیش از یک طبقه دارند‪ ،‬نادیده گرفته می شوند‪.‬‬

‫‪Number of Stories‬‬ ‫‪Value‬‬

‫‪3‬‬ ‫‪False‬‬

‫عملگر شرطی ‪ (||) or‬در صورت ارزیابی عملوند اول به صحیح‪ ،‬دیگر عملوند دوم را ارزیابی نمی کند‪ .‬چنانچه عملوند اول به ‪ false‬ارزیابی‬

‫شود‪ ،‬این عملوند دوم است که تعیین یا مشخص می کند که کل عبارت ‪ or‬به صحیح یا غلط ارزیابی شود‪ .‬ترتیب عملیات ‪ or‬در قالب جدول‬

‫زیر به نمایش گذاشته شده است‪.‬‬

‫‪467‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
Condominium One Story Condominium OR 1 Story

True False True

‫مثال‬

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

How many stories? 6

Desired House Type: Condominium

Number of Stories: 6

Desired House Matched

Press any key to continue...

.‫ دیگر امالک را در نظر می گیریم‬،‫ در این صورت‬.‫ وجود ندارد‬condominium ‫ هیچ‬،‫اکنون تصور کنید بین امالک موجود در بنگاه‬

Type of House House

Single Family False

‫ در صورت پیدا‬.‫ به دنبال آن خانه ای می گردیم که فقط یک طبقه داشته باشد‬،‫ موجود است‬single family ‫چنانچه تعداد محدودی گزینه ی‬

.‫ شرط دوم برآورده می شود‬،‫کردن گزینه ی مورد نظر‬

Type of House One Story Condominium OR 1 Story

False True True

‫مثال‬

Enter the type of house you want to purchase


1. Single Family
2. Townhouse
3. Condominium
You Choice? 1
How many stories? 1
Desired House Type: SingleFamily

469
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
Number of Stories: 1
Desired House Matched
Press any key to continue...

‫ جدول زیر این‬.‫ هر دو شرط الزم برآورده می شود‬،‫ را در امالک موجود پیدا کنیم که یک طبقه داشته باشد‬condominium ‫اگر گزینه ی‬

.‫عملیات را به نمایش می گذارد‬

Type of House One Story Condominium OR 1 Story

False True True

True True True

.‫برنامه ی زیر مثال باال را نمایش می دهد‬

Enter the type of house you want to purchase


1. Single Family
2. Townhouse
3. Condominium
You Choice? 3
How many stories? 1
Desired House Type: Condominium
Number of Stories: 1
Desired House Matched
Press any key to continue...

.‫ تولید می کند که هر دو شرط غلط باشند‬false ‫ تنها زمانی کالً نتیجه ی‬or ‫عملیات بولی‬

If Condition1 is If Condition2 is Condition1 OR Condition2

False True True

True False True

True True True

470
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫‪False‬‬ ‫‪False‬‬ ‫‪False‬‬

‫مثالی دیگر‬

‫‪Enter the type of house you want to purchase‬‬


‫‪1. Single Family‬‬
‫‪2. Townhouse‬‬
‫‪3. Condominium‬‬
‫‪You Choice? 2‬‬
‫‪How many stories? 2‬‬
‫‪Desired House Type: Townhouse‬‬
‫‪Number of Stories: 2‬‬
‫‪The House Doesn't Match the Desired Criteria‬‬
‫‪Press any key to continue...‬‬

‫فصل های ترکیبی‬

‫گاهی اوقات الزم است به جای دوشرط‪ ،‬سه شرط ارزیابی شود‪ .‬برای این منظور از فصل های ترکیبی کمک گرفته می شود‪.‬‬

‫نحوه ی شمارش در حلقه‬

‫تکرار‪ /‬حلقه ی شرطی‬

‫حلقه یک نوع دستور شرطی است که به بررسی شرط و اجرای دستور مورد نظر ادامه می دهد تا شرط بیان شده ‪ false‬ارزیابی شود‪.‬‬

‫معرفی تکرار شرطی‬

‫‪ Microsoft Visual Studio‬را اجرا کنید‪.‬‬ ‫‪.8‬‬

‫برای ایجاد برنامه ی جدید‪ ،‬در فهرست گزینه ی اصلی‪ ،‬روی ‪ File -> New Project...‬کلیک کنید‪.‬‬ ‫‪.2‬‬

‫گزینه ی ‪ Empty Project‬را از لیست میانی انتخاب کنید‪.‬‬ ‫‪.1‬‬

‫اسم پروژه را ‪ NationalBank4‬انتخاب کنید و کلید ‪ Enter‬را بزنید‪.‬‬ ‫‪.4‬‬

‫به منظور ایجاد فایل جدید‪ ،‬به فهرست گزینه ی اصلی مراجعه کرده‪ ،‬سپس ‪.Project -> Add New Item...‬‬ ‫‪.5‬‬

‫روی ‪ ،Code File‬واقع در لیست میانی کلیک کنید‪.‬‬ ‫‪.6‬‬

‫‪471‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
.‫ تغییر دهید‬Customer ‫اسم فایل مورد نظر را به‬ .4

.‫ را کلیک کنید‬Add ‫حال‬ .1

.‫ را به ترتیب زیر اصالح کنید‬Customer.cs ‫فایل‬ .1


public enum AccountType { Checking, Saving, Other }
public class Customer
{
public string AccountNumber;
public AccountType Type;
public string FullName;
public double Balance;
public short PIN;
public Customer(string acnt = "000-000000-000", AccountType category = AccountType.Other,string name = "John Doe")
{
AccountNumber = acnt;
Type = category;
FullName = name;
PIN = 0;
Balance = 0.00D;
}
}

NationalBank4 -> Add -> New ‫ راست کلیک کرده سپس‬،Solution Explorer ‫ در پنجره ی‬،‫ برای ایجاد فایل جدید‬.82

. Item...

.‫ را بزنید‬Enter ‫ تغییر داده و کلید‬Management ‫ از لیست میانی اسم مربوطه را به‬Code File ‫ پس از انتخاب‬.88

.‫ فایل را به صورت زیر تکمیل کنید‬.82

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#‬کلیک کنید‪ .‬در‬

‫لیستی که نمایان می شود‪ ،‬روی ‪ while‬دوبار کلیک کنید‪.‬‬

‫به منظور اجرای شرط ‪ 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‬‬

‫…‪Press any key to continue‬‬

‫برای اجرای صحیح شرط ‪ ،while‬باید مکانیزمی برای ‪ compiler‬در نظر بگیرید تا بتواند از مقدار ارجاع برای شرط‪ ،‬متغیر یا عبارت مورد نظر‬

‫استفاده کند (که گاهی در قالب ‪ /‬فرم متغیری است که مقداردهی اولیه می شود‪ ،‬اگرچه ممکن است در قالب عبارت های دیگر نیز ظاهر‬

‫شود)‪ .‬شرط ‪ while‬به ترتیب زیر با مثال روشن میشود‪.‬‬

‫‪474‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
while ‫به کاربردن‬

.‫ را بدین صورت اصالح کنید‬Management.cs ‫ فایل‬.8


using System;
public class Management
{
private int CreateNewAccount()
{
. . . No Change
}
public static int Main()
{
int? Counter = 1;
Customer accountHolder = null;
Management registration = new Management();
Console.Title = "National Bank";
while (Counter < 5)
{
accountHolder = registration.CreateNewAccount();
Console.WriteLine("Enter the customer's initial deposit");
accountHolder.Balance = registration.GetMoney();
Console.Clear();
registration.ShowAccountInformation(accountHolder);
Counter++;
Console.WriteLine("Press Enter for Next Action");
Console.ReadKey();
Console.Clear();
}
return 0;
}
}

.‫ را بزنید‬F5 ‫ رای اجرای برنامه می توانید کلید‬.2

.‫ طالعات مورد نیاز را به ترتیب زیر وارد کنید‬.1

Account # 202-410443-240

Account Type: 1

Customer Name: Paul Martin Eloundou

475
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
PIN: 8402

Initial Deposit: 750

Account #: 202-103344-042

Account Type: 2

Customer Name: Jimmy Simms

PIN: 2468

Initial Deposit 500

Account # 410-240301-443

Account Type: 2

Customer Name: Eya Miri

PIN: 1119

Initial Deposit: 1500

Account # 718-202404-240

Account Type: 1

476
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫‪Customer Name:‬‬ ‫‪Alain Gassila‬‬

‫‪PIN:‬‬ ‫‪2226‬‬

‫‪Initial Deposit:‬‬ ‫‪220.8‬‬

‫‪ .1‬اکنون ‪ Enter‬را بزنید‪.‬‬

‫دستور ‪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‬را به کار ببرید‪ .‬فرمول آن به شرح زیر است‪.‬‬

‫;)‪do while (Condition‬‬

‫‪477‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫دستور مزبور (‪ )do...while‬ابتدا ‪ Statement‬را اجرا می کند‪ ،‬به دنبال آن ‪ Condition‬را بررسی می کند‪ .‬اگر ‪ Condition‬صحیح بود‪،‬‬

‫سپس ‪ Statement‬را دوباره اجرا می کند‪ .‬تا زمانی که ‪ Condition‬درست باشد‪ Statement ،‬به صورت تکرار اجرا می شود‪ .‬زمانی که‬

‫‪ Condition‬به ‪ false‬ارزیابی شود‪ ،‬تکرار (اجرای مداوم دستور) به پایان می رسد‪.‬‬

‫چنانچه دستور مورد نظر کوتاه بود‪ ،‬به طور مثال متشکل از تنها یک خط بود‪ ،‬می توان به راحتی آن را پس از ‪ 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‬مورد نظر طوالنی بوده و بیش از یک خط جا می گیرد‪ ،‬آن را با "{" باز آغاز کرده و با "}" بسته به پایان برسانید‪.‬‬

‫شمارش و تکرار‬

‫فایل ‪ Management.cs‬را به ترتیب زیر اصالح کنید‪.‬‬ ‫‪.8‬‬


‫;‪using System‬‬
‫‪public class Management‬‬

‫‪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;
}
}

.‫ را زده تا برنامه اجرا شود‬F5 .2

.‫مقادیر مورد نیاز را بدین صورت وارد کنید‬ .1


479
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
Account Number: 301-240410-202

Account Type: 1

Customer Name: Frank Trombs

PIN: 9731

Initial Deposit: 40.1

.‫ را بزنید‬Enter ‫حال کلید‬ .4

==========================================
==-= 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

.‫فشار دهید‬

.‫ را بزنید‬Enter ‫ وارد کرده و‬125.85 ‫اکنون‬ .6


===========================================
==-= National Bank =-======================
Customer Account Information
-------------------------------------------
Account #: 301-240410-202
Account Type: Checking
Full Name: Frank Trombs
PIN #: 9731
Balance: 165.95
===========================================

480
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫‪ .4‬پس از زدن ‪ Enter‬پنجره ی ‪ DOS‬بسته شده و به محیط برنامه نویسی بازگردانده می شوید‪.‬‬

‫‪.1‬از محیط برنامه نویسی خارج شوید‪.‬‬

‫مدیریت دستورات شرطی‬

‫‪For‬‬

‫دستور ‪ for‬اغلب به منظور شمارش تعدادی آیتم مورد استفاده قرار می گیرد‪ .‬در ساختار معمولَش‪ ،‬حلقه ی ‪ for‬به سه بخش تقسیم می شود‪.‬‬

‫اولین بخش‪ ،‬نقطه ی آغاز شمارش را مشخص می کند‪ .‬بخش دوم حد شمارش را تعیین می کند‪ .‬آخرین بخش تکرار یا تناوب شمارش را تعیین‬

‫می کند‪ .‬ترکیب نحوی حلقه ی ‪ for‬به این صورت می باشد‪.‬‬

‫;‪for(Start; End; Frequency) Statement‬‬

‫عبارت ‪ Start‬متغیری است که به عنوان مقدار اولیه (آغازین) تخصیص داده می شود که می تواند ;‪ Count = 0‬باشد (‪ Start‬مقدار آغازین یا‬

‫نقطه ی شروع حلقه است که می تواند ‪ 2‬باشد)‪.‬‬

‫عبارت ‪ 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

Press any key to continue...

‫تودرتو کردن دستور شرطی‬

.‫برنامه ی زیر را در نظر بگیرید‬

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 ‫از برنامه ی باال به منظور درخواست یکی از اعداد‬

‫مثال‬

What Type of House Would you Like to Purchase?


1 - Single Family
2 - Town House

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...

‫تودرتو کردن شرط ها‬

.‫ را به ترتیب زیر اصالح کنید‬Management.csc ‫ فایل‬.8


using System;
public class Management
{
private Customer CreateNewAccount()
{
. . . No Change
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);

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();

if (amount > accountHolder.Balance)


{
Console.WriteLine("You are not allowed to withdraw more money than your account has.");

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;
}
}

.‫ برنامه را اجرا کنید‬F5 ‫ با زدن کلید‬.2

.‫ اطالعات الزم را به صورت زیر وارد کنید‬.1

Account # 202-410443-240

Account Type: 1

Customer Name: Paul Martin Eloundou

PIN: 8402

Initial Deposit: 750

.‫ را بزنید‬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

.‫ را بزنید‬Enter ‫ را به عنوان مبلغ برداشتی تایپ کنید و‬425.85 .6

.‫ را بزنید‬Enter ‫ را وارد کرده و بعد کلید‬2 ‫در مرحله ی بعد عدد‬ .4

.‫ را بزنید‬Enter ‫ را تایپ کنید و‬22.84 ‫مبلغ‬ .1


===========================================
==-= National Bank =-======================
Customer Account Information
-------------------------------------------
Account #: 202-410443-240
Account Type: Checking
Full Name: Paul Martin Eloundou
PIN #: 8402
Balance: 346.99
===========================================
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 ‫ حال‬.1

.‫ را بزنید‬Enter ‫ وارد کنید و‬500 ‫ مقدار مبلغ برداشتی را‬.82


Enter Withdrawal Amount: 500

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:‬‬

‫‪ 0 .82‬را تایپ کنید‪.‬‬

‫‪ .81‬با زدن ‪ Enter‬از ‪ DOS‬خارج گشته و به محیط برنامه نویسی باز گردید‪.‬‬

‫قفل کردن تراکنش‬

‫زمانی که شما به ایجاد برنامه های (کاربردی) سرویس گیرنده ‪ /‬سرویس دهنده یا منابع فشرده می پردازید‪ ،‬خواهید دانست که امکان‬

‫دسترسی چندین کاربر یا بیش از یک منبع به برنامه ی شما یا انجام عملیاتی بر شئی از برنامه ی شما وجود دارد‪ .‬مثال آن تالش چندین‬

‫شخص بر افزودن رکورد یا خط جدید به یک فایل یکسان است‪ .‬در برخی موارد با چنین رخدادی موافق هستید ولی در برخی شرایط سعی دارید‬

‫از بروز آن جلوگیری کنید‪.‬‬

‫به منظور جلوگیری از دسترسی کاربر یا یک منبع به شئ از برنامه ی کاربردی مورد نظر‪ ،‬الزم است آن قسمت از تراکنش که عملیات در آن جایز‬

‫نیست قفل ایجاد شود‪ .‬برای نیل به این هدف فرمول زیر را به کارببرید‪.‬‬

‫‪Declare a Variable‬‬
‫)‪lock(Variable‬‬
‫{‬
‫‪// Do what you want here‬‬
‫}‬
‫‪// The variable has been released‬‬

‫نحوه ی قفل کردن تراکنش‬

‫فایل ‪ Management.cs‬را به صورت زیر اصالح کنید‪.‬‬ ‫‪.8‬‬


‫;‪using System‬‬
‫‪public class Management‬‬
‫{‬

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

‫کلید ‪ F5‬را زده تا برنامه اجرا شود‪.‬‬ ‫‪.2‬‬

‫کلیه ی مراحل بخش پیشین را دنبال کنید‪.‬‬ ‫‪.1‬‬

‫به محیط برنامه نویسی خود بازگردید‪.‬‬ ‫‪.4‬‬

‫ایجاد وقفه در جریان دستور شرطی‬

‫دستور ‪ break‬به منظور ایجاد وقفه در یک حلقه یا متوقف کردن آن به کار می رود‪ .‬فرمول دستور مذکور به شرح زیر می باشد‪.‬‬

‫;‪break‬‬

‫اگرچه ‪ break‬از تنها یک کلمه تشکیل شده است‪ ،‬اما به خودی خود یک دستور کامل تلقی می گردد؛بنابراین‪ ،‬باید همیشه در خط مختص به‬

‫خودش قرار گیرد (که به افزایش و بهبود خوانایی برنامه کمک شایانی می کند)‪.‬‬

‫دستور ‪ break‬برای نزدیک ترین دستور پیشین (دستوری که بالفاصله ‪ break‬پس از آن در خط بعدی قرار گرفته) به کار بسته می شود‪،‬‬

‫البته منوط به اینکه دستور مذکور (پیشین) قابل اجرا باشد‪ .‬دستور ‪ break‬در شرط ‪ do…while ،while‬و همچنین در حلقه های ‪ for‬به‬

‫منظور متوقف کردن عمل در حال اجرا بکار می رود‪ .‬در مثال زیر تعداد طبقات یک ساختمان از ‪ 8‬تا ‪ 82‬شمرده می شود ولی با استفاده از دستور‬

‫‪ break‬حین شمارش عدد ‪ 1‬برنامه متوقف می گردد‪.‬‬

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

‫هنگام پردازش حلقه‪ ،‬چنانچه دستور مورد نظر به مقدار نادرستی برخورد کرد‪ ،‬شما می توانید با استفاده از دستور ‪ continue‬در دستورات‬

‫شرطی ‪ do...while ،while‬و ‪ for‬دستور بعدی را نادیده گرفته یا از مقدار غلط و نامعتبر بولی مستقیم به مقدار معتبر بعدی بروید (این‬

‫برخالف دستور ‪ break‬می باشد که به طور کلی از حلقه خارج می گردد)‪ .‬مشابه دستور ‪ ،break‬کلیدواژه ی ‪ continue‬نزدیک ترین دستور‬

‫شرطی پیش از خود را تحت تاثیر قرار می دهد و باید در خطی مجزا قرار گیرد‪ .‬مثال زیر باید طبقات یک ساختمان را از ‪ 8‬تا ‪ 6‬بشمارد‪ ،‬به نحوه ی‬

‫استفاده از دستور ‪ continue‬در آن توجه کنید‪.‬‬

‫;‪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‬کردن یک مقدار‪ ،‬چندین مقدار جلو برود) به مقدار دلخواه شما‬

‫می پرد‪ .‬برای این منظور‪ ،‬در حلقه به مقدار جاری توجه کنید و زمانی که به مقدار مورد نظر رسید‪ ،‬آن را تغییر دهید‪ .‬در مثال زیر از برنامه‬

‫خواسته شده از ‪ 8‬تا ‪ 85‬بشمارد‪.‬‬

‫;‪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…

‫رفتن به یک لیبل‬

.‫ را به ترتیب زیر اصالح کنید‬Management.cs ‫ فایل‬.8


using System;
public class Management
{
. . . No Change
public static int Main()
{
. . . No Change
registration.ShowAccountInformation(accountHolder);
do
{
. . . No Change
lock (registration)
{
switch (nextAction)
{
case 0:
goto EndTime;
break;
case 1:
Console.Clear();
registration.ShowAccountInformation(accountHolder);
Console.Write("Press Enter for next operation");
Console.ReadKey();
break;
. . . No Change
}
}
if ((nextAction < 1) || (nextAction > 4))
Console.WriteLine("Invalid Action: Please enter a value between 1 and 4");
} while ((nextAction >= 1) && (nextAction <= 4));
EndTime:
Console.ReadKey();
return 0;
}
}

.‫ را زده تا برنامه اجرا شود‬F5 .2

.‫ اطالعات مورد نیاز را به صورت زیر وارد کنید‬.1


494
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
Account #: 202-103344-042

Account Type: 2

Customer Name: Jimmy Simms

PIN: 2468

Initial Deposit 500

.‫ را فشار دهید‬Enter ‫ کلید‬.4

===========================================
==-= 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

.‫ را بزنید‬Enter ‫ را به عنوان مبلغ واریزی وارد کنید و‬328.66 ‫ مقدار‬.6


===========================================
=-= National Bank =-======================
ustomer Account Information
------------------------------------------
ccount #: 202-103344-042
ccount Type: Saving
ull Name: Jimmy Simms
IN #: 2468
alance: 828.66
==========================================

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

‫از پنجره ی ‪ DOS‬خارج گشته و به محیط برنامه نویسی بازگردید‪.‬‬ ‫‪.1‬‬

‫محیط برنامه نویسی را ببندید‪.‬‬ ‫‪.1‬‬

‫متدها و دستورات شرط ها‬

‫مقداری را از متد بازگرداندن‬

‫مستحضر هستید هنگامی که متد ‪ 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;
}
}

‫ در بخش بعدی فایده ی استفاده ی آن در دستورات شرطی را توضیح خواهیم‬.‫ عملیات بازگشت هیچ کار خاصی انجام نمی دهد‬،‫در این مثال‬

.‫داد‬

‫متدها و شرط ها‬

.‫ را راه اندازی کنید‬Microsoft Visual Studio .8

.‫ کلیک کنید‬File -> New Project... ‫ روی‬،‫ در فهرست گزینه ی اصلی‬،‫برای ایجاد برنامه ی جدید‬ .2

.‫ کلیک کنید‬Empty Project ‫ روی‬،‫در فهرست میانی‬ .1

.‫ را بزنید‬Enter ‫ سپس‬،‫ انتخاب کرده‬NationalBank5 ‫اسم پروژه را‬ .4

.‫ را انتخاب کنید‬Project -> Add New Item... ‫ فهرست اصلی را بازکرده و گزینه ی‬،‫به منظور ایجاد فایل جدید‬ .5

.‫ را از لیست میانی انتخاب کنید‬Code File .6

.‫ تغییر دهید‬Customer ‫اسم فایل را به‬ .4

.‫ را کلیک کنید‬Add ‫اکنون‬ .1

.‫ را به صورت زیر اصالح کنید‬Customer.cs ‫فایل‬ .1


public enum AccountType { Checking, Saving, Other }
public class Customer
{
public string AccountNumber;
public AccountType Type;
public string FullName;
public double Balance;
public short PIN;
public Customer(string acnt = "000-000000-000",
AccountType category = AccountType.Other,
string name = "John Doe")
497
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
{
AccountNumber = acnt;
Type = category;
FullName = name;
PIN = 0;
Balance = 0.00D;
}
}

.NationalBank5 -> Add -> New Item... : ‫ راست کلیک کرده سپس‬،Solution Explorer ‫ در پنجره ی‬،‫ برای ایجاد فایل جدید‬.82

.‫ را بزنید‬Enter ‫ تغییر داده و کلید‬Management ‫ اسم مورد نظر را به‬،‫ از لیست میانی‬Code File ‫ پس از انتخاب‬.88

.‫ فایل را به ترتیب زیر اصالح کنید‬.82


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: ");
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;

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( ‫ برنامه ترجمه‬،‫همین دلیل‬

'Program.GetHouseType()': not all code paths return a value

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;
}
}

‫بازگرداندن مقداری به صورت شرطی‬

.‫ را بدین ترتیب تغییر دهید‬Management.cs ‫فایل‬ .8


using System;
public class Management
{
private AccountType SpecifyAccountType()
{
byte type = 0;
Console.WriteLine("What type of account the customer wants to open");
Console.WriteLine("1 - Checking Account");
502
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
Console.WriteLine("2 - Savings Account");
Console.Write("Enter account type: ");
type = byte.Parse(Console.ReadLine());
if (type == 1)
return AccountType.Checking;
else if (type == 2)
return AccountType.Saving;
else
return AccountType.Other;
}
private Customer CreateNewAccount()
{
Customer client = new Customer();
. . . No Change
return client;
}
public double Deposit()
{
double amount = 0;
Console.Write("Amount to deposit: ");
amount = double.Parse(Console.ReadLine());
return amount;
}
public double Withdraw(Customer cust)
{
double amount = 0;
Console.Write("Amount to withdraw: ");
amount = double.Parse(Console.ReadLine());
if (amount > cust.Balance)
{
Console.WriteLine(
"You are not allowed to withdraw more money than your account has.");
Console.ReadKey();
return 0.00D;
}
else
return amount;
}
private void ShowAccountInformation(Customer cust)
{
. . . 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();

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

.‫ اطالعات الزم را به این ترتیب وارد کنید‬.1

Account #: 257-484902-444

Account Type: 1

Customer Name: Josh Nay

PIN: 5008

Initial Deposit 250

===========================================
=-= 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

.‫ را فشار دهید‬Enter ‫ کلید‬.4

===========================================
==-= 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

.‫ را بزنید‬Enter ‫ را به عنوان مبلغ واریزی تایپ کنید و کلید‬164.37 .6

===========================================

==-= National Bank =-======================

Customer Account Information

-------------------------------------------

Account #: 257-484902-444

Account Type: Checking

Full Name: Josh Nay

PIN #: 5008

Balance: 85.63

===========================================

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 ‫ را وارد کنید و‬2 ‫ اکنون عدد‬.4

.‫ را بزنید‬Enter ‫ سپس‬،‫ وارد کنید‬116.18 ‫ مبلغ سپرده را‬.1

===========================================

==-= National Bank =-======================

Customer Account Information

-------------------------------------------
506
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
Account #: 257-484902-444

Account Type: Checking

Full Name: Josh Nay

PIN #: 5008

Balance: 201.81

===========================================

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 ‫ عدد‬،‫ در این مرحله‬.1

.‫ را بزنید‬Enter ‫ سپس‬،‫ را به عنوان مبلغ برداشتی وارد کنید‬300 ‫ رقم‬.82

Amount to withdraw: 300

You are not allowed to withdraw more money than your account has.

.‫ را بزنید‬Enter ‫ کلید‬.88

.‫ را بزنید‬Enter ‫ را وارد کرده و دوباره‬2 ‫ عدد‬.82

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

‫متوقف شود‪ .‬برنامه ی فوق این نتیجه را به دست می دهد‪.‬‬

‫!!!‪C# Programming is fun‬‬

‫!!!‪C# Programming is fun‬‬

‫!!!‪C# Programming is fun‬‬

‫!!!‪C# Programming is fun‬‬

‫!!!‪C# Programming is fun‬‬

‫!!!‪C# Programming is fun‬‬

‫!!!‪C# Programming is fun‬‬

‫‪508‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬
‫!!!‪C# Programming is fun‬‬

‫!!!‪C# Programming is fun‬‬

‫‪Press any key to continue...‬‬

‫در برنامه ی باال‪ ،‬از عملگر ‪ 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‬می توان ابتدا متغیر بولی را تعریف و مقداردهی اولیه کرد‪ ،‬یا می توان متغیر بولی به کاربرد که مقدار آن از‬

‫پیش شناس و مشخص است‪ .‬مقدار مربوط می تواند از یک متد بیاید یا از هر وسیله ی دیگری‪.‬‬

‫استفاده از )‪while (true‬‬

‫‪ .8‬برای راه اندازی برنامه (کاربردی) جدید‪ ،‬به فهرست گزینه ی اصلی مراجعه کرده و ‪ File -> New Project...‬را کلیک کنید‪.‬‬

‫‪ .2‬گزینه ی ‪ Empty Project‬را از لیست میانی انتخاب کنید‪.‬‬

‫‪ .1‬اسم پروژه را به ‪ DepartmentStore8‬تغییر دهید‪.‬‬

‫‪ .4‬به منظور ایجاد کالس جدید‪ ،‬در فهرست اصلی‪ ،‬روی ‪ Project -> Add Class...‬کلیک کنید‪.‬‬

‫‪ .5‬اسم کالس را ‪ StoreItem‬انتخاب کرده‪ ،‬سپس ‪ Add‬را کلیک کنید‪.‬‬

‫‪ .6‬فایل را به ترتیب زیر اصالح کنید‪.‬‬

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

.‫ را از لیست میانی انتخاب کنید‬Code File ‫ گزینه ی‬.1

.‫ را بزنید‬Enter ‫ تغییر داده و‬Inventory ‫ اسم آن را به‬.1

.‫ فایل را به ترتیب زیر اصالح کنید‬.82

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;
}
}

.‫ برنامه را تست کنید‬.88

.‫ اطالعات مورد نیاز را به صورت زیر وارد کنید‬.82

Item Number: 279475

Item Name: Wool Jersey Ruffle Dress

Size: 8

Unit Price: 150

Item Number: 729070

Item Name: Mid-Weight Flat-Front Wool Trouser Pants

511
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
Size: 36W - 30L

Unit Price: 69.95

Item Number: 297004

Item Name: Ponte Pencil Skirt with Pleated Detail

Size: 16

Unit Price: 80

Item Number: -1

Department Store Inventory


------------------------
Enter Item #: 279475
Enter Item Name: Wool Jersey Ruffle Dress
Enter Item Size: 8
Enter Unit Price: 150
=-= Store Item =-=
Item #: 279475
Item Name: Wool Jersey Ruffle Dress
Size: 8
Unit Price: 150
------------------------
Enter Item #: 729070
Enter Item Name: Mid-Weight Flat-Front Wool Trouser Pants
Enter Item Size: 36W - 30L
Enter Unit Price: 69.95
=-= Store Item =-=
Item #: 729070
Item Name: Mid-Weight Flat-Front Wool Trouser Pants
Size: 36W - 30L
Unit Price: 69.95
------------------------
Enter Item #: 297004
Enter Item Name: Ponte Pencil Skirt With Pleated Detail
Enter Item Size: 16
512
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫‪Enter Unit Price: 80‬‬
‫=‪=-= Store Item =-‬‬
‫‪Item #:‬‬ ‫‪297004‬‬
‫‪Item Name: Ponte Pencil Skirt With Pleated Detail‬‬
‫‪Size:‬‬ ‫‪16‬‬
‫‪Unit Price: 80‬‬
‫‪------------------------‬‬
‫‪Enter Item #:‬‬ ‫‪-1‬‬

‫‪ .81‬پنجره ی ‪ DOS‬را بسته و به محیط برنامه نویسی بازگردید‪.‬‬

‫بازگشت‬

‫تصور کنید می خواهید اعداد فرد مثبت را از بیشنه مشخصی تا کمینه ی معینی بشمارید‪ .‬به عنوان مثال‪ ،‬برای شمردن اعداد فرد از ‪ 8‬تا ‪ 1‬به‬

‫این ترتیب عمل می کنیم‪.‬‬

‫‪1، 3، 5، 7،9‬‬

‫توجه داشته باشید که برای انجام این عملیات‪ ،‬باالترین مقدار را در نظر می گیریم‪ ،‬سپس ‪ 2‬را از آن کم می کنیم تا مقدار قبلی را به دست‬

‫آوریم‪ .‬در برنامه نویسی برای حل این مشکل‪ ،‬ابتدا تابع را می نویسیم سپس کاری می کنیم که تابع خود را فرابخواند‪ .‬این پایه ی بازگشت در‬

‫برنامه نویسی است‪.‬‬

‫معرفی بازگشت‬

‫برای راه اندازی برنامه ی کاربردی جدید‪ ،‬در فهرست گزینه ی اصلی‪ File -> New Project... ،‬را کلیک کنید‪.‬‬ ‫‪.8‬‬

‫‪ Empty Project‬را از لیست میانی انتخاب کنید‪.‬‬ ‫‪.2‬‬

‫اسم پروژه را به ‪ Recursions‬تغییر دهید‪ ،‬کلید ‪ Enter‬را بزنید‪.‬‬ ‫‪.1‬‬

‫در پنجره ی ‪ ،Solution Explorer‬راست کلیک کرده سپس ‪Recursions -> Add -> New Item :‬‬ ‫‪.4‬‬

‫در لیست میانی روی ‪ Code File‬کلیک کنید‪.‬‬ ‫‪.5‬‬

‫اسم فایل را ‪ Calculator‬انتخاب کنید و کلید ‪ Enter‬را فشار دهید‪.‬‬ ‫‪.6‬‬

‫ایجاد متد بازگشتی‬

‫یکی از فرمول های موجود برای ایجاد متد بازگشتی به صورت زیر می باشد‪.‬‬

‫‪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;
}
}

.‫ برنامه را تست کنید‬.2

.‫ را بزنید‬Enter ‫ را وارد کرده و‬1 ‫ عدد‬.1

To calculate a factorial، enter a (small positive) number: 8


The factorial of 8 = 40320
Press any key to continue...

.‫ خارج شوید‬DOS ‫ از پنجره ی‬Enter ‫ با زدن کلید‬.4

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...

‫به کاربردن متدهای بازگشتی‬

.‫ فایل را به ترتیب زیر اصالح کنید‬.8


using System;
public class Calculator
{
private long Factorial(long number)
{
if (number <= 1)
return 1;
return number * Factorial(number - 1);
}
private long Permutation(long n, long r)
{
if (r == 0)
return 0;
if (n == 0)
return 0;
if ((r >= 0) && (r <= n))
return Factorial(n) / Factorial(n - r);
else
return 0;
}

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;
}
}

.‫برنامه را تست کنید‬ .8

.‫ را بزنید‬Enter ‫ را وارد کنید و بعد‬20 ،‫به عنوان اولین عدد درخواستی‬ .2

.‫ را فشار دهید‬Enter ‫ را وارد کرده و کلید‬5 ،‫به عنوان عدد دوم‬ .1

To calculate a factorial، enter a (small positive) number: 20


To calculate a permutation and the combination، enter a second (small positive)
number: 5
Factorial: F(20) = 2432902008176640000
Permutation: P(20، 5) = 1860480
Combination: C(20، 5) = 15504

518
7‫ واحد‬- ‫ طبقه دوم‬651 ‫ پالک‬- ‫ جنب بانک صادرات‬- ‫ باال تر از خيابان ملک‬- ‫ خيابان شريعتی‬- ‫ تهران‬: ‫آدرس آموزشگاه‬
88146323 - 88446780 - 88146330
‫در پایان ضمن تشکر از انتخاب شما‪،‬امیدواریم مطالب این کتاب برای شما مفید بوده‬
‫باشد‪.‬‬
‫عالوه بر این می توانید پیشنهادات و انتقادات خود را از طریق‬
‫با ما در میان بگذارید‪.‬‬ ‫رایانامه ‪[email protected]‬‬

‫‪519‬‬
‫آدرس آموزشگاه ‪ :‬تهران ‪ -‬خيابان شريعتی ‪ -‬باال تر از خيابان ملک ‪ -‬جنب بانک صادرات ‪ -‬پالک ‪ 651‬طبقه دوم ‪ -‬واحد‪7‬‬
‫‪88146323 - 88446780 - 88146330‬‬

You might also like