Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

آموزش جامع شی گرایی در سی شارپ

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Prochain SlideShare
Learning uml 2_part_1
Learning uml 2_part_1
Chargement dans…3
×

Consultez-les par la suite

1 sur 167 Publicité

آموزش جامع شی گرایی در سی شارپ

Télécharger pour lire hors ligne

زبان برنامه سازی #C یکی از قدرتمندترین زبان های برنامه سازی است، امروزه Platform.Net یکی از بهترین محیط های تولید محصولات نرم افزاری به شمار می رود و زبان #C یکی از زبان های برنامه سازی شی گرا این Platform است. با به کارگیری برنامه نویسی شی گرا، نرم افزار تولید شده بسیار قابل فهم تر شده، نگهداری و سازماندهی آن اصولی تر و اصلاح و خطایابی آن ساده تر می شود.

سرفصل هایی که در این آموزش به آن پرداخته شده است:

درس اول: مفاهیم پایه ای شی گرایی
درس دوم:کلاس و شی
درس سوم: سازنده ها و مخرب ها
درس چهارم: توابع یوتیلیتی
درس پنجم: بازنویسی رفتارهای کلاس و مفهوم Params
درس شیشم: اجزاء داده ای و تابعی Static
درس هفتم: وراثت
...

برای توضیحات بیشتر و تهیه این آموزش لطفا به لینک زیر مراجعه بفرمائید:
http://faradars.org/courses/fvcs9404

زبان برنامه سازی #C یکی از قدرتمندترین زبان های برنامه سازی است، امروزه Platform.Net یکی از بهترین محیط های تولید محصولات نرم افزاری به شمار می رود و زبان #C یکی از زبان های برنامه سازی شی گرا این Platform است. با به کارگیری برنامه نویسی شی گرا، نرم افزار تولید شده بسیار قابل فهم تر شده، نگهداری و سازماندهی آن اصولی تر و اصلاح و خطایابی آن ساده تر می شود.

سرفصل هایی که در این آموزش به آن پرداخته شده است:

درس اول: مفاهیم پایه ای شی گرایی
درس دوم:کلاس و شی
درس سوم: سازنده ها و مخرب ها
درس چهارم: توابع یوتیلیتی
درس پنجم: بازنویسی رفتارهای کلاس و مفهوم Params
درس شیشم: اجزاء داده ای و تابعی Static
درس هفتم: وراثت
...

برای توضیحات بیشتر و تهیه این آموزش لطفا به لینک زیر مراجعه بفرمائید:
http://faradars.org/courses/fvcs9404

Publicité
Publicité

Plus De Contenu Connexe

Similaire à آموزش جامع شی گرایی در سی شارپ (20)

Plus par faradars (20)

Publicité

Plus récents (20)

آموزش جامع شی گرایی در سی شارپ

  1. 1. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫جامع‬ ‫آموزش‬‫شیئ‬‫شارپ‬ ‫سی‬ ‫در‬ ‫گرایی‬ ‫مدرس‬: ‫شجاعی‬ ‫رشید‬ ‫افزار‬ ‫نرم‬ ‫گرایش‬ ‫کامپیوتر‬ ‫ارشد‬ ‫کارشناس‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  2. 2. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫مفاهیم‬‫برنامه‬‫نویسی‬‫شی‬‫گرا‬: •‫کالس‬‫ها‬‫و‬‫اشیاء‬ •‫تعیین‬‫کننده‬‫های‬‫دسترسی‬ •‫کپسوله‬‫سازی‬ •‫وراثت‬ •‫واسط‬ •‫چندریختی‬ •‫خالصه‬‫سازی‬‫و‬‫تجرد‬ •‫کالس‬‫های‬‫انتزاعی‬ OOP: Object Oriented Programming ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  3. 3. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫برای‬‫‌های‬‫ه‬‫پروژ‬‫بزرگ‬‫و‬‫پیچیده‬‫‌توانید‬‫ی‬‫نم‬‫به‬‫راحتی‬‫پشت‬‫کامپیوتر‬‫نشسته‬‫و‬‫شروع‬‫ب‬‫ه‬‫‌نویسی‬‫ه‬‫برنام‬ ‫کنید‬. ‫برای‬‫دستیابی‬‫به‬‫بهترین‬‫راه‬،‫حل‬‫بایستی‬‫بدقت‬‫‌های‬‫ی‬‫نیازمند‬‫پروژه‬‫را‬‫تجزیه‬‫و‬‫تحلی‬‫ل‬‫کنید‬(‫تعیین‬ ‫کنید‬‫که‬‫سیستم‬‫چه‬‫کار‬‫‌خواهد‬‫ی‬‫م‬‫انجام‬‫دهد‬)‫و‬‫طرحی‬‫را‬‫توسعه‬‫دهید‬‫که‬‫آنها‬‫را‬‫برآورده‬‫سازد‬ (‫سیستم‬‫قادر‬‫به‬‫‌گیری‬‫م‬‫تصمی‬‫صحیح‬‫برای‬‫انجام‬‫وظایف‬‫خود‬‫باشد‬).‫در‬‫حالت‬‫‌آل‬‫ه‬‫اید‬‫قب‬‫ل‬‫از‬ ‫هرگونه‬،‫کدنویسی‬‫باید‬‫به‬‫سراغ‬‫فرآیند‬‫رفته‬‫و‬‫به‬‫دقت‬‫طراحی‬‫را‬‫انجام‬‫دهید‬.‫اگر‬‫این‬‫فر‬‫آیند‬ ‫مستلزم‬‫تحلیل‬‫و‬‫طراحی‬‫سیستم‬‫از‬‫نقطه‬‫‌نظر‬‫‌گرا‬‫ی‬‫ش‬،‫باشد‬‫آن‬‫را‬object-orientend analysis and design (OOAD)‫یا‬‫تحليل‬‫و‬‫طراحي‬‫‌گرا‬‫ي‬‫ش‬‫‌گویند‬‫ی‬‫م‬.‫‌نویسان‬‫ه‬‫برنام‬‫با‬ ‫تجربه‬‫مطلع‬‫هستند‬‫که‬‫تحلیل‬‫و‬‫طراحی‬‫‌تواند‬‫ی‬‫م‬‫در‬‫زمان‬‫و‬‫هزینه‬‫ایجاد‬‫برنامه‬‫بسیار‬‫صر‬‫‌جویی‬‫ه‬‫ف‬ ،‫کند‬‫با‬‫اجتناب‬‫از‬‫اعمال‬‫‌های‬‫ح‬‫طر‬‫ضعیف‬‫که‬‫در‬‫هر‬‫بار‬‫برنامه‬‫را‬‫به‬‫شكست‬‫کشانده‬‫و‬‫باعث‬‫م‬‫‌شوند‬‫ی‬ ‫کار‬‫از‬‫ابتدا‬‫آغاز‬‫گردد‬‫که‬‫همان‬‫تحمیل‬‫هزینه‬‫و‬‫زمان‬‫است‬.‫اگر‬‫چه‬‫‌های‬‫ش‬‫پرداز‬‫مختلفی‬‫از‬ OOAD‫وجود‬،‫دارد‬‫اما‬‫یك‬‫زبان‬‫گرافیكی‬‫برای‬‫نمایش‬‫نتایج‬‫هر‬‫فرآیند‬OOAD‫بیشتر‬‫از‬‫همه‬ ‫بكار‬‫گرفته‬‫شده‬‫است‬.‫این‬‫زبان‬UML (Unified Modeling Language)‫نام‬‫دارد‬.‫در‬ ‫حال‬‫حاضر‬‫زبان‬UML‫یكی‬‫از‬‫پرکاربردترین‬‫‌های‬‫ح‬‫طر‬‫نمایش‬‫گرافیكی‬‫برای‬‫مدل‬‫کردن‬ ‫‌های‬‫م‬‫سیست‬‫‌گرا‬‫ی‬‫ش‬‫است‬.‫برای‬‫مدل‬‫کردن‬‫‌ها‬‫م‬‫سیست‬‫از‬‫این‬‫زبان‬‫در‬‫سراسر‬‫مجموعه‬‫آموزشی‬‫پیش‬ ‫رو‬‫استفاده‬‫‌ایم‬‫ه‬‫کرد‬. OOAD & UML ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  4. 4. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫فرض‬‫کنید‬‫خواهیم‬‫یك‬‫کالس‬‫برای‬‫اشی‬‫ایی‬ ‫از‬‫نوع‬‫مستطیل‬‫ایجاد‬‫کنیم‬.‫برای‬‫یك‬ ‫مستطیل‬‫‌توانیم‬‫ی‬‫م‬‫اجزاء‬‫‌ای‬‫ه‬‫داد‬‫همانند‬ ‫طول‬‫و‬‫عرض‬‫در‬‫نظر‬‫بگیریم‬.‫همچنین‬ ‫‌توانیم‬‫ی‬‫م‬‫متدها‬‫یا‬‫همان‬‫اجزاء‬‫تابعی‬‫همان‬‫ند‬ ‫تنظیم‬‫کردن‬‫عرض‬‫و‬‫طو‬‫ل‬‫و‬‫همچنین‬ ‫محاسبه‬‫محیط‬‫در‬‫نظر‬‫بگیریم‬. ‫مثال‬‌:‫ایجاد‌یک‌کالس‌برای‌مستطيل‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  5. 5. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫برای‬‫ایجاد‬‫کالس‬‫در‬C#‫از‬‫واژه‬‫کلیدی‬class‫بصورت‬‫مقابل‬‫استفاده‬‌‫ی‬‫م‬‫شود‬. •Modifier:‫سطح‬‫دستیابی‬‫به‬‫کالس‬‫را‬‫مشخص‬‌‫ی‬‫م‬‫کند‬.‫سطح‬‫دستیابی‬ ‫مشخص‬‌‫ی‬‫م‬‫کند‬‫که‬‫کالس‬‫تعریف‬‫شده‬‫چگونه‬‫باید‬‫دستیابی‬‫شود‬.‫در‬‫اینج‬‫ا‬‫دو‬‫سطح‬ ‫دستیابی‬‫برای‬‫کالس‬‫داریم‬:public‫و‬internal‫وقتی‬‫سطح‬‫دستیابی‬public ‫تعریف‬‫شود‬‫به‬‫معنای‬‫این‬‫است‬‫که‬‫این‬‫کالس‬‫خارج‬‫از‬‫فضای‬‫نامی‬‫که‬‫در‬‫آن‬‫ت‬‫عریف‬ ‌‫ی‬‫م‬‫شود‬‫قابل‬‫استفاده‬‫است‬.‫بعبارت‬،‫دیگر‬‫سطح‬‫دستیابی‬‫عمومی‬‫به‬‫معنا‬‫ی‬‫عدم‬ ‫وجود‬‫محدودیتی‬‫در‬‫دستیابی‬‫است‬.‫سطح‬‫دستیابی‬internal‫مشخص‬‌‫ی‬‫م‬‫کند‬‫که‬ ‫کالس‬‫فقط‬‫در‬‫همان‬‫فضای‬‫نامی‬‫که‬‫تعریف‬‌‫ی‬‫م‬‫شود‬‫قابل‬‫استفاده‬ ‫است‬.Modifier‫بصورت‬‫پیش‬‫فرض‬internal‫تعریف‬‌‫ی‬‫م‬‫شود‬. •class:‫واژه‬‫ای‬‫کلیدی‬‫است‬‫که‬‫به‬‫همین‬‫صورت‬‫برای‬‫تعریف‬‫کالس‬‫به‬‫کار‬ ‌‫ی‬‫م‬‫رود‬. •name:‫نامی‬‫است‬‫که‬‫توسط‬‫برنامه‬‫نویس‬‫برای‬‫کالس‬‫انتخاب‬‌‫ی‬‫م‬‫گردد‬.‫نام‬‫گذاری‬ ‫برای‬،‫کالس‬‫از‬‫نامگذاری‬‫برای‬‫شناسه‬‫ها‬‫پیروی‬‌‫ی‬‫م‬‫کند‬. •classmember:‫اعضای‬‫کالس‬‫را‬‫مشخص‬‌‫ی‬‫م‬‫کند‬‫و‬‫شامل‬‫اعضاء‬‫داده‬‫ای‬‫و‬ ‫اجزاء‬‫تابعی‬‫کالس‬‌‫ی‬‫م‬‫باشند‬. ‫شکل‌کلي‌تعریف‌کالس‬ [modifier] class name { Classmembers } ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  6. 6. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫از‬‫مطالب‬‫قبل‬‫بخاطر‬‫دارید‬‫که‬UML‫یك‬‫زبان‬‫گرافیكی‬‫بكار‬‫رفته‬‫توسط‬ ‫‌نویس‬‫ه‬‫برنام‬‫برای‬‫نمایش‬‫‌های‬‫م‬‫سیست‬‫‌گرا‬‫ی‬‫ش‬‫به‬‫یك‬‫روش‬‫استاندارد‬‫اس‬‫ت‬.‫هر‬ ‫کالس‬‫در‬‫یك‬‫نمودار‬‫کالس‬‫بصورت‬‫یك‬‫مستطیل‬‫و‬‫با‬‫سه‬‫قسمت‬‫‌س‬‫ل‬‫مد‬‫ازی‬ ‫‌شود‬‫ی‬‫م‬.‫بخش‬‫فوقانی‬‫حاوی‬‫نام‬‫کالس‬‫است‬‫که‬‫در‬‫وسط‬‫قرار‬‫گرفته‬‫و‬‫بص‬‫ورت‬ ‫توپر‬‫نوشته‬‫‌شود‬‫ی‬‫م‬.‫بخش‬‫میانی‬‫حاوی‬‫صفات‬‫کالس‬‫است‬‫و‬‫بخش‬‫تحت‬‫انی‬ ‫حاوی‬‫عملیات‬‫کالس‬‫است‬.‫دیاگرام‬‫مقابل‬‫مبادرت‬‫به‬‫‌سازی‬‫ل‬‫مد‬‫داده‬‫عضو‬ length‫و‬breadth‫بعنوان‬‫اجزاء‬‫داده‬‫ای‬‫در‬‫بخش‬‫میانی‬‫کالس‬‫کرده‬‫است‬. UML‫اعضای‬‫داده‬‫را‬‫در‬‫لیستی‬‫که‬‫در‬‫آن‬‫نام‬،‫صفت‬‫یك‬‫کولن‬‫و‬‫نوع‬‫صف‬‫ت‬ ‫قرار‬‫گرفته‬‫عرضه‬‫‌کند‬‫ی‬‫م‬.‫نوع‬‫صفات‬length‫و‬breadth‫از‬‫نوع‬int‫است‬‫که‬ ‫متناظر‬‫با‬int‫در‬C#‫‌باشد‬‫ی‬‫م‬.‫اعضاء‬‫‌ای‬‫ه‬‫داد‬length‫و‬breadth‫در‬C#‫حالت‬ private‫دارند‬‫و‬‫از‬‫اینرو‬‫در‬‫دیاگرام‬‫کالس‬‫با‬‫یك‬‫عالمت‬(-)‫در‬‫مقابل‬‫نام‬ ‫صفت‬‫مشخص‬‫شده‬‫است‬.‫عالمت‬‫منفی‬‫در‬UML‫معادل‬‫با‬‫‌کننده‬‫ح‬‫تصری‬ ‫دسترسی‬private‫در‬C#‫است‬.‫کالس‬Rectangle‫حاوی‬‫سه‬‫تابع‬‫عضو‬ public‫است‬،‫از‬‫اینرو‬‫در‬‫لیست‬‫دیاگرام‬‫کالس‬‫این‬‫سه‬‫عملیات‬‫در‬‫بخش‬ ‫تحتانی‬‫یا‬‫سوم‬‫جای‬‫‌اند‬‫ه‬‫گرفت‬.‫نماد‬‫جمع‬(+)‫قبل‬‫نام‬‫هر‬‫عملیات‬‫نشان‬‫م‬‫‌دهد‬‫ی‬ ‫که‬‫عملیات‬‌‫ر‬‫د‬C#‫حالت‬public‫دارد‬.‫عملیات‬setlength‫دارای‬‫یك‬‫پارامتر‬‫از‬ ‫نوع‬int‫است‬.‫در‬UML‫نوع‬‫برگشتی‬‫از‬‫یك‬‫عملیات‬‫با‬‫قرار‬‫دادن‬‫یك‬‫کولن‬‫و‬‫نوع‬ ‫برگشتی‬‫پس‬‫از‬‫پرانتزهای‬‫نام‬‫عملیات‬‫مشخص‬‫‌شود‬‫ی‬‫م‬. ‌‌‌‫نمودار‌کالس‌برای‌مستطيل‬Class Diagram ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  7. 7. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫شکل‌کلي‌ایجاد‌کردن‌اجزاء‌تابعي‌یا‌متد‌های‌کالس‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  8. 8. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫کالس‌مستطيل‬class Rectangle { // two fields private int breadth; private int length; // three methods public void setLength(int newValue) { length = newValue; } public void setBreadth(int newValue) { breadth = newValue; } public int getarea() { return 2 * (length + breadth); } ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  9. 9. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫در‬‫شكل‬‫مقابل‬‫شی‬‫بنام‬myrect‫از‬‫روی‬ ‫کالس‬Rectangle‫ایجاد‬‫شده‬. ‫شکل‌کلي‌ایجاد‌کردن‌یک‌شي‌از‌روی‌کالس‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  10. 10. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫تمام‬‫اشیائی‬‫که‬‫از‬‫روی‬‫یك‬‫کالس‬‫ایجاد‬ ‌‫ی‬‫م‬‫شوند‬‫بطور‬‫اختصاصی‬‫حاوی‬‫تمام‬‫اجزاء‬ ‫کالس‬‫مذکور‬‫هستند‬. ‫تعریف‌اشياء‬ Rectangle myrect1 = new Rectangle(); Rectangle myrect2 = new Rectangle(); ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  11. 11. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫در‬‫صورتیكه‬‫از‬‫دستور‬new‫در‬‫تعریف‬‫کردن‬ ‫اشیاء‬‫استفاده‬‫نكنیم‬‫شی‬‫ایجاد‬‫ن‬‌‫ی‬‫م‬‫ش‬،‫ود‬ ‫بلكه‬‫تنها‬‫یك‬‫مرجع‬‫یا‬‫همان‬‫اشاره‬‫گر‬‫ایج‬‫اد‬ ‌‫ی‬‫م‬‫شود‬.‫بنابراین‬‫مطابق‬‫شكل‬‌‫ی‬‫م‬‫توان‬ ‫تعریف‬‫شی‬‫را‬‫در‬‫دو‬‫مرحله‬‫انجام‬‫داد‬. ‫ایجاد‌کردن‌اشاره‌گر‌یا‌همان‌مرجع‌به‌اشياء‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  12. 12. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫در‬‫صورتیكه‬‫از‬‫دستور‬new‫در‬‫تعریف‬ ‫کردن‬‫اشیاء‬‫استفاده‬،‫نكنیم‬‫شی‬‫ایجاد‬ ‫ن‬‌‫ی‬‫م‬‫شود‬‫بلكه‬‫تنها‬‫یك‬‫مرجع‬‫یا‬‫همان‬ ‫اشاره‬‫گر‬‫ایجاد‬‌‫ی‬‫م‬‫شود‬‫که‬‌‫ی‬‫م‬‫تواند‬‫به‬‫ش‬‫ئی‬ ‫که‬‫قبال‬‫ایجاد‬‫شده‬‫نسبت‬‫داده‬‫شود‬‫و‬‫ب‬‫ه‬ ‫عنوان‬‫نام‬‫دوم‬‫شی‬‫مذکور‬‫در‬‫نظر‬‫گرفته‬ ‫شود‬. ‫نسبت‌دادن‌یک‌مرجع‌به‌یک‌شي‌موجود‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  13. 13. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫برای‬‫فراخوانی‬‫متدها‬‫ابتدا‬‫نام‬،‫شی‬‫عالم‬‫ت‬ ‫نقطه‬‫و‬‫سپس‬‫نام‬‫متد‬‫را‬‌‫ی‬‫م‬‫نویسیم‬‫و‬‫م‬‫قادیر‬ ‫مناسب‬‫را‬‫به‬‫عنوان‬‫آرگومان‬‫های‬‫مورد‬‫نیاز‬ ‫به‬‫متدها‬‫ارسال‬‌‫ی‬‫م‬‫کنیم‬. ‫نحوه‌فراخواني‌اجزاء‌تابعي‌کالس‌یا‌همان‌متدها‬ Rectangle R1 = new Rectangle(); ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  14. 14. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‫فراخواني‌متد‬getlength‌‫برای‌شي‬R1Rectangle R1 = new Rectangle(); ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  15. 15. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫ما‬‫در‬‫دنیایی‬‫از‬‫اشیاء‬‫زندگی‬‫‌کنیم‬‫ی‬‫م‬.‫کافیست‬‫نگاهی‬‫به‬‫اطراف‬‫خود‬‫بیانداز‬‫یم‬.‫اطراف‬ ‫ما‬‫پر‬‫است‬‫از‬،‫‌ها‬‫ل‬‫اتومبی‬،‫هواپیماها‬،‫‌ها‬‫ن‬‫انسا‬،‫حیوانات‬،‫‌ها‬‫ن‬‫ساختما‬‫‌های‬‫غ‬‫چرا‬‫ترافیك‬، ،‫باالبرها‬‫و‬‫بسیاری‬‫از‬‫چیزهای‬‫دیگر‬.‫قبل‬‫از‬‫اینكه‬‫‌های‬‫ن‬‫زبا‬‫‌نویسی‬‫ه‬‫برنام‬‫‌گ‬‌‫ی‬‫ش‬‫را‬‫ابداع‬ ،‫شوند‬‫‌های‬‫ن‬‫زبا‬‫‌نویسی‬‫ه‬‫برنام‬(‫همانند‬FORTRAN،Pascal،C‫و‬Basic)‫بر‬‫روی‬ ‫اعمال‬‫یا‬actions‫بجای‬‫چیزها‬‫یا‬‫اشیاء‬‫تمرکز‬‫داشتند‬.‫با‬‫اینكه‬‫‌نویسان‬‫ه‬‫برنام‬‫د‬‫ر‬‫دنیائی‬ ‫از‬‫اشیاء‬‫زندگی‬‫‌کردند‬‫ی‬‫م‬‫اما‬‫با‬‫افعال‬‫سرگرم‬‫بودند‬.‫خود‬‫همین‬‫تناقض‬‫باعث‬‫ش‬‫د‬‫تا‬ ‫‌های‬‫ه‬‫برنام‬‫نوشته‬‫شده‬‫از‬‫قدرت‬‫کافی‬‫برخوردار‬‫نباشند‬.‫هم‬‫اکنون‬‫که‬‫‌های‬‫ن‬‫زبا‬ ‫‌نویسی‬‫ه‬‫برنام‬‫‌گرا‬‌‫ی‬‫ش‬‫همانند‬C#‫و‬Java‫در‬‫دسترس‬،‫هستند‬‫‌نویسان‬‫ه‬‫برنام‬‫به‬‫زندگی‬ ‫خود‬‫در‬‫یك‬‫دنیای‬‫‌گرا‬‌‫ی‬‫ش‬‫ادامه‬‫‌دهند‬‫ی‬‫م‬‫و‬‫‌توانند‬‫ی‬‫م‬‫‌های‬‫ه‬‫برنام‬‫خود‬‫را‬‫با‬‫اسلوب‬ ‫‌گرا‬‌‫ی‬‫ش‬‫بنویسند‬.‫فرآیند‬‫‌نویسی‬‫ه‬‫برنام‬‫‌گرا‬‌‫ی‬‫ش‬‫در‬‫مقایسه‬‫با‬‫‌نویسی‬‫ه‬‫برنام‬ ‫روالی‬(procedural)‫ماهیت‬‫بسیار‬‫‌تری‬‫ی‬‫طبیع‬‫دارد‬‫و‬‫نتیجه‬‫آن‬‫هم‬‫رضایت‬‫بخش‬‫‌تر‬ ‫است‬. ‫برنامه‌نویسی‌شی‬‌‫گرا‬Object Oriented Programming ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  16. 16. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫اشیاء‬‫چه‬‫هستند‬‫و‬‫چرا‬‫خاص‬‫‌باشند؟‬‫ی‬‫م‬‫در‬‫واقع‬ ‫تكنولوژی‬،‫شی‬‫یك‬‫الگوی‬‫بسته‬(package)‫است‬‫که‬ ‫به‬‫ما‬‫در‬‫ایجاد‬‫واحدهای‬‫‌افزاری‬‫م‬‫نر‬‫با‬‫معنی‬‫کمك‬ ‫‌کند‬‫ی‬‫م‬.‫اشیاء‬‫تمرکز‬‫زیادی‬‫بر‬‫نواحی‬‫خاص‬‫‌ه‬‫ه‬‫برنام‬‫ا‬ ‫دارند‬.‫اشیاء‬‫‌توانند‬‫ی‬‫م‬‫از‬‫جمله‬‫اشیاء‬،‫تاریخ‬،‫زمان‬ ،‫پرداخت‬،‫فاکتور‬،‫صدا‬،‫ویدئو‬،‫فایل‬‫رکورد‬‫و‬‫بسی‬‫اری‬‫از‬ ‫موارد‬‫دیگر‬‫باشد‬.‫در‬‫حقیقت‬‫‌توان‬‫ی‬‫م‬‫هر‬‫چیزی‬‫را‬‫بف‬‫رم‬ ‫یك‬‫شی‬‫عرضه‬‫کرد‬.‫فرآیند‬‫‌نویسی‬‫ه‬‫برنام‬‫‌گرا‬‌‫ی‬‫ش‬‫در‬ ‫مقایسه‬‫با‬‫‌نویسی‬‫ه‬‫برنام‬‫روالی‬(procedural)‫ماهیت‬ ‫بسیار‬‫‌تری‬‫ی‬‫طبیع‬‫دارد‬‫و‬‫نتیجه‬‫آن‬‫هم‬‫رضایت‬‫بخ‬‫‌تر‬‫ش‬ ‫است‬. ‫برنامه‬‫نویسی‬‫شی‬‫گرا‬‫در‬‫مقایسه‬‫با‬‫برنامه‬‫نویسی‬‫روال‬‫گ‬‫را‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  17. 17. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫تمرکز‬‫‌نویسان‬‫ه‬‫برنام‬oop‫بر‬‫روی‬‫ایجاد‬«‫اع‬‫و‬‫ان‬‫‌ای‬‫ه‬‫داد‬‫تعریف‬‫شده‬‫از‬‫سوی‬‫کاربر‬»‫که‬ ‫کالس‬‫نامیده‬‫‌شوند‬‫ی‬‫م‬‫است‬.‫قبل‬‫از‬‫اینكه‬‫بتوانید‬‫با‬‫اتومبیلی‬‫رانندگی‬‫کن‬،‫ید‬‫باید‬‫کسی‬ ‫آن‬‫را‬‫طراحی‬‫و‬‫ساخته‬‫باشد‬.ً‫ال‬‫معمو‬‫ساخت‬،‫اتومبیل‬‫با‬‫ترسیم‬‫یا‬‫‌کشی‬‫ه‬‫نقش‬‫مهن‬‫دسی‬ ‫شروع‬‫شود‬.‫متأسفانه‬‫‌توانید‬‫ی‬‫نم‬‫با‬‫‌های‬‫ه‬‫نقش‬‫ترسیمی‬‫یك‬‫اتومبیل‬‫رانندگی‬‫کنید‬.‫قبل‬‫از‬ ‫اینكه‬‫با‬‫اتومبیلی‬‫رانندگی‬‫کنید‬‫باید‬‫آن‬‫اتومبیل‬‫از‬‫روی‬‫‌های‬‫ه‬‫نقش‬‫ترسیم‬‫ی‬‫ساخته‬‫شود‬. ‫‌ها‬‫س‬‫کال‬‫همانند‬‫‌های‬‫ه‬‫نقش‬‫ترسیمی‬‫‌ها‬‫ه‬‫خان‬‫هستند‬.‫یك‬،‫کالس‬‫نقشه‬‫ایجاد‬‫یك‬‫ش‬‫ی‬‫از‬ ‫کالس‬‫است‬.‫همانطوری‬‫که‬‫‌توانیم‬‫ی‬‫م‬‫‌های‬‫ه‬‫خان‬‫متعددی‬‫از‬‫روی‬‫یك‬‫نقشه‬،‫بسازیم‬ ‫‌توانیم‬‫ی‬‫م‬‫تعدادی‬‫شی‬‫از‬‫روی‬‫یك‬‫کالس‬‫‌سازی‬‫ه‬‫نمون‬‫کنیم‬.‫‌توان‬‫ی‬‫نم‬‫در‬‫نقشه‬‫آش‬‫پزخانه‬ ‫مبادرت‬‫به‬‫آشپزی‬،‫کرد‬‫آشپزی‬‫فقط‬‫در‬‫آشپزخانه‬‫خانه‬‫‌پذیر‬‫ن‬‫امكا‬‫است‬.‫اشیاء‬‫ن‬‫مونه‬‫های‬ ‫واقعی‬‫هستند‬‫که‬‫از‬‫روی‬‫کالس‬‫ها‬‫ایجاد‬‫‌شوند‬‫ی‬‫م‬. ‌‫کالس‌و‌شي‬(Class & object) ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  18. 18. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫کالس‬‫قالب‬‫یك‬‫موجودیت‬‫را‬‫تعریف‬‌‫ی‬‫م‬‫ک‬‫ند‬ ‫و‬‫اشیاء‬‫نمونه‬‫هایی‬‫واقعی‬‫از‬‫آن‬‫کالس‬ ‫‌ب‬‫ی‬‫م‬‫اشند‬.‫کالس‬‫هیچ‬‫حافظه‬‫ای‬‫اشغال‬‫نك‬‫رده‬ ‫و‬‫تنها‬‫قالب‬‫موجودیت‬‫را‬‫نمایش‬‌‫ی‬‫م‬‫دهد‬‫اما‬‫از‬ ‫روی‬‫یك‬‫کالس‬‫چندین‬‫شی‬‫‌توان‬‫ی‬‫م‬‫تعری‬‫ف‬ ‫کرد‬‫که‬‫هر‬‫یك‬‫برای‬‫خود‬‫حافظه‬‫اشغال‬ ‫کرده‬‫اند‬‫و‬‫مستقل‬‫از‬‫یكدیگرند‬. ‌‫کالس‌و‌شي‬(Class & object) ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  19. 19. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫تمرکز‬‫‌نویسان‬‫ه‬‫برنام‬C++‫بر‬‫روی‬‫ایجاد‬«‫اع‬‫و‬‫ان‬‫‌ای‬‫ه‬‫داد‬‫تعریف‬‫شده‬‫از‬‫سوی‬ ‫کاربر‬»‫که‬‫کالس‬‫نامیده‬‫‌شوند‬‫ی‬‫م‬‫است‬.‫هر‬‫کالس‬‫حاوی‬‫اجزاء‬‫‌ای‬‫ه‬‫داد‬‫و‬‫هم‬ ‫‌ای‬‫ه‬‫مجموع‬‫از‬‫متدهاست‬‫که‬‫بر‬‫روی‬‫‌ها‬‫ه‬‫داد‬‫کار‬‫‌کنند‬‫ی‬‫م‬‫و‬‫‌هایی‬‫س‬‫سروی‬‫برای‬ ‫‌ها‬‫ه‬‫‌گیرند‬‫س‬‫سروی‬(‫‌ها‬‫س‬‫کال‬‫و‬‫توابع‬‫دیگری‬‫که‬‫از‬‫کالس‬‫استفاده‬‫‌کن‬‫ی‬‫م‬‫ند‬) ‫تدارك‬‫‌بیند‬‫ی‬‫م‬.‫برای‬،‫مثال‬‫یك‬‫کالس‬‫حساب‬‫بانكی‬‫‌تواند‬‫ی‬‫م‬‫شامل‬‫ی‬‫ك‬ ‫شماره‬‫حساب‬‫و‬‫یك‬‫موجودی‬‫باشد‬‫که‬‫اجزاء‬‫‌ای‬‫ه‬‫داد‬‫کالس‬‫محسوب‬‫‌شوند‬‫ی‬‫م‬ ‫و‬‫به‬‫‌های‬‫ر‬‫رفتا‬‫هر‬‫موجودیت‬‫از‬‫یك‬،‫کالس‬‫توابع‬‫عضو‬‫گفته‬‫‌شود‬‫ی‬‫م‬(‫معم‬ً‫ال‬‫و‬ ‫در‬‫سایر‬‫‌های‬‫ن‬‫زبا‬‫‌نویسی‬‫ه‬‫برنام‬‫‌گرا‬‫ی‬‫ش‬‫همانند‬‫جاوا‬‫به‬‫توابع‬،‫عضو‬‫متد‬‫گفته‬ ‫‌شود‬‫ی‬‫م‬).‫برای‬،‫مثال‬‫یك‬‫کالس‬‫حساب‬‫بانكی‬‫‌تواند‬‫ی‬‫م‬‫دارای‬‫توابع‬‫عض‬‫وی‬ ‫برای‬‫ایجاد‬‫یك‬‫‌انداز‬‫س‬‫پ‬(‫‌دهنده‬‫ش‬‫افزای‬‫موجودی‬)،‫برداشت‬(‫‌دهنده‬‫ش‬‫کاه‬ ‫موجودی‬)‫و‬‫نمایش‬‫موجودی‬‫فعلی‬‫باشد‬.‫‌نویس‬‫ه‬‫برنام‬‫از‬‫انواع‬‫توکار‬(‫و‬‫سای‬‫ر‬ ‫انواع‬‫تعریف‬‫شده‬‫توسط‬‫کاربر‬‫در‬‫ایجاد‬‫انواع‬‫جدید‬(‫‌ها‬‫س‬‫کال‬)‫استفاده‬‫م‬‫‌کند‬‫ی‬. ‫کالس‬‫ها،‌اجزاء‌داده‬‫ای‌و‌اجزاء‌تابعي‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  20. 20. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫فرض‬‫کنید‬‫که‬‫‌خواهید‬‫ی‬‫م‬‫با‬‫اتومبیلی‬‫رانندگی‬‫کرده‬‫و‬‫با‬‫فشردن‬‫پدال‬‫گاز‬‫آن‬‫را‬‫سر‬‫یعتر‬‫به‬ ‫حرکت‬‫درآورید‬.‫چه‬‫اتفاقی‬‫قبل‬‫از‬‫اینكه‬‫بتوانید‬‫اینكار‬‫را‬‫انجام‬،‫دهید‬‫باید‬‫رخ‬‫دهد؟‬‫ب‬‫سیار‬ ،‫خوب‬‫قبل‬‫از‬‫اینكه‬‫بتوانید‬‫با‬‫اتومبیلی‬‫رانندگی‬،‫کنید‬‫باید‬‫کسی‬‫آن‬‫را‬‫طراحی‬‫و‬‫ساخته‬‫باشد‬. ً‫ال‬‫معمو‬‫ساخت‬‫اتومبیل‬‫با‬‫ترسیم‬‫یا‬‫‌کشی‬‫ه‬‫نقش‬‫مهندسی‬‫شروع‬‫شود‬.‫همانند‬‫طراحی‬‫ص‬‫ورت‬ ‫گرفته‬‫برای‬‫خانه‬.‫این‬‫ترسیمات‬‫شامل‬‫طراحی‬‫پدال‬‫گاز‬‫است‬‫که‬‫راننده‬‫با‬‫استفاده‬‫از‬‫آ‬‫ن‬‫سبب‬ ‫‌شود‬‫ی‬‫م‬‫تا‬‫اتومبیل‬‫سریعتر‬‫حرکت‬‫کند‬.‫تا‬‫حدی‬‫پدال‬‫سبب‬«‫پنهان‬»‫شدن‬‫پیچیدگ‬‫ی‬ ‫مكانیزمی‬‫‌شود‬‫ی‬‫م‬‫که‬‫اتومبیل‬‫را‬‫سریعتر‬‫بحرکت‬‫‌آورد‬‫ی‬‫درم‬،‫همانطوری‬‫که‬‫پدال‬‫ترمز‬‫س‬‫بب‬ «‫پنهان‬»‫شدن‬‫مكانیزمی‬‫‌شود‬‫ی‬‫م‬‫که‬‫از‬‫سرعت‬‫اتومبیل‬‫کم‬،‫‌کند‬‫ی‬‫م‬‫فرمان‬‫اتومبیل‬‫س‬‫بب‬ «‫پنهان‬»‫شدن‬‫مكانیزمی‬‫‌شود‬‫ی‬‫م‬‫که‬‫اتومبیل‬‫را‬‫هدایت‬‫‌کند‬‫ی‬‫م‬‫و‬‫موارد‬‫دیگر‬.‫با‬‫انجام‬‫چ‬‫نین‬ ،‫کارهایی‬‫افراد‬‫عادی‬‫‌توانند‬‫ی‬‫م‬‫به‬‫آسانی‬‫اتومبیل‬‫را‬‫هدایت‬‫کرده‬‫و‬‫براحتی‬‫از‬‫پدال‬،‫گاز‬‫ترمز‬‫و‬ ،‫فرمان‬‫مكانیزم‬‫تعویض‬‫دنده‬‫و‬‫سایر‬«‫‌های‬‫ط‬‫واس‬»‫کاربرپسند‬‫و‬‫ساده‬‫استفاده‬‫کنند‬‫ت‬‫ا‬‫پیچیدگی‬ ‫‌های‬‫م‬‫مكانیز‬‫داخلی‬‫اتومبیل‬‫برای‬‫راننده‬‫مشخص‬‫نباشد‬.‫متأسفانه‬،‫‌توانید‬‫ی‬‫نم‬‫با‬‫ن‬‫‌های‬‫ه‬‫قش‬ ‫ترسیمی‬‫یك‬‫اتومبیل‬‫رانندگی‬،‫کنید‬‫قبل‬‫از‬‫اینكه‬‫با‬‫اتومبیلی‬‫رانندگی‬‫کنی‬‫د‬‫باید‬‫آن‬‫اتومبیل‬‫از‬ ‫روی‬‫‌های‬‫ه‬‫نقش‬‫ترسیمی‬‫ساخته‬‫شود‬.‫یك‬‫اتومبیل‬ً‫ال‬‫کام‬‫ساخته‬‫شده‬‫دارای‬‫پدال‬‫گاز‬‫وا‬‫قعی‬ ‫برای‬‫به‬‫حرکت‬‫درآوردن‬‫سریع‬‫اتومبیل‬،‫است‬‫اما‬‫این‬‫هم‬‫کافی‬‫نیست‬.‫اتومبیل‬‫بخودی‬‫خود‬ ‫شتاب‬،‫‌گیرد‬‫ی‬‫نم‬‫از‬‫اینرو‬‫الزم‬‫است‬‫راننده‬‫بر‬‫روی‬‫پدال‬‫گاز‬‫فشار‬‫آورد‬‫تا‬‫به‬‫اتومبیل‬‫د‬‫ستور‬ ‫حرکت‬‫‌تر‬‫ع‬‫سری‬‫را‬‫صادر‬‫کند‬. ‫کالس‬‫ها،‌اجزاء‌داده‬‫ای‌و‌اجزاء‌تابعي‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  21. 21. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 Encapsulation‫یا‬‫بسته‬‫بندی‬ ‫قرار‬‫دادن‬‫کلیه‬‫خصوصیات‬‫و‬‫متدهای‬‫یك‬‫کالس‬‫در‬‫یك‬‫‌بندی‬‫ه‬‫بست‬‫مشخص‬‫را‬Encapsulation‫‌نامند‬‫ی‬‫م‬.‫بسته‬‫بندی‬‫کردن‬(package)‫‌افزار‬‫م‬‫نر‬ ‫بصورت‬‫‌ها‬‫س‬‫کال‬‫‌تواند‬‫ی‬‫م‬‫ویژگی‬‫استفاده‬‫مجدد‬‫از‬‫‌افزار‬‫م‬‫نر‬‫را‬‫عرضه‬‫کند‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  22. 22. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 Interface Interface‫به‬‫عنوان‬‫یك‬‫قرارداد‬‫تعر‬‫ی‬‫ف‬‌‫ی‬‫م‬‫شود‬‫که‬‫ه‬‌‫ه‬‫م‬‫ی‬‫گروه‬‫هایی‬‫که‬‫آن‬‫را‬‌‫ی‬‫م‬‫گیرند‬‫باید‬ ‫آن‬‫را‬‫دنبال‬‫کنند‬.Interface‫قسمت‬‫چه‬‫باید‬‫کرد‬‫از‬‫یك‬‫قرارداد‬‫را‬‫تعریف‬‌‫ی‬‫م‬‫کند‬‫و‬ ‫گروه‬‫های‬‫مشتق‬‫شده‬‫قسمت‬‫چگونگی‬‫انجام‬‫این‬‫قراردادها‬‫را‬‫تعریف‬‌‫ی‬‫م‬‫کنند‬.Interface ‫تنها‬‫شامل‬‫اعالم‬‫اعضا‬‌‫ی‬‫م‬‫باشد‬‫و‬‫اغلب‬‫به‬‫ت‬‫أ‬‫مین‬‫یك‬‫ساختار‬‫استاندارد‬‫کمك‬‌‫ی‬‫م‬‫کنن‬‫د‬.‫تعریف‬ ‫عملكرد‬‫اعضا‬‫ء‬‫مسئولیت‬‫گروه‬‫مشتق‬‫شده‬‌‫ی‬‫م‬‫باشد‬.Interface‫نشان‬‌‫ی‬‫م‬‫دهد‬‫که‬‫می‬‫خواهید‬ ‫یك‬‫آبجكت‬‫چگونه‬‫مورد‬‫استفاده‬‫قرار‬‫گیرد‬‫و‬‫به‬‫این‬‫که‬‫چگونه‬‫پیاده‬‫سازی‬‌‫ی‬‫م‬‫شود‬‫ک‬‫اری‬ ‫ندارد‬.‫به‬‫کمك‬Interface‌‫ی‬‫م‬‫توان‬‫عملكرد‬‫وراثت‬‫چندگانه‬‫را‬‫در‬C#‫شبیه‬‫سازی‬‫کرد‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  23. 23. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫اجزاء‬‫داده‬‫ای‬‫و‬‫تابعی‬‫درون‬‫کالس‬‌‫ی‬‫م‬‫توانند‬‫یكی‬‫از‬‫سه‬‫سطح‬‫دسترسی‬‫زیر‬‫را‬‫داش‬‫ته‬ ‫باشند‬: •Private •Public •Protected Access Modifiers ‫انواع‬‫سطوح‬‫دسترسی‬: .1:private‫این‬‫سطح‬‫دسترسی‬‫مشخص‬‌‫ی‬‫م‬‫کند‬‫که‬‫قطعه‬‫کد‬‫تعریف‬‫شده‬‫تنها‬‫داخل‬‫خود‬‫پروژه‬‫یا‬Scope‫مربوطه‬‫قابل‬‫دسترس‬‫باشند‬.‫برای‬‫مثال‬‫کالسی‬‫که‬‫به‬‫صورت‬private ‫تعریف‬‫شده‬‫باشد‬،‫تنها‬‫داخل‬‫همان‬‫پروژه‬‫قابل‬‫دسترس‬‫بوده‬‫و‬‫از‬‫سایر‬‫‌هایی‬‫ه‬‫پروژ‬‫که‬‫در‬solution‫تعریف‬‫شده‬‫قابل‬‫دسترس‬‫نخواهد‬،‫بود‬‫یا‬‫اعضای‬‫کالسی‬‫که‬‫به‬‫صورت‬private‫تعریف‬ ‫‌اند‬‫ه‬‫شد‬،‫تنها‬‫در‬Scope‫همان‬‫کالس‬‫که‬‫بین‬‫‌های‬‫ت‬‫عالم‬}{‌‫ی‬‫م‬‫باشد‬‫قابل‬‫دسترس‬‫خواهند‬‫بود‬. .2:public‫کدهایی‬‫که‬‫با‬‫این‬‫سطح‬‫دسترسی‬‫مشخص‬‫شده‬،‫باشند‬‫در‬‫تمامی‬‫‌های‬‫ت‬‫قسم‬‫پروژه‬‫و‬‫سایر‬‫‌ها‬‫ه‬‫پروژ‬‫قابل‬‫دسترس‬‫خواهند‬‫بود‬. .3internal:‫سطوح‬‫دسترسی‬internal‫تنها‬‫داخل‬‫همان‬‫فضای‬‫نام‬‫قابل‬‫دسترس‬‫بوده‬‫و‬‫سایر‬‫فضای‬‫‌ها‬‫م‬‫نا‬‫به‬‫آنها‬‫دسترسی‬‫نخواهند‬‫داشت‬.‫این‬‫سطح‬‫دسترسی‬‫برای‬‫‌ها‬‫س‬‫کال‬‫کار‬‫برد‬ ‫زیادی‬‫دارد‬. .4protected:‫این‬‫سطح‬‫دسترسی‬‫زمانی‬‫که‬‫از‬‫مفهوم‬inheritance‫استفاده‬‫کنیم‬‫کاربرد‬‫دارد‬.‫در‬‫قسمت‬‫وراثت‬‫این‬‫سطح‬‫دسترسی‬‫را‬‫به‬‫تفصیل‬‫مورد‬‫بررسی‬‫قرار‬‫خواهیم‬‫داد‬. .5internal protected:‫همانند‬‫قسمت‬protected‫این‬‫دسترسی‬‫نیز‬‫در‬‫قسمت‬‫وراثت‬‫توضیح‬‫داده‬‫خواهد‬‫شد‬‫که‬‫تلفیقی‬‫از‬‫‌های‬‫ی‬‫دسترس‬internal‫و‬protected‌‫ی‬‫م‬‫باشد‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  24. 24. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫‌بری‬‫ث‬‫ار‬‫فرمی‬‫از‬‫بكارگیری‬‫مجدد‬ ‫‌افزار‬‫م‬‫نر‬‫است‬‫که‬‫در‬‫آن‬‫‌های‬‫س‬‫کال‬ ‫ایجاد‬‫شده‬‫اجزاء‬‫‌ای‬‫ه‬‫داد‬‫و‬‫رفتارهای‬ ‫خود‬‫را‬‫براساس‬‫اطالعات‬‫یك‬‫کالس‬ ‫موجود‬‫بدست‬‫آورده‬‫و‬‫در‬‫صورت‬‫نیاز‬ ‫حاوی‬‫‌های‬‫ت‬‫قابلی‬‫جدید‬‫هستند‬. ‫بكارگیری‬‫مجدد‬‫‌افزار‬‫م‬‫نر‬‫سبب‬‫کاه‬‫ش‬ ‫مدت‬‫زمان‬‫توسعه‬‫‌افزار‬‫م‬‫نر‬‫شده‬‫و‬ ‫کیفیت‬‫آنرا‬‫بطور‬‫موثری‬‫افزایش‬ ‫‌دهد‬‫ی‬‫م‬. ‫وراثت‬Inheritance ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  25. 25. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫چند‬‫ریختی‬Polymorphism ‫‌ریختی‬‫د‬‫چن‬‫امكان‬‫‌دهد‬‫ی‬‫م‬‫تا‬‫‌ها‬‫ه‬‫برنام‬‫بجای‬‫اینكه‬«‫برنامه‬‫خا‬‫صی‬» ،‫باشند‬‫حالت‬‫یك‬«‫برنامه‬‫کلی‬»‫داشته‬‫باشند‬. ‫در‬،‫عمل‬‫چند‬‫ریختی‬‫امكان‬‫‌دهد‬‫ی‬‫م‬‫تا‬‫‌هایی‬‫ه‬‫برنام‬‫بنویسیم‬‫که‬ ‫مبادرت‬‫به‬‫پردازش‬‫اشیاء‬‫از‬‫‌هایی‬‫س‬‫کال‬‫کنند‬‫که‬‫بخشی‬‫از‬‫همان‬ ‫سلسله‬‫مراتب‬‫کالس‬،‫هستند‬‫همچنانكه‬‫همگی‬‫آنها‬‫اشیا‬‫ئ‬‫ی‬‫از‬ ‫سلسله‬‫مراتب‬‫کالس‬‫مبنا‬‫‌باشند‬‫ی‬‫م‬.‫به‬‫کمك‬،‫چندریختی‬ ‫‌توانیم‬‫ی‬‫م‬‫‌های‬‫م‬‫سیست‬‫را‬‫طراحی‬‫و‬‫‌سازی‬‫ه‬‫پیاد‬‫کنیم‬‫که‬‫گ‬‫سترش‬ ‫و‬‫‌پذیری‬‫ط‬‫بس‬‫آنها‬‫آسانتر‬‫است‬.‫‌های‬‫س‬‫کال‬‫جدید‬‫‌توانند‬‫ی‬‫م‬‫با‬ ‫کمی‬‫تغییر‬‫یا‬‫اصالح‬‫در‬‫‌های‬‫ش‬‫بخ‬‫عمومی‬،‫برنامه‬‫به‬‫آن‬‫افز‬‫وده‬ ،‫شوند‬‫مادامیكه‬‫‌های‬‌‫س‬‫کال‬‫جدید‬‫بخشی‬‫از‬‫سلسله‬‫مراتب‬‫ت‬‫وارثی‬ ‫باشند‬‫که‬‫برنامه‬‫بطور‬‫جامع‬‫آنرا‬‫پردازش‬‫‌کند‬‫ی‬‫م‬.‫تنها‬‫بخش‬‫‌ها‬‫ی‬‫ی‬ ‫از‬‫برنامه‬‫که‬‫باید‬‫برای‬‫تطبیق‬‫یافتن‬‫با‬‫‌های‬‫س‬‫کال‬‫جدید‬‫تغییر‬ ‫داده‬‫شو‬‫ن‬‫د‬‫آنهایی‬‫هستند‬‫که‬‫نیاز‬‫دارند‬‫تا‬‫از‬‫وجود‬‫‌های‬‫س‬‫کال‬ ‫جدید‬‫افزوده‬‫شده‬‫به‬‫سلسه‬‫مراتب‬ً‫ا‬‫مستقیم‬‫مطلع‬‫گردند‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  26. 26. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫در‬‫لغت‬‫به‬‫معنای‬‫تجرد‬‫یا‬‫انتزاع‬‫است‬‫و‬‫به‬‫مفهوم‬‫یك‬‫برداش‬‫ت‬ ‫واحد‬‫از‬‫مجموعه‬‫مشاهدات‬‌‫ی‬‫م‬‫باشد‬.‫در‬‫واقع‬‫انتزاع‬‫همان‬‫نیرویی‬ ‫است‬‫که‬‫با‬‫دیدن‬‫تعداد‬‫زیادی‬‫درخت‬‫مفهوم‬‫جنگل‬‫را‬‫در‬‫ذهن‬ ‫انسان‬‫تداعی‬‌‫ی‬‫م‬‫کند‬‫یا‬‫با‬‫دیدن‬‫مجموعه‬‫ای‬‫از‬‫پیكسل‬‫های‬‫ص‬‫فحه‬ ‫نمایش‬‫کامپیوتر‬‫یك‬‫تصویر‬‫خاص‬‫را‬‫در‬‫ذهن‬‫ایجاد‬‌‫ی‬‫م‬‫کند‬.‫در‬ ‫این‬‫روش‬‫برنامه‬‫نویس‬‫باید‬‫سعی‬‫کند‬‫اشیائی‬‫را‬‫تعریف‬‫ک‬‫ند‬‫که‬ ‫برنامه‬‫را‬‫از‬‫تعریف‬‫اشیاء‬‫بیشتر‬‫بی‬‫نیاز‬‫کند‬.‫در‬‫واقع‬‫او‬‫ه‬‫مواره‬ ‫باید‬‫به‬‫دنبال‬‫اشیاء‬‫مادر‬‫بگردد‬.‫یعنی‬‫بعد‬‫از‬‫یافتن‬‫توا‬‫بع‬‫و‬ ‫داده‬‫های‬‫مورد‬‫نیاز‬‫برای‬‫پیاده‬‫سازی‬‫سیستم‬‫مورد‬‫نظر‬‫باید‬ ‫مجموعه‬‫ای‬‫از‬‫توابع‬‫و‬‫داده‬‫ها‬‫را‬‫توسط‬"‫یك‬"‫کالس‬(‫شئ‬) ‫پیاده‬‫سازی‬‫کند‬.Abstraction‫در‬‫اصل‬‫به‬‫معنی‬‫نمایش‬‫دادن‬ ‫تنها‬‫جزئیات‬‫مورد‬‫نیاز‬‫به‬‫سرویس‬‫گیرنده‬‫است‬. Abstraction ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  27. 27. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 Abstraction ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  28. 28. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫در‬‫ارث‬‫بری‬‫کالس‬‫های‬،‫پایه‬‫تنها‬‫شامل‬‫متدها‬‫و‬‫خصوصیاتی‬‫هستند‬‫ک‬‫ه‬‫در‬ ‫بین‬‫کالس‬‫هایی‬‫که‬‫از‬‫این‬‫کالس‬‫ها‬‫مشتق‬‌‫ی‬‫م‬‫شوند‬‫مشترك‬‫هستند‬.‫به‬ ‫عبارت‬‫دیگر‬‫خود‬‫کالس‬‫های‬‫پایه‬‫دارای‬‫مفهوم‬‫کاملی‬‫از‬‫یك‬‫شئ‬‫ن‬‌‫ی‬‫م‬‫ب‬،‫اشند‬ ‫درنتیجه‬‫ایجاد‬‫اشیاء‬‫جدید‬‫از‬‫این‬‫کالس‬‫ها‬‫بی‬‫معنی‬‫است‬.‫برای‬‫اینك‬‫ه‬‫نتوان‬ ‫از‬‫کالس‬‫های‬‫پایه‬‫اشیاء‬‫نمونه‬‫ای‬‫تعریف‬‫کرد‬.‫آنها‬‫را‬‫به‬‫صورت‬abstract ‫تعریف‬‌‫ی‬‫م‬‫نماییم‬. ‫نكته‬‫اینكه‬‫ن‬‫‌توان‬‫ی‬‫م‬‫اشیاء‬‫جدیدی‬‫از‬‫کالس‬‫های‬abstract‫ایجاد‬‫کرد‬. Abstract Class ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  29. 29. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫مشاهده‬‫کردید‬‫که‬‫توابع‬‫عضو‬‫یك‬‫شی‬‫‌تواند‬‫ی‬‫م‬‫‌های‬‫ه‬‫داد‬‫شی‬‫را‬ ‫دستكاری‬‫کند‬.‫چگونه‬‫توابع‬‫عضو‬‫‌دانند‬‫ی‬‫م‬‫که‬‫اعضای‬‫داده‬‫کد‬‫ام‬‫یك‬ ‫از‬‫اشیاء‬‫را‬‫دستكاری‬‫کنند؟‬‫هر‬‫شی‬‫از‬‫طریق‬‫یك‬‫‌گر‬‫ه‬‫اشار‬‫بنام‬this (‫یك‬‫کلمه‬‫کلیدی‬‫در‬C#)‫به‬‫آدرس‬‫متعلق‬‫بخود‬‫دسترسی‬‫دارد‬. ‫‌گر‬‫ه‬‫اشار‬this‫یك‬،‫شی‬‫بخشی‬‫از‬‫خود‬‫شی‬،‫‌باشد‬‫ی‬‫نم‬‫‌گر‬‫ه‬‫اشار‬ this‫بصورت‬‫یك‬‫آرگومان‬‫ضمنی‬‫به‬‫هر‬‫تابع‬‫عضو‬‫غیراستاتی‬‫ك‬‫شی‬ ‫ارسال‬‫‌شود‬‫ی‬‫م‬(‫توسط‬‫کامپایلر‬).‫اشیاء‬‫از‬‫‌گر‬‫ه‬‫اشار‬this‫بصورت‬ ‫ضمنی‬(‫که‬‫در‬‫این‬‫بخش‬‫آنرا‬‫انجام‬‫‌دهیم‬‫ی‬‫م‬)‫یا‬‫صریح‬‫برای‬‫مراجع‬‫ه‬ ‫اعضای‬‫داده‬‫و‬‫توابع‬‫عضو‬‫خود‬‫استفاده‬‫‌کنند‬‫ی‬‫م‬. ‌‫مفهوم‌مرجع‬this‫در‌متدهای‌کالس‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  30. 30. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 •‫هر‬‫کالسی‬‫که‬‫اعالن‬‫‌کنید‬‫ی‬‫م‬‫‌تواند‬‫ی‬‫م‬‫یك‬‫سازنده‬(constructor)‫داشته‬‫باشد‬‫که‬‫‌توان‬‫ی‬‫م‬‫با‬‫استفاده‬‫از‬‫آن‬‫مبادرت‬‫به‬‫مقداردهی‬‫اولیه‬‫یك‬‫شی‬‫از‬ ‫کالس‬‫به‬‫هنگام‬‫ایجاد‬‫شی‬‫کرد‬.‫سازنده‬‫یك‬‫تابع‬‫عضو‬‫ویژه‬‫است‬‫که‬‫بایستی‬‫همنام‬‫با‬‫نام‬‫کالس‬‫تعریف‬‫شده‬،‫باشد‬‫از‬‫اینروست‬‫که‬‫کام‬‫پایلر‬‫‌تواند‬‫ی‬‫م‬‫آن‬‫را‬ ‫از‬‫دیگر‬‫توابع‬‫عضو‬‫کالس‬‫تشخیص‬‫دهد‬.‫مهمترین‬‫تفاوت‬‫موجود‬‫مابین‬‫‌ها‬‫ه‬‫سازند‬‫و‬‫توابع‬‫دیگر‬‫در‬‫این‬‫است‬‫که‬‫‌ها‬‫ه‬‫سازند‬‫‌تواند‬‫ی‬‫نم‬‫مقدار‬‫ب‬‫رگشت‬،‫دهند‬ ‫بنابراین‬‫‌توانند‬‫ی‬‫نم‬‫نوع‬‫برگشتی‬‫داشته‬‫باشند‬(‫حتی‬void).ً‫ال‬‫معمو‬‫‌ها‬‫ه‬‫سازند‬‫بصورت‬public‫اعالن‬‫‌شود‬‫ی‬‫م‬.‫هر‬‫زمان‬‫که‬‫شی‬‫از‬‫روی‬‫یك‬‫کالس‬ ‫ایجاد‬‌‫ی‬‫م‬‫کنیم‬‫اتوماتیك‬‫سازنده‬‫کالس‬‫اجرا‬‌‫ی‬‫م‬‫گردد‬.C#‫نیازمند‬‫فراخوانی‬‫یك‬‫سازنده‬‫برای‬‫هر‬‫شی‬‫است‬‫که‬‫ایجاد‬،‫‌شود‬‫ی‬‫م‬‫در‬‫چنین‬‫حالتی‬‫مطمئن‬ ‫خواهیم‬‫بود‬‫که‬‫شی‬‫قبل‬‫از‬‫اینكه‬‫توسط‬‫برنامه‬‫بكار‬‫گرفته‬‫شود‬‫بدرستی‬‫مقداردهی‬‫اولیه‬‫شده‬‫است‬.‫فراخوانی‬‫سازنده‬‫به‬‫هنگام‬‫ایجاد‬‫ش‬،‫ی‬‫بصورت‬ ‫غیرصریح‬‫یا‬‫ضمنی‬‫انجام‬‫‌شود‬‫ی‬‫م‬.‫در‬‫هر‬‫کالسی‬‫که‬‫بصورت‬‫صریح‬‫‌ای‬‫ه‬‫سازند‬‫را‬‫مشخص‬‫نكرده‬،‫است‬‫کامپایلر‬‫یك‬‫سازنده‬‫‌فرض‬‫ش‬‫پی‬‫تدا‬‫رك‬‫‌بیند‬‫ی‬‫م‬‫این‬ ‫سازنده‬‫دارای‬‫پارامتر‬‫‌باشد‬‫ی‬‫نم‬. ‫تابع‌عضو‌سازنده‌و‌تابع‌عضو‌مخرب‬ •‫نابودکننده‬(‫مخرب‬)‫نوع‬‫دیگری‬‫از‬‫تابع‬‫عضو‬‫‌باشد‬‫ی‬‫م‬.‫نام‬ ‫تابع‬‫مخرب‬‫یك‬‫کالس‬‫با‬‫کاراکتر‬‫مد‬(~)‫و‬‫نام‬‫کالس‬ ‫مشخص‬‫‌شود‬‫ی‬‫م‬.‫مخرب‬‫یك‬‫کالس‬‫بصورت‬ ‫ضمنی‬(‫غیرصریح‬)‫و‬‫در‬‫زمان‬‫از‬‫بین‬‫رفتن‬‫شی‬‫فراخوان‬‫ی‬ ‫‌شود‬‫ی‬‫م‬.‫مخرب‬‫پارامتر‬‫دریافت‬‫‌کند‬‫ی‬‫نم‬‫و‬‫مقداری‬‫برگش‬‫ت‬ ‫‌دهد‬‫ی‬‫نم‬‫و‬‫نمیتوان‬‫برای‬‫آن‬‫سطح‬‫دسترسی‬‫مشخص‬‫ک‬‫رد‬. ‫یك‬‫کالس‬‫‌تواند‬‫ی‬‫م‬‫فقط‬‫یك‬‫مخرب‬‫داشته‬‫باشد‬‫و‬ ‫‌توان‬‫ی‬‫نم‬‫آن‬‫را‬‫سربارگذاری‬‫کرد‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  31. 31. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‫خصوصيت‌یا‬Property (property‫یا‬‫خصوصیت‬)‫استانداردی‬‫در‬‫سی‬‫شارپ‬‫برای‬‫دسترسی‬‫به‬‫اعضای‬ ‫‌ای‬‫ه‬‫داد‬‫با‬‫سطح‬‫دسترسی‬private‫در‬‫داخل‬‫یك‬‫کالس‬‌‫ی‬‫م‬‫باشد‬.‫هر‬property ‫دارای‬‫دو‬‫بخش‬‫است؛‬‫یك‬‫بخش‬‫جهت‬‫مقداردهی‬‫بلوك‬(set)‫و‬‫یك‬‫بخش‬‫برای‬ ‫دسترسی‬‫به‬‫مقدار‬‫بلوك‬(get)‫یك‬‫داده‬private.property‫ها‬‫باید‬‫به‬‫صورت‬ public‫تعریف‬‫شوند‬‫تا‬‫در‬‫‌های‬‫س‬‫کال‬‫دیگر‬‫نیز‬‫قابل‬‫دسترسی‬‫باشند‬. Property‫هایی‬‫که‬‫بدنه‬get‫ندارند‬Write-Only‫و‬‫آنهایی‬‫که‬‫بدنه‬set‫را‬‫ند‬‫ر‬‫ندا‬ Read-Only‫‌گوییم‬‫ی‬‫م‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  32. 32. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫ساختار‬‫کلی‬property‫ها‬‫به‬‫صورت‬‫مقابل‬‌‫ی‬‫م‬‫باشد‬: •:access-modifier‌‫سطح‬‌‫دسترسی‬‫به‬Property‌‫را‬‌‫تعیین‬‫‌کند‬‫ی‬‫م‬.Property‌‫نیز‬ ‌‫ی‬‫مانند‌فیلد‌م‬‌‫تواند‬‫سطح‌دسترسی‌داشته‌باشد‬. •:data-type‫نوع‬Property‫که‬‫یكی‬‫از‬Data Type‫های‬‫دات‬‫نت‬‫یا‬‫کالسی‬‫است‬‫که‬‫به‬ ‫صورت‬‫دستی‬‫نوشته‬‫شده‬‫باشد‬. •:property-name‫نام‬Property‫است‬‫و‬‫برای‬‫نامگذاری‬‫آن‬‫‌همیشه‬‫از‬‫قاعده‬ PascalCase‫استفاده‬‫‌شود‬‫ی‬‫م‬.‫در‬‫حقیقت‬‫سطح‬‫دسترسی‬‫تفاوتی‬‫ندارد‬‫و‬‫همیشه‬‫آن‬‫را‬ PascalCase‫تعریف‬‫کنید‬. •‫بدنه‬get:‫این‬،‫بدنه‬ً‫ا‬‫دقیق‬‫معادل‬‫متد‬Get‫ایست‬‫که‬‫در‬‫قسمت‬‫قبلی‬‫تعریف‬‫کردیم‬.‫شما‬‫داخل‬ ‫بدنه‬get‫‌توانید‬‫ی‬‫م‬‫هر‬‫دستوری‬‫بنویسید‬،‫در‬‫حقیقت‬‫این‬‫بدنه‬‫مانند‬‫یك‬‫متد‬‫عمل‬‫کرده‬‫و‬‫زمانی‬ ‫که‬‫شما‬‫مقدار‬Property‫را‬‌‫ی‬‫م‬‫خوانید‬‫دقت‬‫کنید‬‫بدنه‬getً‫ا‬‫حتم‬‫باید‬‫مقداری‬‫را‬‫با‬ ‫دستور‬return‫برگرداند‬.‫همچنین‬‫این‬‫بدنه‬‌‫ی‬‫م‬‫تواند‬‫دارای‬access-modifier‫باشد‬،‫یعنی‬ ‫سطح‬‫دسترسی‬‫خواندن‬‫مقدار‬‫را‬‫مشخص‬‌‫ی‬‫م‬‫کند‬.‫در‬‫صورتی‬‫که‬‫سطح‬‫دسترسی‬‫را‬ ‫مشخص‬‫نكنید‬‫به‬‫صورت‬‫‌فرض‬‫ش‬‫پی‬public‫در‬‫نظر‬‫گرفته‬‌‫ی‬‫م‬‫شود‬. •‌‫بدنه‬set‌:‌‫این‌بدنه‬‌‫ً‌معادل‬‫ا‬‫دقیق‬‫متد‬Set‌‫در‬‫مثال‌قبلی‌است‬‌.‌‫زمانی‌که‌شما‌مقداری‌را‌داخل‬ Property‫ست‌کنید‬‌‫،‌بدنه‬set‌‫اجرا‬‌‫ی‬‫م‬‫شود‬‌.‌‫داخل‌بدنه‬set‌‫پارامتر‬‌‫پیش‌فرضی‌وجود‌دارد‬ ‌‫به‬‫نام‬value‌‫که‬‌‫مقدار‌ست‌شده‬‫برای‬Property‌‫داخل‬‌‫آن‌قرار‬‌‫گرفته‬‌‫و‌شما‬‌‫‌توانید‌از‬‫ی‬‫م‬ ‫طریق‌بدنه‬set‌‫به‌آن‬‌‫دسترسی‬‫داشته‌باشید‬‌.‌‫ی‬‫همچنین‌م‬‌‫توان‬‌‫برای‬‫بدنه‬set‌‫سطح‬‌‫دسترسی‬ ‌‫مشخص‌کرد‌که‌اگر‌سطح‬‌‫دسترسی‌را‌مشخص‬‌،‫نكنید‬‌‫به‌صورت‌پیش‬‫فرض‬public‌‫در‬‌‫نظر‬ ‌‫ی‬‫گرفته‌م‬‫شود‬. ‌‫شکل‌کلي‌یک‌خصوصيت‌یا‬Property ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  33. 33. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫فرض‬‫کنید‬‫بخواهیم‬‫یك‬‫کالس‬‫برای‬‫موجودیت‬‫شخص‬‫ایجاد‬‫کنیم‬.‫تصمیم‬‫داریم‬‫عم‬‫لیاتی‬ ‫که‬‫بوسیله‬‫متدهای‬Get‫و‬Set‫در‬‫کالس‬Rectangle‫انجام‬‫دادیم‬‫را‬‫با‬Property‫ها‬ ‫‌سازی‬‫ه‬‫پیاد‬‫کنیم‬.‫کالس‬Person‫را‬‫به‬‫شكل‬‫مقابل‬‫ایجاد‬‌‫ی‬‫م‬‫کنیم‬.‫در‬‫کد‬،‫مقابل‬‫دو‬ Property‫با‬‫‌های‬‫م‬‫نا‬FirstName‫و‬LastName‫تعریف‬‫کردیم‬‫که‬‫عملیات‬‫خواندن‬ ‫و‬‫نوشتن‬‫از‬‫فیلدهای‬‫مربوطه‬‫را‬‫انجام‬‌‫ی‬‫م‬‫دهند‬.‫برای‬‫نوشتن‬Property‫ها‬ً‫ا‬‫حتم‬‫نیازی‬‫به‬ ‫تعریف‬Field‫برای‬‫آنها‬‫نیست‬.‫شما‬‌‫ی‬‫م‬‫توانید‬‫هر‬‫کدی‬‫را‬‫برای‬‫بدنه‬get‫یا‬set‫بنویسید‬.‫به‬ ‫عنوان‬‫مثال‬‌‫ی‬‫م‬‫خواهیم‬‫برای‬‫کالس‬Person‫یك‬Property‫تعریف‬‫کنیم‬‫که‬‫نام‬‫کامل‬ ‫شخص‬‫را‬‫برگرداند‬.‫نام‬‫این‬‫خاصیت‬‫را‬FullName‌‫ی‬‫م‬‫گذاریم‬.‫نگاهی‬‫دوباره‬‫به‬‫کالس‬ Person‫و‬‫خاصیت‬FullName‌‫ی‬‫م‬‫کنیم‬،‫اگر‬‫دقت‬‫کرده‬‫باشید‬‫این‬‫خاصیت‬‫تنها‬‫بد‬‫نه‬ get‫دارد‬‫و‬‫بدنه‬set‫را‬‫برای‬‫آن‬‫ننوشتیم‬.‫دلیل‬‫این‬‫امر‬‫آن‬‫است‬‫که‬FullName‫تنها‬ ‫ترکیبی‬‫از‬firstName‫و‬lastName‫را‬‫‌گرداند‬‫ی‬‫برم‬‫و‬‫در‬‫صورتی‬‫که‬‫بخواهیم‬‫مقداری‬ ‫داخل‬FullName‫بریزیم‬،‫با‬‫پیغام‬‫خطا‬‫مواجه‬‌‫ی‬‫م‬‫شویم‬. ‫به‬Property‫هایی‬‫که‬‫بدنه‬get‫ندارند‬Write-Only،‫و‬‫آنهایی‬‫که‬‫بدنه‬set‫را‬‫ندارند‬ Read-Only‌‫ی‬‫م‬‫گوییم‬.‫همچنین‬‫همانطور‬‫که‬ً‫ال‬‫قب‬‫هم‬‫گفتیم‬‌‫ی‬‫م‬‫توانیم‬‫عالوه‬‫بر‬‫خ‬‫ود‬ Property‫برای‬‫هر‬‫یك‬‫از‬‫‌های‬‫ه‬‫بدن‬get‫و‬set‫نیز‬‫سطح‬‫دسترسی‬‫مشخص‬‫کنیم‬. ‌‌‫مثالي‌برای‌ایجاد‬Property ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  34. 34. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گاهی‬‫اوقات‬Property‫که‬‫تعریف‬‌‫ی‬‫م‬‫کنیم‬‫تنها‬‫عملیات‬‫خواندن‬‫و‬‫نوش‬‫تن‬ ‫یك‬‫فیلد‬‫را‬‫کنترل‬‌‫ی‬‫م‬‫کند‬.‫برای‬،‫مثال‬‫کالس‬Person‫را‬‫در‬‫نظر‬‫بگیرید‬. ‫کد‬‫مربوط‬‫به‬‫خصوصیت‬‫باال‬‫را‬‌‫ی‬‫م‬‫توان‬‫به‬‫شكل‬‫مقابل‬‫نیز‬‫نوشت‬.‫کامپایلر‬ ‫بعد‬‫از‬‫کامپایل‬‫کد‬،‫باال‬‫به‬‫صورت‬‫خودکار‬‫یك‬‫فیلد‬‫برای‬‫خاصیت‬‫ن‬‫وشته‬‫شده‬ ‫تعریف‬‫کرده‬‫و‬‫بدنه‬get‫و‬set‫آن‬‫را‬‫به‬‫صورت‬‫خودکار‬‌‫ی‬‫م‬‫نویسد‬.‫از‬ ‫مزایای‬Auto-Property‫ها‬‫حجم‬‫کد‬‫کمتر‬‫و‬‫البته‬‫قابلیت‬‫کنترل‬ ‫دسترسی‬‫به‬‫عملیات‬‫خواندن‬‫و‬‫نوشتن‬Property‫ها‬‌‫ی‬‫م‬‫باشد‬.‫مثال‬‫باال‬‫را‬ ‫به‬‫نحوی‬‫تغییر‬‌‫ی‬‫م‬‫دهیم‬‫که‬‫خاصیت‬FirstName‫تنها‬‫داخل‬‫کالس‬‫قابل‬ ‫نوشتن‬‫باشد‬.‫به‬‫این‬‫نكته‬‫توجه‬‫داشته‬،‫باشید‬‫زمانی‬‫که‬‫از‬Auto- Property‫ها‬‫استفاده‬‫‌کنید‬‫ی‬‫م‬‌ً‫ا‬‫حتم‬‫باید‬get‫و‬set‫را‬،‫بنویسید‬‫در‬‫غیر‬ ‫اینصورت‬‫پیغام‬‫خطا‬‫دریافت‬‫خواهید‬‫کرد‬.‫البته‬‫این‬‫مشكل‬‫در‬‫نسخه‬6‫زبان‬ ‫سی‬‫شارپ‬‫برطرف‬‫شده‬‫است‬. ‫ایجاد‬Automatic Properties ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  35. 35. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫فضای‬‫نام‬‫یك‬‫ساختار‬‫سازمانی‬‫است‬‫که‬‫‌ها‬‫س‬‫کال‬‫را‬‫‌بندی‬‫ه‬‫دست‬‌‫ی‬‫م‬‫ک‬‫ند‬.‫به‬ ‫عبارت‬‫دیگر‬‫‌ای‬‫ه‬‫منطق‬‫برای‬‫تعریف‬‫کردن‬‫‌هاست‬‫س‬‫کال‬.‫فضای‬‫نام‬‫به‬‫شما‬ ‫کمك‬‌‫ی‬‫م‬‫کند‬‫که‬‫پایه‬‫و‬‫اساس‬‫کدهایتان‬‫را‬‫پیدا‬‫و‬‫درك‬‫کنید‬.‫فضای‬‫‌ها‬‫م‬‫نا‬ ‫برای‬‫‌نویسی‬‫ه‬‫برنام‬‫سی‬‫شارپ‬‫ضروری‬،‫نیستند‬‫آنها‬ً‫ال‬‫معمو‬‫برای‬‫به‬‫بود‬ ‫قابلیت‬‫فهم‬‫کد‬‫استفاده‬‌‫ی‬‫م‬‫شوند‬.‫بدون‬‫استفاده‬‫از‬‫فضای‬،‫نام‬‫تمام‬‫ی‬‫اسامی‬ ‫مورد‬‫استفاده‬‫در‬‫برنامه‬‫سعی‬‌‫ی‬‫م‬‫کنند‬‫در‬‫یك‬‫فضای‬‫نام‬،‫کلی‬‫جایی‬‫برای‬ ‫خود‬‫در‬‫نظر‬‫بگیرند‬‫که‬‫موجب‬‫برخورد‬‫بین‬‫اسامی‬‫یكسان‬‫‌شود‬‫ی‬‫م‬.‫ام‬‫ا‬‫اگر‬‫از‬ ‫فضای‬‫‌های‬‫م‬‫نا‬‫‌ای‬‫ه‬‫جداگان‬‫استفاده‬،‫شود‬‫هیچ‬‫اشكالی‬‫در‬‫برنامه‬‫به‬‫وجو‬‫د‬ ‫ن‬‌‫ی‬‫م‬‫آید‬.‫در‬‫واقع‬‫فضای‬‫نام‬‫برای‬‫تفكیك‬‫‌ای‬‫ه‬‫مجموع‬‫از‬‫اسامی‬‫از‬‫مجموعه‬ ‫دیگر‬‫به‬‫کار‬‫می‬‫رود‬. ‫نام‬ ‫فضای‬Namespace ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  36. 36. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫از‬‫مهمترین‬‫فضای‬‫‌های‬‫م‬‫نا‬‫موجود‬‫در‬‫کتابخ‬‫انه‬ .Net Framework‫فضای‬‫نام‬ System‫است‬.‫این‬‫فضای‬‫نام‬‫دارای‬‫فضای‬ ‫‌های‬‫م‬‫نا‬‫دیگری‬‫در‬‫داخل‬‫خود‬‫‌باشد‬‫ی‬‫م‬.‫به‬ ‫عنوان‬‫مثال‬Sysytem.IO‫که‬‫حاوی‬ ‫‌هایی‬‫س‬‫کال‬‫برای‬‫کار‬‫با‬‫ورودی‬‫و‬‫خروجی‬‫و‬ ‫کار‬‫با‬‫‌ها‬‫ل‬‫فای‬‌‫ی‬‫م‬‫باشد‬. ‫در‬ ‫موجود‬ ‫نام‬ ‫فضای‬ ‫نمونه‬ ‫چند‬C# ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  37. 37. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫استفاده‬‫از‬‫فضای‬‫نام‬‫و‬‫نام‬‫کالس‬‫که‬‫با‬‫نقطه‬‫از‬‫هم‬‫جدا‬‌‫ی‬‫م‬‫شوند‬. ‫به‬‫عنوان‬‫مثال‬: System.Convert.ToString(); ‫استفاده‬‫از‬‫دستور‬Using using System; Convert.ToString(); ‫در‬‫این‬‫روش‬‫ابتدا‬‫دستور‬using‫را‬‫برای‬‫استفاده‬‫از‬‫فضای‬‫نام‬‫‌نویسیم‬‫ی‬‫م‬‫و‬ ‫سپس‬‫‌های‬‫س‬‫کال‬‫موجود‬‫در‬‫آن‬‫فضا‬‫را‬‫بدون‬‫ذکر‬‫نام‬‫و‬‫در‬‫هر‬‫جایی‬‫از‬‫سند‬‫به‬ ‫کار‬‫خواهیم‬‫گرفت‬.‫شما‬‌‫ی‬‫م‬‫توانید‬‫از‬‫فضای‬‫‌ها‬‫م‬‫نا‬‫به‬‫صورت‬‫تودرتو‬‫نیز‬‫اس‬‫تفاده‬ ‫کنید‬. System.Windows.Forms.MessageBox.Show(""); ‫استفاده‬‫از‬‫دستور‬Using using System.Windows.Forms; MessageBox.Show() ‫آن‬ ‫از‬ ‫استفاده‬ ‫و‬ ‫نام‬ ‫فضای‬ ‫ایجاد‬ ‫کلی‬ ‫شکل‬namespace namespace_name { // code declarations } namespace namespace_name1 { // code declarations namespace namespace_name2 { // code declarations } } using namespace_name1.namespace_name2; using namespace_name; ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  38. 38. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‫آشنایي‌با‌مفاهيم‌نوع‬‫داده‬‫شمارشي‌یا‬Enum ‫نوع‬‫داده‬‫شمارشی‬‫یا‬Enum‫جهت‬‫تعریف‬‫مقادیر‬‫ثابت‬‫و‬‫قابل‬‫شمارش‬‫در‬‫برنامه‬‫بسی‬‫ار‬ ‫کاربرد‬‫دارد‬.‫مقادیری‬‫که‬‫در‬‫این‬‫نوع‬‫داده‬‫تعریف‬‫‌شوند‬‫ی‬‫م‬‫بطور‬‫خودکار‬‫از‬‫عدد‬0‫شماره‬ ‫گذاری‬‫‌شوند‬‫ی‬‫م‬‫و‬‫به‬‫ترتیب‬‫یكی‬‫به‬‫‌ها‬‫ن‬‫آ‬‫اضافه‬‫‌شود‬‫ی‬‫م‬. ‫در‬‫این‬‫حالت‬‫متد‬)(ToString‫برای‬‫نوع‬‫‌ای‬‫ه‬‫داد‬Enum‫عنوان‬‫مقادیر‬‫ثابت‬‫را‬‫بر‬ ‫‌گرداند‬‫ی‬‫م‬. ‫روش‬‫عرف‬‫برای‬‫نمایش‬‫مقدار‬‫عددی‬‫استفاده‬‫از‬‫تبدیل‬‫نوع‬‫صریح‬‫به‬int‫است‬. ‫جهت‬‫تغيير‬‫شماره‬‫مقادیر‬‫کافيست‬‫بصورت‬‫زیر‬‫عمل‬‫کنيم‬: enum TypesOfColo { Black=-5, Green=20, White, Red, Blue } ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  39. 39. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‫آشنایي‌با‬‌‌‫ه‬‫کلم‬‌‫کليدی‬static ‫گاهی‬‫نیاز‬‫دارید‬‫که‬‫اعضای‬‫یك‬‫کالس‬‫به‬‫هیچ‬‫شی‬‫ئ‬‫ی‬‫وابسته‬‫نباشن‬‫د‬.‫‌طور‬‫ه‬‫ب‬ ‫معمول‬‫اعضای‬‫کالس‬‫از‬‫طریق‬‫شیئی‬‫که‬‫از‬‫آن‬‫کالس‬‫ساخته‬‫‌شود‬‫ی‬‫م‬‫قاب‬‫ل‬ ‫دسترسی‬‫هستند‬‫اما‬‫شما‬‫‌توانید‬‫ی‬‫م‬‫عضوی‬‫از‬‫کالس‬‫را‬‫طوری‬‫تعریف‬‫ک‬‫نید‬‫که‬ ‫بدون‬‫ساخت‬‫هیچ‬‫شیئی‬ً‫ا‬‫مستقیم‬(‫از‬‫طریق‬‫نام‬‫کالس‬‫و‬‫عملگر‬‫نقطه‬)‫به‬‫آن‬ ‫دسترسی‬‫داشته‬‫باشید‬.‫برای‬‫ساخت‬‫چنین‬،‫عضوی‬‫قبل‬‫از‬‫تعریف‬‫آن‬‫عضو‬‫از‬ ‫‌کلیدی‬‫ی‬‌‫ه‬‫کلم‬static‫استفاده‬‫‌کنید‬‫ی‬‫م‬.‫هنگامی‬‫که‬‫عضوی‬‫از‬‫یك‬‫کالس‬ ‫‌صورت‬‫ه‬‫ب‬static‫تعریف‬،‫‌شود‬‫ی‬‫م‬‫آن‬‫عضو‬‫بدون‬‫ساخت‬‫هیچ‬object‫ای‬‫از‬ ‫کالس‬‫قابل‬‫دسترسی‬‫و‬‫در‬‫واقع‬‫مستقل‬‫از‬‫اشیاء‬‫است‬‫و‬‫به‬‫هیچ‬‫شیئ‬‫ی‬‫از‬‫آن‬ ‫کالس‬‫وصل‬‫‌شود‬‫ی‬‫نم‬.‫شما‬‫‌توانید‬‫ی‬‫م‬‫هم‬‫متدها‬‫و‬‫هم‬‫متغیرها‬‫را‬‫‌صورت‬‫ه‬‫ب‬ static‫تعریف‬‫کنید‬.‫به‬‫عنوان‬‫مثال‬‫متد‬show‫از‬‫کالس‬ MessageBox‫یك‬‫متد‬‫استاتیك‬‫‌باشد‬‫ی‬‫م‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  40. 40. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫اجزاء‌داده‬‌‫ای‬static ‫اعضای‬static‫در‬‫حقیقت‬‫اعضایی‬‫هستند‬‫که‬‫وابسته‬‫به‬‫شئ‬‫نیستن‬‫د‬‫و‬‫در‬ ‫بین‬‫کل‬‫اشیاء‬‫ساخته‬‫شده‬‫از‬‫یك‬‫کالس‬‫مشترك‬‫‌باشند‬‫ی‬‫م‬.‫یعنی‬‫ب‬‫ه‬‫ازای‬‫هر‬ ‫شئ‬‫مقدار‬‫متفاوتی‬،‫ندارند‬‫چون‬‫وابسته‬‫به‬‫شئ‬‫نیستند‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  41. 41. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‫اجزاء‌تابعي‌یا‌متدهای‬static ‫متد‬static‫تنها‬‫‌تواند‬‫ی‬‫م‬‫به‬‫اعضای‬static‫دسترسی‬‫داشته‬‫باشد‬‫و‬ ‫‌تواند‬‫ی‬‫نم‬ً‫ا‬‫مستقیم‬‫به‬‫اعضای‬‫عادی‬‫کالس‬‫دسترسی‬‫پیدا‬،‫کند‬‫زیرا‬‫ا‬‫عضای‬ ‫عادی‬‫یك‬‫کالس‬ً‫ا‬‫حتم‬‫باید‬‫به‬‫یك‬‫شیء‬‫وصل‬‫شوند‬‫تا‬‫مقدارشان‬‫در‬‫آن‬‫شیء‬ ‫ذخیره‬‫شود‬‫اما‬‫اعضای‬static‫مستقل‬‫از‬‫اشیاء‬‫هستند‬‫و‬‫‌توان‬‫ی‬‫م‬‫مستقیم‬ً‫ا‬‫به‬ ‫‌ها‬‫ن‬‫آ‬‫به‬‫کمك‬‫نام‬‫کالس‬‫دسترسی‬‫پیدا‬‫کرد‬.‫برای‬‫اینكه‬‫بتوانید‬‫ب‬‫ه‬‫اعضای‬ static‫ای‬‫که‬‫در‬‫کالس‬‫هستند‬‫دسترسی‬‫داشته‬،‫باشید‬‫کافی‬‫است‬‫ا‬‫بتدا‬‫نام‬ ‫کالس‬‫را‬‫نوشته‬‫و‬‫سپس‬‫توسط‬‫عملگر‬(.)‫به‬‫آنها‬‫دسترسی‬‫پیدا‬‫کن‬‫ید‬. ‫اگر‬‫قصد‬‫دارید‬‫درون‬‫یك‬‫متد‬static‫به‬‫اعضای‬‫عادی‬‫نیز‬‫دسترسی‬‫داشته‬ ‫باشید‬‫باید‬‫از‬‫طریق‬‫یك‬‫شیء‬‫این‬‫‌کار‬‫را‬‫انجام‬‫دهید‬.‫برای‬‫ایجاد‬‫یك‬‫م‬‫تد‬ static‫کافیست‬‫کلمه‬‫کلیدی‬static‫بعد‬‫از‬Access Modifier‫و‬‫قبل‬ ‫از‬‫نوع‬‫خروجی‬‫متد‬‫بیاوردید‬. class Class1 { public static void method1() { } } Class1.method1(); ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  42. 42. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‫کالس‬static ‫همچنین‬‫‌توانید‬‫ی‬‫م‬‫یك‬‫کالس‬‫را‬‫‌صورت‬‫ه‬‫ب‬static‫تعریف‬ ‫کنید‬.‫‌که‬‫ی‬‫هنگام‬‫یك‬‫کالس‬‫را‬‫‌صورت‬‫ه‬‫ب‬static‫تعریف‬ ‫‌کنید‬‫ی‬‫م‬: (۱)‫دیگر‬‫‌توانید‬‫ی‬‫نم‬‫از‬‫روی‬‫این‬‫کالس‬‫شیء‬‫بسازید‬. (۲)‫‌ی‬‫ه‬‫هم‬‫اعضای‬‫کالس‬‫باید‬static‫باشند‬. ‫یكی‬‫از‬‫مزایای‬‫استفاده‬‫از‬‫‌های‬‫س‬‫کال‬‫استاتیك‬‫این‬‫اس‬‫ت‬‫که‬ ‫کامپایلر‬‫تضمین‬‫‌کند‬‫ی‬‫م‬‫به‬‫هیچ‬‫عنوان‬‫‌ای‬‫ه‬‫نمون‬‫از‬‫ای‬‫ن‬ ‫کالس‬‫ساخته‬‫نشود‬.‫‌های‬‫س‬‫کال‬‫استاتیك‬sealed‫هستند‬ ‫درنتیجه‬‫‌توان‬‫ی‬‫نم‬‫از‬‫آنها‬‫ارث‬‫برد‬.‫این‬‫‌ها‬‫س‬‫کال‬‫‌توانند‬‫ی‬‫نم‬ constructor‫داشته‬‫باشند‬‫ولی‬‫با‬‫این‬‫حال‬‫‌توان‬‫ی‬‫م‬‫از‬ static constructor‫ها‬‫برای‬‫مقداردهی‬‫به‬‫عناصر‬ static‫کالس‬‫استفاده‬‫کرد‬.‫توجه‬‫کنید‬‫که‬static constructor‫ها‬‫پارامتر‬‫و‬modifier‫ندارند‬. static class Class1 { } public static class DistanceConverter { public static double meterTocmeter(double meter) { return (meter * 100); } public static double cmeterTometer(double cmeter) { return (cmeter / 100); } public static double cmeterTomilimeter(double cmeter) { return (cmeter * 10); } public static double milimeterTocmeter(double milimeter) { return (milimeter / 10); } } double cm; cm=DistanceConverter.meterTocmeter(2.5); ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  43. 43. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‌‫ه‬‫کلم‬‌‫کليدی‬static‌‫در‌متد‬main ً‫ا‬‫حتم‬‫تا‬‫این‬‫‌ی‬‫ه‬‫لحظ‬‌‫ه‬‫متوج‬‫این‬‫‌ی‬‫ه‬‫کلم‬‫‌کلیدی‬static‫در‬‫متد‬)(Main ‫‌اید‬‫ه‬‫شد‬.‫از‬‫‌جا‬‫ن‬‫آ‬‫که‬‫متد‬)(Main‫‌ی‬‫ه‬‫نقط‬‫شروع‬‫‌تان‬‫ه‬‫برنام‬‫و‬‫یكی‬‫از‬‫اعضای‬ ‫کالس‬،‫است‬‫باید‬‫قبل‬‫از‬‫هرچیز‬‫و‬‫پیش‬‫از‬‫ساخت‬‫هرگونه‬‫شیئی‬،‫صدا‬‫ز‬‫ده‬ ‫شود‬.‫به‬‫این‬‫دلیل‬‫است‬‫که‬‫متد‬)(Main‫را‬‫‌صورت‬‫ه‬‫ب‬static‫تعریف‬ ‫‌کنیم‬‫ی‬‫م‬‫تا‬‫قبل‬‫از‬‫اینكه‬‫شیئی‬‫از‬‫کالس‬‫ساخته‬،‫شود‬‫متد‬)(Main‫فراخوانی‬ ‫شده‬‫تا‬‫درون‬‫این‬‫متد‬‫بتوانیم‬‫کنترل‬‫برنامه‬‫را‬‫در‬‫دست‬‫بگیریم‬. static class Program { static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  44. 44. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫انواع‌روش‌ارسال‌پارامتر‌به‌متد‬ ۱.‫روش‬‫ارسال‬‫با‬‫مقدار‬Pass by value ‫در‬‫این‬‫روش‬‫در‬‫پارامترهای‬‫تابع‬‫متغیرهای‬‫معمولی‬‫تعریف‬‫‌کنیم‬‫ی‬‫م‬‫و‬‫در‬‫زمان‬ ‫فراخوانی‬‫مقادیر‬‫ثابت‬‫یا‬‫اسامی‬‫متغیرهایی‬‫از‬‫فراخواننده‬‫را‬‫به‬‫عنوان‬‫آرگومان‬‫ب‬‫ه‬ ‫پارامترهای‬‫متد‬‫ارسال‬‫‌کنیم‬‫ی‬‫م‬.‫هر‬‫تغییری‬‫برروی‬‫پارامترها‬‫در‬‫بد‬‫ن‬‫ه‬‫متد‬‫هیچ‬‫تأثیری‬ ‫برروی‬‫آرگومانهای‬‫فراخواننده‬‫ندارد‬‫و‬‫آرگومانها‬‫تنها‬‫به‬‫عنوان‬‫مقدار‬‫اولیه‬‫پارامت‬‫رها‬‫در‬ ‫نظر‬‫گرفته‬‫‌شوند‬‫ی‬‫م‬.‫در‬‫این‬‫شكل‬‫ارسال‬‫پارامترها‬‫تنها‬‫به‬‫عنوان‬‫ورودی‬‫در‬‫نظ‬‫ر‬‫گرفته‬ ‫می‬‫شوند‬.‫ارسال‬‫به‬‫روش‬pass by value‫به‬‫صورت‬‫پیش‬‫فرض‬‫‌باشد‬‫ی‬‫م‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  45. 45. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫انواع‌روش‌ارسال‌پارامتر‌به‌متد‬ ۲.‫روش‬‫ارسال‬‫پارامتر‬‫با‬‫ارجاع‬Pass by reference ‫وقتی‬‫متغیری‬‫را‬‫به‬‫صورت‬ref‫به‬‫یك‬‫تابع‬‫ارسال‬،‫‌کنیم‬‫ی‬‫م‬‫مقدار‬‫متغیر‬ ‫ارسال‬‫‌شود‬‫ی‬‫نم‬‫بلكه‬‫آدرس‬‫متغیر‬‫به‬‫بدنه‬‫متد‬‫فرستاده‬‫‌شود‬‫ی‬‫م‬‫و‬‫هر‬‫ت‬‫غییری‬ ‫در‬‫متغیر‬‫محلی‬‫برروی‬‫متغیر‬‫اصلی‬‫نیز‬‫اعمال‬‫‌شود‬‫ی‬‫م‬.‫به‬‫این‬‫نوع‬‫پار‬‫مترها‬ ‫ارجاعی‬‫‌گویند‬‫ی‬‫م‬. ‌‫هر‌تغییری‌برروی‌پارامترها‌در‌بدنه‌متد‬‌‫برروی‬‫‌ها‌در‌فراخوانند‬‫ن‬‫آرگوما‬‌‌‫ه‬ ‌‫اعمال‬‫می‌شود‬. ‌‫نوشتن‌کلمه‌کلیدی‬ref‌‫هم‌درپشت‌آرگومان‌در‌زمان‬‌‫ارسال‌به‬‌‫متد‌و‌هم‬ ‌‫در‌پشت‌تعریف‌پارامتر‌در‌متد‬‫‌باشد‬‫ی‬‫الزامی‌م‬. ‌‫آرگومانی‌که‌به‌این‬‌‫روش‌به‌متد‌ارسال‬‌‫‌شود‌باید‬‫ی‬‫م‬‌‫مقداردهی‬‫اولیه‌ش‬‌‫ده‬ ‫باشد‬. ‌‫در‌این‬‌‫روش‌پارامترها‌به‬‌‫عنوان‬‌‫هم‌ورودی‌و‌هم‌خروجی‬‌‫در‌نظر‌گرفته‬ ‫‌شوند‬‫ی‬‫م‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  46. 46. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫انواع‌روش‌ارسال‌پارامتر‌به‌متد‬ 3.‫روش‬‫ارسال‬‫پارامتر‬‫به‬‫عنوان‬‫تنها‬‫خروجی‬‫با‬‫کلمه‬‫کلیدی‬out ‫این‬‫شیوه‬‫ارسال‬‫هم‬‫به‬‫صورت‬‫ارجاعی‬‫‌باشد‬‫ی‬‫م‬.‫این‬‫پارامترها‬‫زمانی‬‫استف‬‫اده‬ ‫‌شود‬‫ی‬‫م‬‫که‬‫قصد‬‫ارسال‬‫اطالعاتی‬‫به‬‫متد‬‫را‬‫نداشته‬،‫باشیم‬‫بلكه‬‫‌خ‬‫ی‬‫م‬‫واهیم‬ ‫اطالعات‬‫از‬‫متد‬‫برگردد‬. ‫نیازی‬‫به‬‫مقداردهی‬‫قبل‬‫از‬‫ارسال‬‫به‬‫متد‬‫نیست‬‫ولی‬ً‫ا‬‫حتم‬‫باید‬‫درون‬‫م‬‫تد‬ (‫قبل‬‫از‬‫بازگشت‬‫به‬‫متدی‬‫فراخوانی‬‫شده‬)‫مقدار‬‫بگیرد‬. ‫در‬‫این‬‫روش‬‫پارامترها‬‫تنها‬‫به‬‫عنوان‬‫خروجی‬‫در‬‫نظر‬‫گرفته‬‌‫ی‬‫م‬‫شوند‬. ‫استفاده‬‫از‬ref‫و‬out‫تنها‬‫به‬‫فرستادن‬value type‫ها‬‫محدود‬‫‌شود‬‫ی‬‫نم‬ ‫بلكه‬‫هنگام‬‫فرستادن‬reference type‫نیز‬‫‌توانند‬‫ی‬‫م‬‫مورد‬‫استفاده‬‫قرار‬ ‫گیرد‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  47. 47. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‫استفاده‌از‌کلمه‌کليدی‬params ‫گاهی‬‫از‬‫اوقات‬‫نیاز‬‫است‬‫تا‬‫تابعی‬‫تعریف‬‫کنیم‬‫که‬‫تعداد‬‫آرگومانهای‬‫آ‬‫ن‬‫متغیر‬ ‫باشند‬.‫برای‬‫این‬‫منظور‬‫از‬‫کلمه‬‫ی‬‫کلیدی‬params‫استفاده‬‌‫ی‬‫م‬‫شود‬. ‌‫دو‌نكته‬‫در‌اینجا‌حائز‌اهمیت‌است‬: ۱-‌‫در‌هر‌تابعی‌تنها‬‌‫ی‬‫م‬‌‫توان‬‌‫یكبار‬‫از‬params‌‫استفاده‬‫کرد‬. ۲-‌‫پس‌از‌بكار‌بردن‬params‫دیگر‌ن‬‌‫ی‬‫م‬‌‫توان‬‫هیچ‌آرگومانی‌را‌تعریف‌کر‬‫د‬. class testparams { public double Average(params double[] nums) { double result = 0; for (int i = 0; i < nums.Length; i++) result += nums[i]; return result / nums.Length; } } private void button16_Click(object sender, EventArgs e) { double avg; testparams c1 = new testparams(); avg=c1.Average(10, 17, 70,80,47); MessageBox.Show(avg.ToString()); double[] List = { 15, 8, 6, 12, 77.5, 73 }; avg = c1.Average(List); MessageBox.Show(avg.ToString()); } ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  48. 48. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‫تفاوت‬Value type‌‫و‬Reference type Value Type‫ها‬‫موقع‬‫فرستاده‬‫شدن‬‫به‬‫یك‬،‫متد‬‫بصورت‬‫پیش‬‫فرض‬‫به‬‫روش‬‫فراخوانی‬‫ب‬‫ا‬ ‫مقدار‬‫ارسال‬‫‌شوند‬‫ی‬‫م‬‫و‬‫مقدار‬‫درون‬‫خود‬‫را‬‫درون‬‫آرگومان‬‫متد‬‫کپی‬‫‌کنند‬‫ی‬‫م‬‫و‬‫هرگونه‬‫تغییر‬ ‫درون‬‫‌های‬‫ن‬‫آرگوما‬،‫متد‬‫هیچ‬‫گونه‬‫تغییری‬‫در‬‫داده‬‫اصلی‬‫نخواهد‬‫داشت‬.‫اما‬Ref Type‫ها‬ ‫بصورت‬‫پیش‬‫فرض‬‫بصورت‬‫فراخوانی‬‫با‬‫ارجاع‬‫ارسال‬‫‌شوند‬‫ی‬‫م‬‫زیرا‬‫با‬‫نام‬‫خودشان‬‫که‬‫در‬‫و‬‫اقع‬ ‫ارجاع‬‫به‬‫آ‬‫‌ها‬‫ن‬‫‌باشد‬‫ی‬‫م‬‫فرستاده‬‫‌شوند‬‫ی‬‫م‬.‫در‬‫نتیجه‬‫هرگونه‬‫تغییر‬‫درون‬،‫متد‬‫تأثیر‬‫بر‬‫ر‬‫وی‬‫داده‬ ‫اصلی‬‫خواهد‬‫گذاشت‬‫اگر‬memory‫یك‬‫برنامه‬‫را‬‫به‬‫دو‬‫قسمت‬‫تقسیم‬‫کنیم‬:stack‫و‬ heap.‫در‬‫این‬‫صورت‬‫همه‬Value type‫در‬stack‫ذخیره‬‫‌شوند‬‫ی‬‫م‬‫ولی‬‫با‬‫این‬‫تفاوت‬ ‫که‬‫در‬Reference Type‫ها‬Instance‫آن‬‫در‬heap‫نگهداری‬‫‌شود‬‫ی‬‫م‬‫و‬‫در‬‫واقع‬‫چیزی‬ ‫که‬‫در‬stack‫خواهد‬‫بود‬‫چیزی‬‫نیست‬‫جز‬‫آدرس‬‫به‬heap‫یا‬‫همان‬Reference. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  49. 49. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‫کالس‌های‌بخشي‌یا‬partial ‫با‬‫استفاده‬‫از‬‫کلمه‬‫کلیدی‬partial‌‫ی‬‫م‬‫توانید‬‫اجزاء‬‫یك‬‫کالس‬‫را‬‫در‬‫دو‬‫یا‬‫بیشتر‬‫از‬‫دو‬‫فای‬‫ل‬ ‫جداگانه‬‫قرار‬‫دهید‬.‫مشروط‬‫بر‬‫اینكه‬‫فضای‬‫نام‬‫همه‬‫فایل‬‫ها‬‫یكسان‬‫باشد‬. ‫مزایای‬‫استفاده‬‫از‬‫کالس‬‫های‬partial: ۱-‫افزایش‬‫خوانایی‬‫در‬‫‌های‬‫س‬‫کال‬‫بسیار‬‫زیادی‬‫است‬. ۲-‫اگر‬‫شما‬‫برروی‬‫کالس‬‫‌ای‬‫ه‬‫پیچید‬‫کار‬‫‌کنید‬‫ی‬‫م‬‫براحتی‬‫‌توانید‬‫ی‬‫م‬‫آن‬‫را‬‫بین‬‫چند‬‫نفر‬ ‫تقسیم‬‫کنید‬‫و‬‫هر‬‫کدام‬‫از‬‫افراد‬‫در‬‫فایلی‬‫جداگانه‬‫کدهای‬‫کالس‬‫خود‬‫را‬‫‌نویسد‬‫ی‬‫م‬. 3-‫شما‬‫براحتی‬‫‌توانید‬‫ی‬‫م‬‫‌هایی‬‫ن‬‫مكا‬‫که‬‫برخی‬‫کدها‬‫بصورت‬‫اتوماتیك‬‫تولید‬‫م‬،‫‌شوند‬‫ی‬ ‫مثل‬‫کد‬‫‌های‬‫م‬‫فر‬‫تحت‬‫ویندوز‬(Windows Forms, Web Service)،‫را‬‫از‬ ‫کدهایی‬‫که‬‫بصورت‬‫دستی‬‫‌نویسید‬‫ی‬‫م‬‫تفكیك‬‫کنید‬.‫در‬‫نتیجه‬‫اعمال‬‫تغییرات‬‫بسیار‬‫راحت‬ ‫تر‬‫‌شود‬‫ی‬‫م‬.‫بطور‬‫مثال‬‫وقتی‬‫یك‬‫فرم‬‫ویندوزی‬‫ایجاد‬‫‌کنیم‬‫ی‬‫م‬‫قسمت‬‫کدی‬‫که‬‫توس‬‫ط‬ Designer‫نوشته‬‫‌شود‬‫ی‬‫م‬‫و‬‫مربوط‬‫به‬‫ظاهر‬‫فرم‬‫هست‬‫در‬‫فایلی‬‫جداگانه‬‫وجود‬‫دارد‬‫ک‬‫ه‬ ‫باعث‬‫‌شود‬‫ی‬‫م‬‫کدی‬‫که‬‫ما‬‫می‬‫نویسیم‬‫از‬‫آن‬‫کد‬‫جدا‬‫باشد‬‫و‬‫خواناتر‬‫باشد‬. 4-‫در‬‫تعریف‬‫‌ها‬‫س‬‫کال‬‫‌توانیم‬‫ی‬‫م‬‫بخش‬‫از‬‌‫ا‬‫‌ه‬‫س‬‫کال‬‫که‬‫دارای‬‫خصوصیات‬private‫است‬ ‫را‬‫از‬‫بخشی‬‫که‬‫دارای‬‫خصوصیات‬public‫است‬‫تفكیك‬‫کنیم‬.‫این‬‫کار‬‫به‬‫خوانایی‬‫و‬‫روان‬ ‫فهمیدن‬‫کالس‬‫کمك‬‫فراوانی‬‫‌کند‬‫ی‬‫م‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  50. 50. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‫بازنویسي‌عملگرها‌یا‬operator overloading ‫‌شارپ‬‫ی‬‫س‬‫به‬‫شما‬‫اجازه‬‫‌دهد‬‫ی‬‫م‬operator‫هایی‬‫تعریف‬‫کنید‬‫که‬‫مرتبط‬‫به‬‫‌هایی‬‫س‬‫کال‬‫است‬‫که‬‫خودتان‬ ‫‌سازید‬‫ی‬‫م‬.‫به‬‫این‬‫پروسه‬operator overloading‫گفته‬‫‌شود‬‫ی‬‫م‬.‫با‬overload‫کردن‬‫یك‬ operator‫شما‬‫کاربرد‬‫آن‬operator‫را‬‫به‬‫کالس‬‫خودتان‬‫اضافه‬‫‌کنید‬‫ی‬‫م‬.‫تأثیری‬‫که‬‫این‬operator ‫برروی‬‫کالس‬‫شما‬‫‌گذارد‬‫ی‬‫م‬ً‫ال‬‫کام‬‫تحت‬‫کنترل‬‫خودتان‬‫است‬‫و‬‫ممكن‬‫است‬‫برای‬‫هر‬‫کالس‬‫متفاوت‬‫ب‬‫اشد‬. ‫‌عنوان‬‫ه‬‫ب‬‫مثال‬‫کالسی‬‫که‬‫یك‬‫لیست‬‫پیوندی‬‫تعریف‬،‫‌کند‬‫ی‬‫م‬‫ممكن‬‫است‬‫از‬‫عملگر‬+‫برای‬‫افزود‬‫ن‬‫یك‬‫شیء‬ ‫به‬‫انتهای‬‫لیست‬‫استفاده‬‫کند‬.‫کالسی‬‫که‬stack‫را‬‫اجرا‬،‫‌کند‬‫ی‬‫م‬‫ممكن‬‫است‬‫از‬‫عملگر‬+‫برای‬‫افزودن‬‫یك‬ ‫شیء‬‫به‬‫باالی‬‫پشته‬‫استفاده‬‫کند‬.‫کالسی‬‫دیگر‬‫ممكن‬‫است‬‫از‬‫عملگر‬+‫‌طور‬‫ه‬‫ب‬ً‫ال‬‫کام‬‫متفاوت‬‫اس‬‫تفاده‬‫کند‬. ‫‌که‬‫ی‬‫هنگام‬‫یك‬‫عملگر‬overload‫‌شود‬‫ی‬‫م‬،‫معنای‬‫واقعی‬‫خودش‬‫را‬‫از‬‫دست‬‫‌دهد‬‫ی‬‫نم‬.‫بلكه‬‫فقط‬‫کاربرد‬‫آن‬ ‫به‬‫یك‬‫کالس‬‫افزوده‬‫‌شود‬‫ی‬‫م‬.‫بنابراین‬(‫‌عنوان‬‫ه‬‫ب‬‫مثال‬)overload‫کردن‬‫عملگر‬+‫برای‬‫افزودن‬‫یك‬‫شیء‬‫به‬ ‫انتهای‬‫لیست‬‫پیوندی‬‫دلیل‬‫‌شود‬‫ی‬‫نم‬‫که‬‫عملكرد‬‫آن‬operator‫برای‬‫جمع‬‫کردن‬‫دو‬‫عدد‬‫صحیح‬‫تغییر‬ ‫کند‬. ‫مزیت‬‫اصلی‬operator overloading‫این‬‫است‬‫که‬‫به‬‫شما‬‫اجازه‬‫‌دهد‬‫ی‬‫م‬‫‌طور‬‫ه‬‫ب‬‫یكپارچه‬‫یك‬‫کالس‬ ‫جدید‬‫را‬‫در‬‫محیط‬‫‌نویسی‬‫ه‬‫برنام‬‫خود‬‫ادغام‬‫کنید‬.‫این‬‫ویژگی‬‫که‬‫به‬‫آن‬type extensibility‫‌گویند‬‫ی‬‫م‬، ‫یكی‬‫از‬‫‌های‬‫ش‬‫بخ‬‫مهم‬‫یك‬‫زبان‬‫‌نویسی‬‫ه‬‫برنام‬‫‌گرا‬‫ی‬‫ش‬‫مثل‬‫‌شارپ‬‫ی‬‫س‬‫است‬.‫‌که‬‫ی‬‫هنگام‬operator‫ها‬‫برای‬ ‫یك‬‫کالس‬‫تعریف‬،‫‌شوند‬‫ی‬‫م‬‫‌توانید‬‫ی‬‫م‬‫آن‬operator‫را‬‫برروی‬‫اشیای‬‫کالس‬‫مربوطه‬‫اعمال‬‫کنید‬.‫این‬‫نكته‬ ‫قابل‬‫ذکر‬‫است‬‫که‬operator overloading‫یكی‬‫از‬‫قدرمندترین‬‫‌های‬‫ی‬‫ویژگ‬‫‌شارپ‬‫ی‬‫س‬‫است‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org

×