SlideShare una empresa de Scribd logo
1 de 167
Descargar para leer sin conexión
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫جامع‬ ‫آموزش‬‫شیئ‬‫شارپ‬ ‫سی‬ ‫در‬ ‫گرایی‬
‫مدرس‬:
‫شجاعی‬ ‫رشید‬
‫افزار‬ ‫نرم‬ ‫گرایش‬ ‫کامپیوتر‬ ‫ارشد‬ ‫کارشناس‬
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫مفاهیم‬‫برنامه‬‫نویسی‬‫شی‬‫گرا‬:
•‫کالس‬‫ها‬‫و‬‫اشیاء‬
•‫تعیین‬‫کننده‬‫های‬‫دسترسی‬
•‫کپسوله‬‫سازی‬
•‫وراثت‬
•‫واسط‬
•‫چندریختی‬
•‫خالصه‬‫سازی‬‫و‬‫تجرد‬
•‫کالس‬‫های‬‫انتزاعی‬
OOP: Object Oriented Programming
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫برای‬‫‌های‬‫ه‬‫پروژ‬‫بزرگ‬‫و‬‫پیچیده‬‫‌توانید‬‫ی‬‫نم‬‫به‬‫راحتی‬‫پشت‬‫کامپیوتر‬‫نشسته‬‫و‬‫شروع‬‫ب‬‫ه‬‫‌نویسی‬‫ه‬‫برنام‬
‫کنید‬.
‫برای‬‫دستیابی‬‫به‬‫بهترین‬‫راه‬،‫حل‬‫بایستی‬‫بدقت‬‫‌های‬‫ی‬‫نیازمند‬‫پروژه‬‫را‬‫تجزیه‬‫و‬‫تحلی‬‫ل‬‫کنید‬(‫تعیین‬
‫کنید‬‫که‬‫سیستم‬‫چه‬‫کار‬‫‌خواهد‬‫ی‬‫م‬‫انجام‬‫دهد‬)‫و‬‫طرحی‬‫را‬‫توسعه‬‫دهید‬‫که‬‫آنها‬‫را‬‫برآورده‬‫سازد‬
(‫سیستم‬‫قادر‬‫به‬‫‌گیری‬‫م‬‫تصمی‬‫صحیح‬‫برای‬‫انجام‬‫وظایف‬‫خود‬‫باشد‬).‫در‬‫حالت‬‫‌آل‬‫ه‬‫اید‬‫قب‬‫ل‬‫از‬
‫هرگونه‬،‫کدنویسی‬‫باید‬‫به‬‫سراغ‬‫فرآیند‬‫رفته‬‫و‬‫به‬‫دقت‬‫طراحی‬‫را‬‫انجام‬‫دهید‬.‫اگر‬‫این‬‫فر‬‫آیند‬
‫مستلزم‬‫تحلیل‬‫و‬‫طراحی‬‫سیستم‬‫از‬‫نقطه‬‫‌نظر‬‫‌گرا‬‫ی‬‫ش‬،‫باشد‬‫آن‬‫را‬object-orientend
analysis and design (OOAD)‫یا‬‫تحليل‬‫و‬‫طراحي‬‫‌گرا‬‫ي‬‫ش‬‫‌گویند‬‫ی‬‫م‬.‫‌نویسان‬‫ه‬‫برنام‬‫با‬
‫تجربه‬‫مطلع‬‫هستند‬‫که‬‫تحلیل‬‫و‬‫طراحی‬‫‌تواند‬‫ی‬‫م‬‫در‬‫زمان‬‫و‬‫هزینه‬‫ایجاد‬‫برنامه‬‫بسیار‬‫صر‬‫‌جویی‬‫ه‬‫ف‬
،‫کند‬‫با‬‫اجتناب‬‫از‬‫اعمال‬‫‌های‬‫ح‬‫طر‬‫ضعیف‬‫که‬‫در‬‫هر‬‫بار‬‫برنامه‬‫را‬‫به‬‫شكست‬‫کشانده‬‫و‬‫باعث‬‫م‬‫‌شوند‬‫ی‬
‫کار‬‫از‬‫ابتدا‬‫آغاز‬‫گردد‬‫که‬‫همان‬‫تحمیل‬‫هزینه‬‫و‬‫زمان‬‫است‬.‫اگر‬‫چه‬‫‌های‬‫ش‬‫پرداز‬‫مختلفی‬‫از‬
OOAD‫وجود‬،‫دارد‬‫اما‬‫یك‬‫زبان‬‫گرافیكی‬‫برای‬‫نمایش‬‫نتایج‬‫هر‬‫فرآیند‬OOAD‫بیشتر‬‫از‬‫همه‬
‫بكار‬‫گرفته‬‫شده‬‫است‬.‫این‬‫زبان‬UML (Unified Modeling Language)‫نام‬‫دارد‬.‫در‬
‫حال‬‫حاضر‬‫زبان‬UML‫یكی‬‫از‬‫پرکاربردترین‬‫‌های‬‫ح‬‫طر‬‫نمایش‬‫گرافیكی‬‫برای‬‫مدل‬‫کردن‬
‫‌های‬‫م‬‫سیست‬‫‌گرا‬‫ی‬‫ش‬‫است‬.‫برای‬‫مدل‬‫کردن‬‫‌ها‬‫م‬‫سیست‬‫از‬‫این‬‫زبان‬‫در‬‫سراسر‬‫مجموعه‬‫آموزشی‬‫پیش‬
‫رو‬‫استفاده‬‫‌ایم‬‫ه‬‫کرد‬.
OOAD & UML
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫فرض‬‫کنید‬‫خواهیم‬‫یك‬‫کالس‬‫برای‬‫اشی‬‫ایی‬
‫از‬‫نوع‬‫مستطیل‬‫ایجاد‬‫کنیم‬.‫برای‬‫یك‬
‫مستطیل‬‫‌توانیم‬‫ی‬‫م‬‫اجزاء‬‫‌ای‬‫ه‬‫داد‬‫همانند‬
‫طول‬‫و‬‫عرض‬‫در‬‫نظر‬‫بگیریم‬.‫همچنین‬
‫‌توانیم‬‫ی‬‫م‬‫متدها‬‫یا‬‫همان‬‫اجزاء‬‫تابعی‬‫همان‬‫ند‬
‫تنظیم‬‫کردن‬‫عرض‬‫و‬‫طو‬‫ل‬‫و‬‫همچنین‬
‫محاسبه‬‫محیط‬‫در‬‫نظر‬‫بگیریم‬.
‫مثال‬‌:‫ایجاد‌یک‌کالس‌برای‌مستطيل‬
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫برای‬‫ایجاد‬‫کالس‬‫در‬C#‫از‬‫واژه‬‫کلیدی‬class‫بصورت‬‫مقابل‬‫استفاده‬‌‫ی‬‫م‬‫شود‬.
•Modifier:‫سطح‬‫دستیابی‬‫به‬‫کالس‬‫را‬‫مشخص‬‌‫ی‬‫م‬‫کند‬.‫سطح‬‫دستیابی‬
‫مشخص‬‌‫ی‬‫م‬‫کند‬‫که‬‫کالس‬‫تعریف‬‫شده‬‫چگونه‬‫باید‬‫دستیابی‬‫شود‬.‫در‬‫اینج‬‫ا‬‫دو‬‫سطح‬
‫دستیابی‬‫برای‬‫کالس‬‫داریم‬:public‫و‬internal‫وقتی‬‫سطح‬‫دستیابی‬public
‫تعریف‬‫شود‬‫به‬‫معنای‬‫این‬‫است‬‫که‬‫این‬‫کالس‬‫خارج‬‫از‬‫فضای‬‫نامی‬‫که‬‫در‬‫آن‬‫ت‬‫عریف‬
‌‫ی‬‫م‬‫شود‬‫قابل‬‫استفاده‬‫است‬.‫بعبارت‬،‫دیگر‬‫سطح‬‫دستیابی‬‫عمومی‬‫به‬‫معنا‬‫ی‬‫عدم‬
‫وجود‬‫محدودیتی‬‫در‬‫دستیابی‬‫است‬.‫سطح‬‫دستیابی‬internal‫مشخص‬‌‫ی‬‫م‬‫کند‬‫که‬
‫کالس‬‫فقط‬‫در‬‫همان‬‫فضای‬‫نامی‬‫که‬‫تعریف‬‌‫ی‬‫م‬‫شود‬‫قابل‬‫استفاده‬
‫است‬.Modifier‫بصورت‬‫پیش‬‫فرض‬internal‫تعریف‬‌‫ی‬‫م‬‫شود‬.
•class:‫واژه‬‫ای‬‫کلیدی‬‫است‬‫که‬‫به‬‫همین‬‫صورت‬‫برای‬‫تعریف‬‫کالس‬‫به‬‫کار‬
‌‫ی‬‫م‬‫رود‬.
•name:‫نامی‬‫است‬‫که‬‫توسط‬‫برنامه‬‫نویس‬‫برای‬‫کالس‬‫انتخاب‬‌‫ی‬‫م‬‫گردد‬.‫نام‬‫گذاری‬
‫برای‬،‫کالس‬‫از‬‫نامگذاری‬‫برای‬‫شناسه‬‫ها‬‫پیروی‬‌‫ی‬‫م‬‫کند‬.
•classmember:‫اعضای‬‫کالس‬‫را‬‫مشخص‬‌‫ی‬‫م‬‫کند‬‫و‬‫شامل‬‫اعضاء‬‫داده‬‫ای‬‫و‬
‫اجزاء‬‫تابعی‬‫کالس‬‌‫ی‬‫م‬‫باشند‬.
‫شکل‌کلي‌تعریف‌کالس‬
[modifier] class name
{
Classmembers
}
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
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
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫شکل‌کلي‌ایجاد‌کردن‌اجزاء‌تابعي‌یا‌متد‌های‌کالس‬
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
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
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫در‬‫شكل‬‫مقابل‬‫شی‬‫بنام‬myrect‫از‬‫روی‬
‫کالس‬Rectangle‫ایجاد‬‫شده‬.
‫شکل‌کلي‌ایجاد‌کردن‌یک‌شي‌از‌روی‌کالس‬
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫تمام‬‫اشیائی‬‫که‬‫از‬‫روی‬‫یك‬‫کالس‬‫ایجاد‬
‌‫ی‬‫م‬‫شوند‬‫بطور‬‫اختصاصی‬‫حاوی‬‫تمام‬‫اجزاء‬
‫کالس‬‫مذکور‬‫هستند‬.
‫تعریف‌اشياء‬
Rectangle myrect1 = new Rectangle();
Rectangle myrect2 = new Rectangle();
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫در‬‫صورتیكه‬‫از‬‫دستور‬new‫در‬‫تعریف‬‫کردن‬
‫اشیاء‬‫استفاده‬‫نكنیم‬‫شی‬‫ایجاد‬‫ن‬‌‫ی‬‫م‬‫ش‬،‫ود‬
‫بلكه‬‫تنها‬‫یك‬‫مرجع‬‫یا‬‫همان‬‫اشاره‬‫گر‬‫ایج‬‫اد‬
‌‫ی‬‫م‬‫شود‬.‫بنابراین‬‫مطابق‬‫شكل‬‌‫ی‬‫م‬‫توان‬
‫تعریف‬‫شی‬‫را‬‫در‬‫دو‬‫مرحله‬‫انجام‬‫داد‬.
‫ایجاد‌کردن‌اشاره‌گر‌یا‌همان‌مرجع‌به‌اشياء‬
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫در‬‫صورتیكه‬‫از‬‫دستور‬new‫در‬‫تعریف‬
‫کردن‬‫اشیاء‬‫استفاده‬،‫نكنیم‬‫شی‬‫ایجاد‬
‫ن‬‌‫ی‬‫م‬‫شود‬‫بلكه‬‫تنها‬‫یك‬‫مرجع‬‫یا‬‫همان‬
‫اشاره‬‫گر‬‫ایجاد‬‌‫ی‬‫م‬‫شود‬‫که‬‌‫ی‬‫م‬‫تواند‬‫به‬‫ش‬‫ئی‬
‫که‬‫قبال‬‫ایجاد‬‫شده‬‫نسبت‬‫داده‬‫شود‬‫و‬‫ب‬‫ه‬
‫عنوان‬‫نام‬‫دوم‬‫شی‬‫مذکور‬‫در‬‫نظر‬‫گرفته‬
‫شود‬.
‫نسبت‌دادن‌یک‌مرجع‌به‌یک‌شي‌موجود‬
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫برای‬‫فراخوانی‬‫متدها‬‫ابتدا‬‫نام‬،‫شی‬‫عالم‬‫ت‬
‫نقطه‬‫و‬‫سپس‬‫نام‬‫متد‬‫را‬‌‫ی‬‫م‬‫نویسیم‬‫و‬‫م‬‫قادیر‬
‫مناسب‬‫را‬‫به‬‫عنوان‬‫آرگومان‬‫های‬‫مورد‬‫نیاز‬
‫به‬‫متدها‬‫ارسال‬‌‫ی‬‫م‬‫کنیم‬.
‫نحوه‌فراخواني‌اجزاء‌تابعي‌کالس‌یا‌همان‌متدها‬
Rectangle R1 = new Rectangle();
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‌‫فراخواني‌متد‬getlength‌‫برای‌شي‬R1Rectangle R1 = new Rectangle();
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫ما‬‫در‬‫دنیایی‬‫از‬‫اشیاء‬‫زندگی‬‫‌کنیم‬‫ی‬‫م‬.‫کافیست‬‫نگاهی‬‫به‬‫اطراف‬‫خود‬‫بیانداز‬‫یم‬.‫اطراف‬
‫ما‬‫پر‬‫است‬‫از‬،‫‌ها‬‫ل‬‫اتومبی‬،‫هواپیماها‬،‫‌ها‬‫ن‬‫انسا‬،‫حیوانات‬،‫‌ها‬‫ن‬‫ساختما‬‫‌های‬‫غ‬‫چرا‬‫ترافیك‬،
،‫باالبرها‬‫و‬‫بسیاری‬‫از‬‫چیزهای‬‫دیگر‬.‫قبل‬‫از‬‫اینكه‬‫‌های‬‫ن‬‫زبا‬‫‌نویسی‬‫ه‬‫برنام‬‫‌گ‬‌‫ی‬‫ش‬‫را‬‫ابداع‬
،‫شوند‬‫‌های‬‫ن‬‫زبا‬‫‌نویسی‬‫ه‬‫برنام‬(‫همانند‬FORTRAN،Pascal،C‫و‬Basic)‫بر‬‫روی‬
‫اعمال‬‫یا‬actions‫بجای‬‫چیزها‬‫یا‬‫اشیاء‬‫تمرکز‬‫داشتند‬.‫با‬‫اینكه‬‫‌نویسان‬‫ه‬‫برنام‬‫د‬‫ر‬‫دنیائی‬
‫از‬‫اشیاء‬‫زندگی‬‫‌کردند‬‫ی‬‫م‬‫اما‬‫با‬‫افعال‬‫سرگرم‬‫بودند‬.‫خود‬‫همین‬‫تناقض‬‫باعث‬‫ش‬‫د‬‫تا‬
‫‌های‬‫ه‬‫برنام‬‫نوشته‬‫شده‬‫از‬‫قدرت‬‫کافی‬‫برخوردار‬‫نباشند‬.‫هم‬‫اکنون‬‫که‬‫‌های‬‫ن‬‫زبا‬
‫‌نویسی‬‫ه‬‫برنام‬‫‌گرا‬‌‫ی‬‫ش‬‫همانند‬C#‫و‬Java‫در‬‫دسترس‬،‫هستند‬‫‌نویسان‬‫ه‬‫برنام‬‫به‬‫زندگی‬
‫خود‬‫در‬‫یك‬‫دنیای‬‫‌گرا‬‌‫ی‬‫ش‬‫ادامه‬‫‌دهند‬‫ی‬‫م‬‫و‬‫‌توانند‬‫ی‬‫م‬‫‌های‬‫ه‬‫برنام‬‫خود‬‫را‬‫با‬‫اسلوب‬
‫‌گرا‬‌‫ی‬‫ش‬‫بنویسند‬.‫فرآیند‬‫‌نویسی‬‫ه‬‫برنام‬‫‌گرا‬‌‫ی‬‫ش‬‫در‬‫مقایسه‬‫با‬‫‌نویسی‬‫ه‬‫برنام‬
‫روالی‬(procedural)‫ماهیت‬‫بسیار‬‫‌تری‬‫ی‬‫طبیع‬‫دارد‬‫و‬‫نتیجه‬‫آن‬‫هم‬‫رضایت‬‫بخش‬‫‌تر‬
‫است‬.
‫برنامه‌نویسی‌شی‬‌‫گرا‬Object Oriented Programming
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫اشیاء‬‫چه‬‫هستند‬‫و‬‫چرا‬‫خاص‬‫‌باشند؟‬‫ی‬‫م‬‫در‬‫واقع‬
‫تكنولوژی‬،‫شی‬‫یك‬‫الگوی‬‫بسته‬(package)‫است‬‫که‬
‫به‬‫ما‬‫در‬‫ایجاد‬‫واحدهای‬‫‌افزاری‬‫م‬‫نر‬‫با‬‫معنی‬‫کمك‬
‫‌کند‬‫ی‬‫م‬.‫اشیاء‬‫تمرکز‬‫زیادی‬‫بر‬‫نواحی‬‫خاص‬‫‌ه‬‫ه‬‫برنام‬‫ا‬
‫دارند‬.‫اشیاء‬‫‌توانند‬‫ی‬‫م‬‫از‬‫جمله‬‫اشیاء‬،‫تاریخ‬،‫زمان‬
،‫پرداخت‬،‫فاکتور‬،‫صدا‬،‫ویدئو‬،‫فایل‬‫رکورد‬‫و‬‫بسی‬‫اری‬‫از‬
‫موارد‬‫دیگر‬‫باشد‬.‫در‬‫حقیقت‬‫‌توان‬‫ی‬‫م‬‫هر‬‫چیزی‬‫را‬‫بف‬‫رم‬
‫یك‬‫شی‬‫عرضه‬‫کرد‬.‫فرآیند‬‫‌نویسی‬‫ه‬‫برنام‬‫‌گرا‬‌‫ی‬‫ش‬‫در‬
‫مقایسه‬‫با‬‫‌نویسی‬‫ه‬‫برنام‬‫روالی‬(procedural)‫ماهیت‬
‫بسیار‬‫‌تری‬‫ی‬‫طبیع‬‫دارد‬‫و‬‫نتیجه‬‫آن‬‫هم‬‫رضایت‬‫بخ‬‫‌تر‬‫ش‬
‫است‬.
‫برنامه‬‫نویسی‬‫شی‬‫گرا‬‫در‬‫مقایسه‬‫با‬‫برنامه‬‫نویسی‬‫روال‬‫گ‬‫را‬
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫تمرکز‬‫‌نویسان‬‫ه‬‫برنام‬oop‫بر‬‫روی‬‫ایجاد‬«‫اع‬‫و‬‫ان‬‫‌ای‬‫ه‬‫داد‬‫تعریف‬‫شده‬‫از‬‫سوی‬‫کاربر‬»‫که‬
‫کالس‬‫نامیده‬‫‌شوند‬‫ی‬‫م‬‫است‬.‫قبل‬‫از‬‫اینكه‬‫بتوانید‬‫با‬‫اتومبیلی‬‫رانندگی‬‫کن‬،‫ید‬‫باید‬‫کسی‬
‫آن‬‫را‬‫طراحی‬‫و‬‫ساخته‬‫باشد‬.ً‫ال‬‫معمو‬‫ساخت‬،‫اتومبیل‬‫با‬‫ترسیم‬‫یا‬‫‌کشی‬‫ه‬‫نقش‬‫مهن‬‫دسی‬
‫شروع‬‫شود‬.‫متأسفانه‬‫‌توانید‬‫ی‬‫نم‬‫با‬‫‌های‬‫ه‬‫نقش‬‫ترسیمی‬‫یك‬‫اتومبیل‬‫رانندگی‬‫کنید‬.‫قبل‬‫از‬
‫اینكه‬‫با‬‫اتومبیلی‬‫رانندگی‬‫کنید‬‫باید‬‫آن‬‫اتومبیل‬‫از‬‫روی‬‫‌های‬‫ه‬‫نقش‬‫ترسیم‬‫ی‬‫ساخته‬‫شود‬.
‫‌ها‬‫س‬‫کال‬‫همانند‬‫‌های‬‫ه‬‫نقش‬‫ترسیمی‬‫‌ها‬‫ه‬‫خان‬‫هستند‬.‫یك‬،‫کالس‬‫نقشه‬‫ایجاد‬‫یك‬‫ش‬‫ی‬‫از‬
‫کالس‬‫است‬.‫همانطوری‬‫که‬‫‌توانیم‬‫ی‬‫م‬‫‌های‬‫ه‬‫خان‬‫متعددی‬‫از‬‫روی‬‫یك‬‫نقشه‬،‫بسازیم‬
‫‌توانیم‬‫ی‬‫م‬‫تعدادی‬‫شی‬‫از‬‫روی‬‫یك‬‫کالس‬‫‌سازی‬‫ه‬‫نمون‬‫کنیم‬.‫‌توان‬‫ی‬‫نم‬‫در‬‫نقشه‬‫آش‬‫پزخانه‬
‫مبادرت‬‫به‬‫آشپزی‬،‫کرد‬‫آشپزی‬‫فقط‬‫در‬‫آشپزخانه‬‫خانه‬‫‌پذیر‬‫ن‬‫امكا‬‫است‬.‫اشیاء‬‫ن‬‫مونه‬‫های‬
‫واقعی‬‫هستند‬‫که‬‫از‬‫روی‬‫کالس‬‫ها‬‫ایجاد‬‫‌شوند‬‫ی‬‫م‬.
‌‫کالس‌و‌شي‬(Class & object)
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫کالس‬‫قالب‬‫یك‬‫موجودیت‬‫را‬‫تعریف‬‌‫ی‬‫م‬‫ک‬‫ند‬
‫و‬‫اشیاء‬‫نمونه‬‫هایی‬‫واقعی‬‫از‬‫آن‬‫کالس‬
‫‌ب‬‫ی‬‫م‬‫اشند‬.‫کالس‬‫هیچ‬‫حافظه‬‫ای‬‫اشغال‬‫نك‬‫رده‬
‫و‬‫تنها‬‫قالب‬‫موجودیت‬‫را‬‫نمایش‬‌‫ی‬‫م‬‫دهد‬‫اما‬‫از‬
‫روی‬‫یك‬‫کالس‬‫چندین‬‫شی‬‫‌توان‬‫ی‬‫م‬‫تعری‬‫ف‬
‫کرد‬‫که‬‫هر‬‫یك‬‫برای‬‫خود‬‫حافظه‬‫اشغال‬
‫کرده‬‫اند‬‫و‬‫مستقل‬‫از‬‫یكدیگرند‬.
‌‫کالس‌و‌شي‬(Class & object)
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫تمرکز‬‫‌نویسان‬‫ه‬‫برنام‬C++‫بر‬‫روی‬‫ایجاد‬«‫اع‬‫و‬‫ان‬‫‌ای‬‫ه‬‫داد‬‫تعریف‬‫شده‬‫از‬‫سوی‬
‫کاربر‬»‫که‬‫کالس‬‫نامیده‬‫‌شوند‬‫ی‬‫م‬‫است‬.‫هر‬‫کالس‬‫حاوی‬‫اجزاء‬‫‌ای‬‫ه‬‫داد‬‫و‬‫هم‬
‫‌ای‬‫ه‬‫مجموع‬‫از‬‫متدهاست‬‫که‬‫بر‬‫روی‬‫‌ها‬‫ه‬‫داد‬‫کار‬‫‌کنند‬‫ی‬‫م‬‫و‬‫‌هایی‬‫س‬‫سروی‬‫برای‬
‫‌ها‬‫ه‬‫‌گیرند‬‫س‬‫سروی‬(‫‌ها‬‫س‬‫کال‬‫و‬‫توابع‬‫دیگری‬‫که‬‫از‬‫کالس‬‫استفاده‬‫‌کن‬‫ی‬‫م‬‫ند‬)
‫تدارك‬‫‌بیند‬‫ی‬‫م‬.‫برای‬،‫مثال‬‫یك‬‫کالس‬‫حساب‬‫بانكی‬‫‌تواند‬‫ی‬‫م‬‫شامل‬‫ی‬‫ك‬
‫شماره‬‫حساب‬‫و‬‫یك‬‫موجودی‬‫باشد‬‫که‬‫اجزاء‬‫‌ای‬‫ه‬‫داد‬‫کالس‬‫محسوب‬‫‌شوند‬‫ی‬‫م‬
‫و‬‫به‬‫‌های‬‫ر‬‫رفتا‬‫هر‬‫موجودیت‬‫از‬‫یك‬،‫کالس‬‫توابع‬‫عضو‬‫گفته‬‫‌شود‬‫ی‬‫م‬(‫معم‬ً‫ال‬‫و‬
‫در‬‫سایر‬‫‌های‬‫ن‬‫زبا‬‫‌نویسی‬‫ه‬‫برنام‬‫‌گرا‬‫ی‬‫ش‬‫همانند‬‫جاوا‬‫به‬‫توابع‬،‫عضو‬‫متد‬‫گفته‬
‫‌شود‬‫ی‬‫م‬).‫برای‬،‫مثال‬‫یك‬‫کالس‬‫حساب‬‫بانكی‬‫‌تواند‬‫ی‬‫م‬‫دارای‬‫توابع‬‫عض‬‫وی‬
‫برای‬‫ایجاد‬‫یك‬‫‌انداز‬‫س‬‫پ‬(‫‌دهنده‬‫ش‬‫افزای‬‫موجودی‬)،‫برداشت‬(‫‌دهنده‬‫ش‬‫کاه‬
‫موجودی‬)‫و‬‫نمایش‬‫موجودی‬‫فعلی‬‫باشد‬.‫‌نویس‬‫ه‬‫برنام‬‫از‬‫انواع‬‫توکار‬(‫و‬‫سای‬‫ر‬
‫انواع‬‫تعریف‬‫شده‬‫توسط‬‫کاربر‬‫در‬‫ایجاد‬‫انواع‬‫جدید‬(‫‌ها‬‫س‬‫کال‬)‫استفاده‬‫م‬‫‌کند‬‫ی‬.
‫کالس‬‫ها،‌اجزاء‌داده‬‫ای‌و‌اجزاء‌تابعي‬
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫فرض‬‫کنید‬‫که‬‫‌خواهید‬‫ی‬‫م‬‫با‬‫اتومبیلی‬‫رانندگی‬‫کرده‬‫و‬‫با‬‫فشردن‬‫پدال‬‫گاز‬‫آن‬‫را‬‫سر‬‫یعتر‬‫به‬
‫حرکت‬‫درآورید‬.‫چه‬‫اتفاقی‬‫قبل‬‫از‬‫اینكه‬‫بتوانید‬‫اینكار‬‫را‬‫انجام‬،‫دهید‬‫باید‬‫رخ‬‫دهد؟‬‫ب‬‫سیار‬
،‫خوب‬‫قبل‬‫از‬‫اینكه‬‫بتوانید‬‫با‬‫اتومبیلی‬‫رانندگی‬،‫کنید‬‫باید‬‫کسی‬‫آن‬‫را‬‫طراحی‬‫و‬‫ساخته‬‫باشد‬.
ً‫ال‬‫معمو‬‫ساخت‬‫اتومبیل‬‫با‬‫ترسیم‬‫یا‬‫‌کشی‬‫ه‬‫نقش‬‫مهندسی‬‫شروع‬‫شود‬.‫همانند‬‫طراحی‬‫ص‬‫ورت‬
‫گرفته‬‫برای‬‫خانه‬.‫این‬‫ترسیمات‬‫شامل‬‫طراحی‬‫پدال‬‫گاز‬‫است‬‫که‬‫راننده‬‫با‬‫استفاده‬‫از‬‫آ‬‫ن‬‫سبب‬
‫‌شود‬‫ی‬‫م‬‫تا‬‫اتومبیل‬‫سریعتر‬‫حرکت‬‫کند‬.‫تا‬‫حدی‬‫پدال‬‫سبب‬«‫پنهان‬»‫شدن‬‫پیچیدگ‬‫ی‬
‫مكانیزمی‬‫‌شود‬‫ی‬‫م‬‫که‬‫اتومبیل‬‫را‬‫سریعتر‬‫بحرکت‬‫‌آورد‬‫ی‬‫درم‬،‫همانطوری‬‫که‬‫پدال‬‫ترمز‬‫س‬‫بب‬
«‫پنهان‬»‫شدن‬‫مكانیزمی‬‫‌شود‬‫ی‬‫م‬‫که‬‫از‬‫سرعت‬‫اتومبیل‬‫کم‬،‫‌کند‬‫ی‬‫م‬‫فرمان‬‫اتومبیل‬‫س‬‫بب‬
«‫پنهان‬»‫شدن‬‫مكانیزمی‬‫‌شود‬‫ی‬‫م‬‫که‬‫اتومبیل‬‫را‬‫هدایت‬‫‌کند‬‫ی‬‫م‬‫و‬‫موارد‬‫دیگر‬.‫با‬‫انجام‬‫چ‬‫نین‬
،‫کارهایی‬‫افراد‬‫عادی‬‫‌توانند‬‫ی‬‫م‬‫به‬‫آسانی‬‫اتومبیل‬‫را‬‫هدایت‬‫کرده‬‫و‬‫براحتی‬‫از‬‫پدال‬،‫گاز‬‫ترمز‬‫و‬
،‫فرمان‬‫مكانیزم‬‫تعویض‬‫دنده‬‫و‬‫سایر‬«‫‌های‬‫ط‬‫واس‬»‫کاربرپسند‬‫و‬‫ساده‬‫استفاده‬‫کنند‬‫ت‬‫ا‬‫پیچیدگی‬
‫‌های‬‫م‬‫مكانیز‬‫داخلی‬‫اتومبیل‬‫برای‬‫راننده‬‫مشخص‬‫نباشد‬.‫متأسفانه‬،‫‌توانید‬‫ی‬‫نم‬‫با‬‫ن‬‫‌های‬‫ه‬‫قش‬
‫ترسیمی‬‫یك‬‫اتومبیل‬‫رانندگی‬،‫کنید‬‫قبل‬‫از‬‫اینكه‬‫با‬‫اتومبیلی‬‫رانندگی‬‫کنی‬‫د‬‫باید‬‫آن‬‫اتومبیل‬‫از‬
‫روی‬‫‌های‬‫ه‬‫نقش‬‫ترسیمی‬‫ساخته‬‫شود‬.‫یك‬‫اتومبیل‬ً‫ال‬‫کام‬‫ساخته‬‫شده‬‫دارای‬‫پدال‬‫گاز‬‫وا‬‫قعی‬
‫برای‬‫به‬‫حرکت‬‫درآوردن‬‫سریع‬‫اتومبیل‬،‫است‬‫اما‬‫این‬‫هم‬‫کافی‬‫نیست‬.‫اتومبیل‬‫بخودی‬‫خود‬
‫شتاب‬،‫‌گیرد‬‫ی‬‫نم‬‫از‬‫اینرو‬‫الزم‬‫است‬‫راننده‬‫بر‬‫روی‬‫پدال‬‫گاز‬‫فشار‬‫آورد‬‫تا‬‫به‬‫اتومبیل‬‫د‬‫ستور‬
‫حرکت‬‫‌تر‬‫ع‬‫سری‬‫را‬‫صادر‬‫کند‬.
‫کالس‬‫ها،‌اجزاء‌داده‬‫ای‌و‌اجزاء‌تابعي‬
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
Encapsulation‫یا‬‫بسته‬‫بندی‬
‫قرار‬‫دادن‬‫کلیه‬‫خصوصیات‬‫و‬‫متدهای‬‫یك‬‫کالس‬‫در‬‫یك‬‫‌بندی‬‫ه‬‫بست‬‫مشخص‬‫را‬Encapsulation‫‌نامند‬‫ی‬‫م‬.‫بسته‬‫بندی‬‫کردن‬(package)‫‌افزار‬‫م‬‫نر‬
‫بصورت‬‫‌ها‬‫س‬‫کال‬‫‌تواند‬‫ی‬‫م‬‫ویژگی‬‫استفاده‬‫مجدد‬‫از‬‫‌افزار‬‫م‬‫نر‬‫را‬‫عرضه‬‫کند‬.
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
Interface
Interface‫به‬‫عنوان‬‫یك‬‫قرارداد‬‫تعر‬‫ی‬‫ف‬‌‫ی‬‫م‬‫شود‬‫که‬‫ه‬‌‫ه‬‫م‬‫ی‬‫گروه‬‫هایی‬‫که‬‫آن‬‫را‬‌‫ی‬‫م‬‫گیرند‬‫باید‬
‫آن‬‫را‬‫دنبال‬‫کنند‬.Interface‫قسمت‬‫چه‬‫باید‬‫کرد‬‫از‬‫یك‬‫قرارداد‬‫را‬‫تعریف‬‌‫ی‬‫م‬‫کند‬‫و‬
‫گروه‬‫های‬‫مشتق‬‫شده‬‫قسمت‬‫چگونگی‬‫انجام‬‫این‬‫قراردادها‬‫را‬‫تعریف‬‌‫ی‬‫م‬‫کنند‬.Interface
‫تنها‬‫شامل‬‫اعالم‬‫اعضا‬‌‫ی‬‫م‬‫باشد‬‫و‬‫اغلب‬‫به‬‫ت‬‫أ‬‫مین‬‫یك‬‫ساختار‬‫استاندارد‬‫کمك‬‌‫ی‬‫م‬‫کنن‬‫د‬.‫تعریف‬
‫عملكرد‬‫اعضا‬‫ء‬‫مسئولیت‬‫گروه‬‫مشتق‬‫شده‬‌‫ی‬‫م‬‫باشد‬.Interface‫نشان‬‌‫ی‬‫م‬‫دهد‬‫که‬‫می‬‫خواهید‬
‫یك‬‫آبجكت‬‫چگونه‬‫مورد‬‫استفاده‬‫قرار‬‫گیرد‬‫و‬‫به‬‫این‬‫که‬‫چگونه‬‫پیاده‬‫سازی‬‌‫ی‬‫م‬‫شود‬‫ک‬‫اری‬
‫ندارد‬.‫به‬‫کمك‬Interface‌‫ی‬‫م‬‫توان‬‫عملكرد‬‫وراثت‬‫چندگانه‬‫را‬‫در‬C#‫شبیه‬‫سازی‬‫کرد‬.
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
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
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫‌بری‬‫ث‬‫ار‬‫فرمی‬‫از‬‫بكارگیری‬‫مجدد‬
‫‌افزار‬‫م‬‫نر‬‫است‬‫که‬‫در‬‫آن‬‫‌های‬‫س‬‫کال‬
‫ایجاد‬‫شده‬‫اجزاء‬‫‌ای‬‫ه‬‫داد‬‫و‬‫رفتارهای‬
‫خود‬‫را‬‫براساس‬‫اطالعات‬‫یك‬‫کالس‬
‫موجود‬‫بدست‬‫آورده‬‫و‬‫در‬‫صورت‬‫نیاز‬
‫حاوی‬‫‌های‬‫ت‬‫قابلی‬‫جدید‬‫هستند‬.
‫بكارگیری‬‫مجدد‬‫‌افزار‬‫م‬‫نر‬‫سبب‬‫کاه‬‫ش‬
‫مدت‬‫زمان‬‫توسعه‬‫‌افزار‬‫م‬‫نر‬‫شده‬‫و‬
‫کیفیت‬‫آنرا‬‫بطور‬‫موثری‬‫افزایش‬
‫‌دهد‬‫ی‬‫م‬.
‫وراثت‬Inheritance
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫چند‬‫ریختی‬Polymorphism
‫‌ریختی‬‫د‬‫چن‬‫امكان‬‫‌دهد‬‫ی‬‫م‬‫تا‬‫‌ها‬‫ه‬‫برنام‬‫بجای‬‫اینكه‬«‫برنامه‬‫خا‬‫صی‬»
،‫باشند‬‫حالت‬‫یك‬«‫برنامه‬‫کلی‬»‫داشته‬‫باشند‬.
‫در‬،‫عمل‬‫چند‬‫ریختی‬‫امكان‬‫‌دهد‬‫ی‬‫م‬‫تا‬‫‌هایی‬‫ه‬‫برنام‬‫بنویسیم‬‫که‬
‫مبادرت‬‫به‬‫پردازش‬‫اشیاء‬‫از‬‫‌هایی‬‫س‬‫کال‬‫کنند‬‫که‬‫بخشی‬‫از‬‫همان‬
‫سلسله‬‫مراتب‬‫کالس‬،‫هستند‬‫همچنانكه‬‫همگی‬‫آنها‬‫اشیا‬‫ئ‬‫ی‬‫از‬
‫سلسله‬‫مراتب‬‫کالس‬‫مبنا‬‫‌باشند‬‫ی‬‫م‬.‫به‬‫کمك‬،‫چندریختی‬
‫‌توانیم‬‫ی‬‫م‬‫‌های‬‫م‬‫سیست‬‫را‬‫طراحی‬‫و‬‫‌سازی‬‫ه‬‫پیاد‬‫کنیم‬‫که‬‫گ‬‫سترش‬
‫و‬‫‌پذیری‬‫ط‬‫بس‬‫آنها‬‫آسانتر‬‫است‬.‫‌های‬‫س‬‫کال‬‫جدید‬‫‌توانند‬‫ی‬‫م‬‫با‬
‫کمی‬‫تغییر‬‫یا‬‫اصالح‬‫در‬‫‌های‬‫ش‬‫بخ‬‫عمومی‬،‫برنامه‬‫به‬‫آن‬‫افز‬‫وده‬
،‫شوند‬‫مادامیكه‬‫‌های‬‌‫س‬‫کال‬‫جدید‬‫بخشی‬‫از‬‫سلسله‬‫مراتب‬‫ت‬‫وارثی‬
‫باشند‬‫که‬‫برنامه‬‫بطور‬‫جامع‬‫آنرا‬‫پردازش‬‫‌کند‬‫ی‬‫م‬.‫تنها‬‫بخش‬‫‌ها‬‫ی‬‫ی‬
‫از‬‫برنامه‬‫که‬‫باید‬‫برای‬‫تطبیق‬‫یافتن‬‫با‬‫‌های‬‫س‬‫کال‬‫جدید‬‫تغییر‬
‫داده‬‫شو‬‫ن‬‫د‬‫آنهایی‬‫هستند‬‫که‬‫نیاز‬‫دارند‬‫تا‬‫از‬‫وجود‬‫‌های‬‫س‬‫کال‬
‫جدید‬‫افزوده‬‫شده‬‫به‬‫سلسه‬‫مراتب‬ً‫ا‬‫مستقیم‬‫مطلع‬‫گردند‬.
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫در‬‫لغت‬‫به‬‫معنای‬‫تجرد‬‫یا‬‫انتزاع‬‫است‬‫و‬‫به‬‫مفهوم‬‫یك‬‫برداش‬‫ت‬
‫واحد‬‫از‬‫مجموعه‬‫مشاهدات‬‌‫ی‬‫م‬‫باشد‬.‫در‬‫واقع‬‫انتزاع‬‫همان‬‫نیرویی‬
‫است‬‫که‬‫با‬‫دیدن‬‫تعداد‬‫زیادی‬‫درخت‬‫مفهوم‬‫جنگل‬‫را‬‫در‬‫ذهن‬
‫انسان‬‫تداعی‬‌‫ی‬‫م‬‫کند‬‫یا‬‫با‬‫دیدن‬‫مجموعه‬‫ای‬‫از‬‫پیكسل‬‫های‬‫ص‬‫فحه‬
‫نمایش‬‫کامپیوتر‬‫یك‬‫تصویر‬‫خاص‬‫را‬‫در‬‫ذهن‬‫ایجاد‬‌‫ی‬‫م‬‫کند‬.‫در‬
‫این‬‫روش‬‫برنامه‬‫نویس‬‫باید‬‫سعی‬‫کند‬‫اشیائی‬‫را‬‫تعریف‬‫ک‬‫ند‬‫که‬
‫برنامه‬‫را‬‫از‬‫تعریف‬‫اشیاء‬‫بیشتر‬‫بی‬‫نیاز‬‫کند‬.‫در‬‫واقع‬‫او‬‫ه‬‫مواره‬
‫باید‬‫به‬‫دنبال‬‫اشیاء‬‫مادر‬‫بگردد‬.‫یعنی‬‫بعد‬‫از‬‫یافتن‬‫توا‬‫بع‬‫و‬
‫داده‬‫های‬‫مورد‬‫نیاز‬‫برای‬‫پیاده‬‫سازی‬‫سیستم‬‫مورد‬‫نظر‬‫باید‬
‫مجموعه‬‫ای‬‫از‬‫توابع‬‫و‬‫داده‬‫ها‬‫را‬‫توسط‬"‫یك‬"‫کالس‬(‫شئ‬)
‫پیاده‬‫سازی‬‫کند‬.Abstraction‫در‬‫اصل‬‫به‬‫معنی‬‫نمایش‬‫دادن‬
‫تنها‬‫جزئیات‬‫مورد‬‫نیاز‬‫به‬‫سرویس‬‫گیرنده‬‫است‬.
Abstraction
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
Abstraction
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫در‬‫ارث‬‫بری‬‫کالس‬‫های‬،‫پایه‬‫تنها‬‫شامل‬‫متدها‬‫و‬‫خصوصیاتی‬‫هستند‬‫ک‬‫ه‬‫در‬
‫بین‬‫کالس‬‫هایی‬‫که‬‫از‬‫این‬‫کالس‬‫ها‬‫مشتق‬‌‫ی‬‫م‬‫شوند‬‫مشترك‬‫هستند‬.‫به‬
‫عبارت‬‫دیگر‬‫خود‬‫کالس‬‫های‬‫پایه‬‫دارای‬‫مفهوم‬‫کاملی‬‫از‬‫یك‬‫شئ‬‫ن‬‌‫ی‬‫م‬‫ب‬،‫اشند‬
‫درنتیجه‬‫ایجاد‬‫اشیاء‬‫جدید‬‫از‬‫این‬‫کالس‬‫ها‬‫بی‬‫معنی‬‫است‬.‫برای‬‫اینك‬‫ه‬‫نتوان‬
‫از‬‫کالس‬‫های‬‫پایه‬‫اشیاء‬‫نمونه‬‫ای‬‫تعریف‬‫کرد‬.‫آنها‬‫را‬‫به‬‫صورت‬abstract
‫تعریف‬‌‫ی‬‫م‬‫نماییم‬.
‫نكته‬‫اینكه‬‫ن‬‫‌توان‬‫ی‬‫م‬‫اشیاء‬‫جدیدی‬‫از‬‫کالس‬‫های‬abstract‫ایجاد‬‫کرد‬.
Abstract Class
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫مشاهده‬‫کردید‬‫که‬‫توابع‬‫عضو‬‫یك‬‫شی‬‫‌تواند‬‫ی‬‫م‬‫‌های‬‫ه‬‫داد‬‫شی‬‫را‬
‫دستكاری‬‫کند‬.‫چگونه‬‫توابع‬‫عضو‬‫‌دانند‬‫ی‬‫م‬‫که‬‫اعضای‬‫داده‬‫کد‬‫ام‬‫یك‬
‫از‬‫اشیاء‬‫را‬‫دستكاری‬‫کنند؟‬‫هر‬‫شی‬‫از‬‫طریق‬‫یك‬‫‌گر‬‫ه‬‫اشار‬‫بنام‬this
(‫یك‬‫کلمه‬‫کلیدی‬‫در‬C#)‫به‬‫آدرس‬‫متعلق‬‫بخود‬‫دسترسی‬‫دارد‬.
‫‌گر‬‫ه‬‫اشار‬this‫یك‬،‫شی‬‫بخشی‬‫از‬‫خود‬‫شی‬،‫‌باشد‬‫ی‬‫نم‬‫‌گر‬‫ه‬‫اشار‬
this‫بصورت‬‫یك‬‫آرگومان‬‫ضمنی‬‫به‬‫هر‬‫تابع‬‫عضو‬‫غیراستاتی‬‫ك‬‫شی‬
‫ارسال‬‫‌شود‬‫ی‬‫م‬(‫توسط‬‫کامپایلر‬).‫اشیاء‬‫از‬‫‌گر‬‫ه‬‫اشار‬this‫بصورت‬
‫ضمنی‬(‫که‬‫در‬‫این‬‫بخش‬‫آنرا‬‫انجام‬‫‌دهیم‬‫ی‬‫م‬)‫یا‬‫صریح‬‫برای‬‫مراجع‬‫ه‬
‫اعضای‬‫داده‬‫و‬‫توابع‬‫عضو‬‫خود‬‫استفاده‬‫‌کنند‬‫ی‬‫م‬.
‌‫مفهوم‌مرجع‬this‫در‌متدهای‌کالس‬
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
•‫هر‬‫کالسی‬‫که‬‫اعالن‬‫‌کنید‬‫ی‬‫م‬‫‌تواند‬‫ی‬‫م‬‫یك‬‫سازنده‬(constructor)‫داشته‬‫باشد‬‫که‬‫‌توان‬‫ی‬‫م‬‫با‬‫استفاده‬‫از‬‫آن‬‫مبادرت‬‫به‬‫مقداردهی‬‫اولیه‬‫یك‬‫شی‬‫از‬
‫کالس‬‫به‬‫هنگام‬‫ایجاد‬‫شی‬‫کرد‬.‫سازنده‬‫یك‬‫تابع‬‫عضو‬‫ویژه‬‫است‬‫که‬‫بایستی‬‫همنام‬‫با‬‫نام‬‫کالس‬‫تعریف‬‫شده‬،‫باشد‬‫از‬‫اینروست‬‫که‬‫کام‬‫پایلر‬‫‌تواند‬‫ی‬‫م‬‫آن‬‫را‬
‫از‬‫دیگر‬‫توابع‬‫عضو‬‫کالس‬‫تشخیص‬‫دهد‬.‫مهمترین‬‫تفاوت‬‫موجود‬‫مابین‬‫‌ها‬‫ه‬‫سازند‬‫و‬‫توابع‬‫دیگر‬‫در‬‫این‬‫است‬‫که‬‫‌ها‬‫ه‬‫سازند‬‫‌تواند‬‫ی‬‫نم‬‫مقدار‬‫ب‬‫رگشت‬،‫دهند‬
‫بنابراین‬‫‌توانند‬‫ی‬‫نم‬‫نوع‬‫برگشتی‬‫داشته‬‫باشند‬(‫حتی‬void).ً‫ال‬‫معمو‬‫‌ها‬‫ه‬‫سازند‬‫بصورت‬public‫اعالن‬‫‌شود‬‫ی‬‫م‬.‫هر‬‫زمان‬‫که‬‫شی‬‫از‬‫روی‬‫یك‬‫کالس‬
‫ایجاد‬‌‫ی‬‫م‬‫کنیم‬‫اتوماتیك‬‫سازنده‬‫کالس‬‫اجرا‬‌‫ی‬‫م‬‫گردد‬.C#‫نیازمند‬‫فراخوانی‬‫یك‬‫سازنده‬‫برای‬‫هر‬‫شی‬‫است‬‫که‬‫ایجاد‬،‫‌شود‬‫ی‬‫م‬‫در‬‫چنین‬‫حالتی‬‫مطمئن‬
‫خواهیم‬‫بود‬‫که‬‫شی‬‫قبل‬‫از‬‫اینكه‬‫توسط‬‫برنامه‬‫بكار‬‫گرفته‬‫شود‬‫بدرستی‬‫مقداردهی‬‫اولیه‬‫شده‬‫است‬.‫فراخوانی‬‫سازنده‬‫به‬‫هنگام‬‫ایجاد‬‫ش‬،‫ی‬‫بصورت‬
‫غیرصریح‬‫یا‬‫ضمنی‬‫انجام‬‫‌شود‬‫ی‬‫م‬.‫در‬‫هر‬‫کالسی‬‫که‬‫بصورت‬‫صریح‬‫‌ای‬‫ه‬‫سازند‬‫را‬‫مشخص‬‫نكرده‬،‫است‬‫کامپایلر‬‫یك‬‫سازنده‬‫‌فرض‬‫ش‬‫پی‬‫تدا‬‫رك‬‫‌بیند‬‫ی‬‫م‬‫این‬
‫سازنده‬‫دارای‬‫پارامتر‬‫‌باشد‬‫ی‬‫نم‬.
‫تابع‌عضو‌سازنده‌و‌تابع‌عضو‌مخرب‬
•‫نابودکننده‬(‫مخرب‬)‫نوع‬‫دیگری‬‫از‬‫تابع‬‫عضو‬‫‌باشد‬‫ی‬‫م‬.‫نام‬
‫تابع‬‫مخرب‬‫یك‬‫کالس‬‫با‬‫کاراکتر‬‫مد‬(~)‫و‬‫نام‬‫کالس‬
‫مشخص‬‫‌شود‬‫ی‬‫م‬.‫مخرب‬‫یك‬‫کالس‬‫بصورت‬
‫ضمنی‬(‫غیرصریح‬)‫و‬‫در‬‫زمان‬‫از‬‫بین‬‫رفتن‬‫شی‬‫فراخوان‬‫ی‬
‫‌شود‬‫ی‬‫م‬.‫مخرب‬‫پارامتر‬‫دریافت‬‫‌کند‬‫ی‬‫نم‬‫و‬‫مقداری‬‫برگش‬‫ت‬
‫‌دهد‬‫ی‬‫نم‬‫و‬‫نمیتوان‬‫برای‬‫آن‬‫سطح‬‫دسترسی‬‫مشخص‬‫ک‬‫رد‬.
‫یك‬‫کالس‬‫‌تواند‬‫ی‬‫م‬‫فقط‬‫یك‬‫مخرب‬‫داشته‬‫باشد‬‫و‬
‫‌توان‬‫ی‬‫نم‬‫آن‬‫را‬‫سربارگذاری‬‫کرد‬.
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‌‫خصوصيت‌یا‬Property
(property‫یا‬‫خصوصیت‬)‫استانداردی‬‫در‬‫سی‬‫شارپ‬‫برای‬‫دسترسی‬‫به‬‫اعضای‬
‫‌ای‬‫ه‬‫داد‬‫با‬‫سطح‬‫دسترسی‬private‫در‬‫داخل‬‫یك‬‫کالس‬‌‫ی‬‫م‬‫باشد‬.‫هر‬property
‫دارای‬‫دو‬‫بخش‬‫است؛‬‫یك‬‫بخش‬‫جهت‬‫مقداردهی‬‫بلوك‬(set)‫و‬‫یك‬‫بخش‬‫برای‬
‫دسترسی‬‫به‬‫مقدار‬‫بلوك‬(get)‫یك‬‫داده‬private.property‫ها‬‫باید‬‫به‬‫صورت‬
public‫تعریف‬‫شوند‬‫تا‬‫در‬‫‌های‬‫س‬‫کال‬‫دیگر‬‫نیز‬‫قابل‬‫دسترسی‬‫باشند‬.
Property‫هایی‬‫که‬‫بدنه‬get‫ندارند‬Write-Only‫و‬‫آنهایی‬‫که‬‫بدنه‬set‫را‬‫ند‬‫ر‬‫ندا‬
Read-Only‫‌گوییم‬‫ی‬‫م‬.
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
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
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
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
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گاهی‬‫اوقات‬Property‫که‬‫تعریف‬‌‫ی‬‫م‬‫کنیم‬‫تنها‬‫عملیات‬‫خواندن‬‫و‬‫نوش‬‫تن‬
‫یك‬‫فیلد‬‫را‬‫کنترل‬‌‫ی‬‫م‬‫کند‬.‫برای‬،‫مثال‬‫کالس‬Person‫را‬‫در‬‫نظر‬‫بگیرید‬.
‫کد‬‫مربوط‬‫به‬‫خصوصیت‬‫باال‬‫را‬‌‫ی‬‫م‬‫توان‬‫به‬‫شكل‬‫مقابل‬‫نیز‬‫نوشت‬.‫کامپایلر‬
‫بعد‬‫از‬‫کامپایل‬‫کد‬،‫باال‬‫به‬‫صورت‬‫خودکار‬‫یك‬‫فیلد‬‫برای‬‫خاصیت‬‫ن‬‫وشته‬‫شده‬
‫تعریف‬‫کرده‬‫و‬‫بدنه‬get‫و‬set‫آن‬‫را‬‫به‬‫صورت‬‫خودکار‬‌‫ی‬‫م‬‫نویسد‬.‫از‬
‫مزایای‬Auto-Property‫ها‬‫حجم‬‫کد‬‫کمتر‬‫و‬‫البته‬‫قابلیت‬‫کنترل‬
‫دسترسی‬‫به‬‫عملیات‬‫خواندن‬‫و‬‫نوشتن‬Property‫ها‬‌‫ی‬‫م‬‫باشد‬.‫مثال‬‫باال‬‫را‬
‫به‬‫نحوی‬‫تغییر‬‌‫ی‬‫م‬‫دهیم‬‫که‬‫خاصیت‬FirstName‫تنها‬‫داخل‬‫کالس‬‫قابل‬
‫نوشتن‬‫باشد‬.‫به‬‫این‬‫نكته‬‫توجه‬‫داشته‬،‫باشید‬‫زمانی‬‫که‬‫از‬Auto-
Property‫ها‬‫استفاده‬‫‌کنید‬‫ی‬‫م‬‌ً‫ا‬‫حتم‬‫باید‬get‫و‬set‫را‬،‫بنویسید‬‫در‬‫غیر‬
‫اینصورت‬‫پیغام‬‫خطا‬‫دریافت‬‫خواهید‬‫کرد‬.‫البته‬‫این‬‫مشكل‬‫در‬‫نسخه‬6‫زبان‬
‫سی‬‫شارپ‬‫برطرف‬‫شده‬‫است‬.
‫ایجاد‬Automatic Properties
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫فضای‬‫نام‬‫یك‬‫ساختار‬‫سازمانی‬‫است‬‫که‬‫‌ها‬‫س‬‫کال‬‫را‬‫‌بندی‬‫ه‬‫دست‬‌‫ی‬‫م‬‫ک‬‫ند‬.‫به‬
‫عبارت‬‫دیگر‬‫‌ای‬‫ه‬‫منطق‬‫برای‬‫تعریف‬‫کردن‬‫‌هاست‬‫س‬‫کال‬.‫فضای‬‫نام‬‫به‬‫شما‬
‫کمك‬‌‫ی‬‫م‬‫کند‬‫که‬‫پایه‬‫و‬‫اساس‬‫کدهایتان‬‫را‬‫پیدا‬‫و‬‫درك‬‫کنید‬.‫فضای‬‫‌ها‬‫م‬‫نا‬
‫برای‬‫‌نویسی‬‫ه‬‫برنام‬‫سی‬‫شارپ‬‫ضروری‬،‫نیستند‬‫آنها‬ً‫ال‬‫معمو‬‫برای‬‫به‬‫بود‬
‫قابلیت‬‫فهم‬‫کد‬‫استفاده‬‌‫ی‬‫م‬‫شوند‬.‫بدون‬‫استفاده‬‫از‬‫فضای‬،‫نام‬‫تمام‬‫ی‬‫اسامی‬
‫مورد‬‫استفاده‬‫در‬‫برنامه‬‫سعی‬‌‫ی‬‫م‬‫کنند‬‫در‬‫یك‬‫فضای‬‫نام‬،‫کلی‬‫جایی‬‫برای‬
‫خود‬‫در‬‫نظر‬‫بگیرند‬‫که‬‫موجب‬‫برخورد‬‫بین‬‫اسامی‬‫یكسان‬‫‌شود‬‫ی‬‫م‬.‫ام‬‫ا‬‫اگر‬‫از‬
‫فضای‬‫‌های‬‫م‬‫نا‬‫‌ای‬‫ه‬‫جداگان‬‫استفاده‬،‫شود‬‫هیچ‬‫اشكالی‬‫در‬‫برنامه‬‫به‬‫وجو‬‫د‬
‫ن‬‌‫ی‬‫م‬‫آید‬.‫در‬‫واقع‬‫فضای‬‫نام‬‫برای‬‫تفكیك‬‫‌ای‬‫ه‬‫مجموع‬‫از‬‫اسامی‬‫از‬‫مجموعه‬
‫دیگر‬‫به‬‫کار‬‫می‬‫رود‬.
‫نام‬ ‫فضای‬Namespace
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫از‬‫مهمترین‬‫فضای‬‫‌های‬‫م‬‫نا‬‫موجود‬‫در‬‫کتابخ‬‫انه‬
.Net Framework‫فضای‬‫نام‬
System‫است‬.‫این‬‫فضای‬‫نام‬‫دارای‬‫فضای‬
‫‌های‬‫م‬‫نا‬‫دیگری‬‫در‬‫داخل‬‫خود‬‫‌باشد‬‫ی‬‫م‬.‫به‬
‫عنوان‬‫مثال‬Sysytem.IO‫که‬‫حاوی‬
‫‌هایی‬‫س‬‫کال‬‫برای‬‫کار‬‫با‬‫ورودی‬‫و‬‫خروجی‬‫و‬
‫کار‬‫با‬‫‌ها‬‫ل‬‫فای‬‌‫ی‬‫م‬‫باشد‬.
‫در‬ ‫موجود‬ ‫نام‬ ‫فضای‬ ‫نمونه‬ ‫چند‬C#
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
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
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‌‫آشنایي‌با‌مفاهيم‌نوع‬‫داده‬‫شمارشي‌یا‬Enum
‫نوع‬‫داده‬‫شمارشی‬‫یا‬Enum‫جهت‬‫تعریف‬‫مقادیر‬‫ثابت‬‫و‬‫قابل‬‫شمارش‬‫در‬‫برنامه‬‫بسی‬‫ار‬
‫کاربرد‬‫دارد‬.‫مقادیری‬‫که‬‫در‬‫این‬‫نوع‬‫داده‬‫تعریف‬‫‌شوند‬‫ی‬‫م‬‫بطور‬‫خودکار‬‫از‬‫عدد‬0‫شماره‬
‫گذاری‬‫‌شوند‬‫ی‬‫م‬‫و‬‫به‬‫ترتیب‬‫یكی‬‫به‬‫‌ها‬‫ن‬‫آ‬‫اضافه‬‫‌شود‬‫ی‬‫م‬.
‫در‬‫این‬‫حالت‬‫متد‬)(ToString‫برای‬‫نوع‬‫‌ای‬‫ه‬‫داد‬Enum‫عنوان‬‫مقادیر‬‫ثابت‬‫را‬‫بر‬
‫‌گرداند‬‫ی‬‫م‬.
‫روش‬‫عرف‬‫برای‬‫نمایش‬‫مقدار‬‫عددی‬‫استفاده‬‫از‬‫تبدیل‬‫نوع‬‫صریح‬‫به‬int‫است‬.
‫جهت‬‫تغيير‬‫شماره‬‫مقادیر‬‫کافيست‬‫بصورت‬‫زیر‬‫عمل‬‫کنيم‬:
enum TypesOfColo
{
Black=-5,
Green=20,
White,
Red,
Blue
}
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‌‫آشنایي‌با‬‌‌‫ه‬‫کلم‬‌‫کليدی‬static
‫گاهی‬‫نیاز‬‫دارید‬‫که‬‫اعضای‬‫یك‬‫کالس‬‫به‬‫هیچ‬‫شی‬‫ئ‬‫ی‬‫وابسته‬‫نباشن‬‫د‬.‫‌طور‬‫ه‬‫ب‬
‫معمول‬‫اعضای‬‫کالس‬‫از‬‫طریق‬‫شیئی‬‫که‬‫از‬‫آن‬‫کالس‬‫ساخته‬‫‌شود‬‫ی‬‫م‬‫قاب‬‫ل‬
‫دسترسی‬‫هستند‬‫اما‬‫شما‬‫‌توانید‬‫ی‬‫م‬‫عضوی‬‫از‬‫کالس‬‫را‬‫طوری‬‫تعریف‬‫ک‬‫نید‬‫که‬
‫بدون‬‫ساخت‬‫هیچ‬‫شیئی‬ً‫ا‬‫مستقیم‬(‫از‬‫طریق‬‫نام‬‫کالس‬‫و‬‫عملگر‬‫نقطه‬)‫به‬‫آن‬
‫دسترسی‬‫داشته‬‫باشید‬.‫برای‬‫ساخت‬‫چنین‬،‫عضوی‬‫قبل‬‫از‬‫تعریف‬‫آن‬‫عضو‬‫از‬
‫‌کلیدی‬‫ی‬‌‫ه‬‫کلم‬static‫استفاده‬‫‌کنید‬‫ی‬‫م‬.‫هنگامی‬‫که‬‫عضوی‬‫از‬‫یك‬‫کالس‬
‫‌صورت‬‫ه‬‫ب‬static‫تعریف‬،‫‌شود‬‫ی‬‫م‬‫آن‬‫عضو‬‫بدون‬‫ساخت‬‫هیچ‬object‫ای‬‫از‬
‫کالس‬‫قابل‬‫دسترسی‬‫و‬‫در‬‫واقع‬‫مستقل‬‫از‬‫اشیاء‬‫است‬‫و‬‫به‬‫هیچ‬‫شیئ‬‫ی‬‫از‬‫آن‬
‫کالس‬‫وصل‬‫‌شود‬‫ی‬‫نم‬.‫شما‬‫‌توانید‬‫ی‬‫م‬‫هم‬‫متدها‬‫و‬‫هم‬‫متغیرها‬‫را‬‫‌صورت‬‫ه‬‫ب‬
static‫تعریف‬‫کنید‬.‫به‬‫عنوان‬‫مثال‬‫متد‬show‫از‬‫کالس‬
MessageBox‫یك‬‫متد‬‫استاتیك‬‫‌باشد‬‫ی‬‫م‬.
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫اجزاء‌داده‬‌‫ای‬static
‫اعضای‬static‫در‬‫حقیقت‬‫اعضایی‬‫هستند‬‫که‬‫وابسته‬‫به‬‫شئ‬‫نیستن‬‫د‬‫و‬‫در‬
‫بین‬‫کل‬‫اشیاء‬‫ساخته‬‫شده‬‫از‬‫یك‬‫کالس‬‫مشترك‬‫‌باشند‬‫ی‬‫م‬.‫یعنی‬‫ب‬‫ه‬‫ازای‬‫هر‬
‫شئ‬‫مقدار‬‫متفاوتی‬،‫ندارند‬‫چون‬‫وابسته‬‫به‬‫شئ‬‫نیستند‬.
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
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
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
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
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
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
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫انواع‌روش‌ارسال‌پارامتر‌به‌متد‬
۱.‫روش‬‫ارسال‬‫با‬‫مقدار‬Pass by value
‫در‬‫این‬‫روش‬‫در‬‫پارامترهای‬‫تابع‬‫متغیرهای‬‫معمولی‬‫تعریف‬‫‌کنیم‬‫ی‬‫م‬‫و‬‫در‬‫زمان‬
‫فراخوانی‬‫مقادیر‬‫ثابت‬‫یا‬‫اسامی‬‫متغیرهایی‬‫از‬‫فراخواننده‬‫را‬‫به‬‫عنوان‬‫آرگومان‬‫ب‬‫ه‬
‫پارامترهای‬‫متد‬‫ارسال‬‫‌کنیم‬‫ی‬‫م‬.‫هر‬‫تغییری‬‫برروی‬‫پارامترها‬‫در‬‫بد‬‫ن‬‫ه‬‫متد‬‫هیچ‬‫تأثیری‬
‫برروی‬‫آرگومانهای‬‫فراخواننده‬‫ندارد‬‫و‬‫آرگومانها‬‫تنها‬‫به‬‫عنوان‬‫مقدار‬‫اولیه‬‫پارامت‬‫رها‬‫در‬
‫نظر‬‫گرفته‬‫‌شوند‬‫ی‬‫م‬.‫در‬‫این‬‫شكل‬‫ارسال‬‫پارامترها‬‫تنها‬‫به‬‫عنوان‬‫ورودی‬‫در‬‫نظ‬‫ر‬‫گرفته‬
‫می‬‫شوند‬.‫ارسال‬‫به‬‫روش‬pass by value‫به‬‫صورت‬‫پیش‬‫فرض‬‫‌باشد‬‫ی‬‫م‬.
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫انواع‌روش‌ارسال‌پارامتر‌به‌متد‬
۲.‫روش‬‫ارسال‬‫پارامتر‬‫با‬‫ارجاع‬Pass by reference
‫وقتی‬‫متغیری‬‫را‬‫به‬‫صورت‬ref‫به‬‫یك‬‫تابع‬‫ارسال‬،‫‌کنیم‬‫ی‬‫م‬‫مقدار‬‫متغیر‬
‫ارسال‬‫‌شود‬‫ی‬‫نم‬‫بلكه‬‫آدرس‬‫متغیر‬‫به‬‫بدنه‬‫متد‬‫فرستاده‬‫‌شود‬‫ی‬‫م‬‫و‬‫هر‬‫ت‬‫غییری‬
‫در‬‫متغیر‬‫محلی‬‫برروی‬‫متغیر‬‫اصلی‬‫نیز‬‫اعمال‬‫‌شود‬‫ی‬‫م‬.‫به‬‫این‬‫نوع‬‫پار‬‫مترها‬
‫ارجاعی‬‫‌گویند‬‫ی‬‫م‬.
‌‫هر‌تغییری‌برروی‌پارامترها‌در‌بدنه‌متد‬‌‫برروی‬‫‌ها‌در‌فراخوانند‬‫ن‬‫آرگوما‬‌‌‫ه‬
‌‫اعمال‬‫می‌شود‬.
‌‫نوشتن‌کلمه‌کلیدی‬ref‌‫هم‌درپشت‌آرگومان‌در‌زمان‬‌‫ارسال‌به‬‌‫متد‌و‌هم‬
‌‫در‌پشت‌تعریف‌پارامتر‌در‌متد‬‫‌باشد‬‫ی‬‫الزامی‌م‬.
‌‫آرگومانی‌که‌به‌این‬‌‫روش‌به‌متد‌ارسال‬‌‫‌شود‌باید‬‫ی‬‫م‬‌‫مقداردهی‬‫اولیه‌ش‬‌‫ده‬
‫باشد‬.
‌‫در‌این‬‌‫روش‌پارامترها‌به‬‌‫عنوان‬‌‫هم‌ورودی‌و‌هم‌خروجی‬‌‫در‌نظر‌گرفته‬
‫‌شوند‬‫ی‬‫م‬.
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫انواع‌روش‌ارسال‌پارامتر‌به‌متد‬
3.‫روش‬‫ارسال‬‫پارامتر‬‫به‬‫عنوان‬‫تنها‬‫خروجی‬‫با‬‫کلمه‬‫کلیدی‬out
‫این‬‫شیوه‬‫ارسال‬‫هم‬‫به‬‫صورت‬‫ارجاعی‬‫‌باشد‬‫ی‬‫م‬.‫این‬‫پارامترها‬‫زمانی‬‫استف‬‫اده‬
‫‌شود‬‫ی‬‫م‬‫که‬‫قصد‬‫ارسال‬‫اطالعاتی‬‫به‬‫متد‬‫را‬‫نداشته‬،‫باشیم‬‫بلكه‬‫‌خ‬‫ی‬‫م‬‫واهیم‬
‫اطالعات‬‫از‬‫متد‬‫برگردد‬.
‫نیازی‬‫به‬‫مقداردهی‬‫قبل‬‫از‬‫ارسال‬‫به‬‫متد‬‫نیست‬‫ولی‬ً‫ا‬‫حتم‬‫باید‬‫درون‬‫م‬‫تد‬
(‫قبل‬‫از‬‫بازگشت‬‫به‬‫متدی‬‫فراخوانی‬‫شده‬)‫مقدار‬‫بگیرد‬.
‫در‬‫این‬‫روش‬‫پارامترها‬‫تنها‬‫به‬‫عنوان‬‫خروجی‬‫در‬‫نظر‬‫گرفته‬‌‫ی‬‫م‬‫شوند‬.
‫استفاده‬‫از‬ref‫و‬out‫تنها‬‫به‬‫فرستادن‬value type‫ها‬‫محدود‬‫‌شود‬‫ی‬‫نم‬
‫بلكه‬‫هنگام‬‫فرستادن‬reference type‫نیز‬‫‌توانند‬‫ی‬‫م‬‫مورد‬‫استفاده‬‫قرار‬
‫گیرد‬.
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
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
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
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
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
faradars.org/fvcs9404
‌‫کالس‌های‌بخشي‌یا‬partial
‫با‬‫استفاده‬‫از‬‫کلمه‬‫کلیدی‬partial‌‫ی‬‫م‬‫توانید‬‫اجزاء‬‫یك‬‫کالس‬‫را‬‫در‬‫دو‬‫یا‬‫بیشتر‬‫از‬‫دو‬‫فای‬‫ل‬
‫جداگانه‬‫قرار‬‫دهید‬.‫مشروط‬‫بر‬‫اینكه‬‫فضای‬‫نام‬‫همه‬‫فایل‬‫ها‬‫یكسان‬‫باشد‬.
‫مزایای‬‫استفاده‬‫از‬‫کالس‬‫های‬partial:
۱-‫افزایش‬‫خوانایی‬‫در‬‫‌های‬‫س‬‫کال‬‫بسیار‬‫زیادی‬‫است‬.
۲-‫اگر‬‫شما‬‫برروی‬‫کالس‬‫‌ای‬‫ه‬‫پیچید‬‫کار‬‫‌کنید‬‫ی‬‫م‬‫براحتی‬‫‌توانید‬‫ی‬‫م‬‫آن‬‫را‬‫بین‬‫چند‬‫نفر‬
‫تقسیم‬‫کنید‬‫و‬‫هر‬‫کدام‬‫از‬‫افراد‬‫در‬‫فایلی‬‫جداگانه‬‫کدهای‬‫کالس‬‫خود‬‫را‬‫‌نویسد‬‫ی‬‫م‬.
3-‫شما‬‫براحتی‬‫‌توانید‬‫ی‬‫م‬‫‌هایی‬‫ن‬‫مكا‬‫که‬‫برخی‬‫کدها‬‫بصورت‬‫اتوماتیك‬‫تولید‬‫م‬،‫‌شوند‬‫ی‬
‫مثل‬‫کد‬‫‌های‬‫م‬‫فر‬‫تحت‬‫ویندوز‬(Windows Forms, Web Service)،‫را‬‫از‬
‫کدهایی‬‫که‬‫بصورت‬‫دستی‬‫‌نویسید‬‫ی‬‫م‬‫تفكیك‬‫کنید‬.‫در‬‫نتیجه‬‫اعمال‬‫تغییرات‬‫بسیار‬‫راحت‬
‫تر‬‫‌شود‬‫ی‬‫م‬.‫بطور‬‫مثال‬‫وقتی‬‫یك‬‫فرم‬‫ویندوزی‬‫ایجاد‬‫‌کنیم‬‫ی‬‫م‬‫قسمت‬‫کدی‬‫که‬‫توس‬‫ط‬
Designer‫نوشته‬‫‌شود‬‫ی‬‫م‬‫و‬‫مربوط‬‫به‬‫ظاهر‬‫فرم‬‫هست‬‫در‬‫فایلی‬‫جداگانه‬‫وجود‬‫دارد‬‫ک‬‫ه‬
‫باعث‬‫‌شود‬‫ی‬‫م‬‫کدی‬‫که‬‫ما‬‫می‬‫نویسیم‬‫از‬‫آن‬‫کد‬‫جدا‬‫باشد‬‫و‬‫خواناتر‬‫باشد‬.
4-‫در‬‫تعریف‬‫‌ها‬‫س‬‫کال‬‫‌توانیم‬‫ی‬‫م‬‫بخش‬‫از‬‌‫ا‬‫‌ه‬‫س‬‫کال‬‫که‬‫دارای‬‫خصوصیات‬private‫است‬
‫را‬‫از‬‫بخشی‬‫که‬‫دارای‬‫خصوصیات‬public‫است‬‫تفكیك‬‫کنیم‬.‫این‬‫کار‬‫به‬‫خوانایی‬‫و‬‫روان‬
‫فهمیدن‬‫کالس‬‫کمك‬‫فراوانی‬‫‌کند‬‫ی‬‫م‬.
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬
‫شارپ‬ ‫سی‬ ‫در‬
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
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ
آموزش جامع شی گرایی در سی شارپ

Más contenido relacionado

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

آموزش برنامه نویسی R و نرم افزار R Studio بخش چهارم | فرادرس
 آموزش برنامه نویسی R و نرم افزار R Studio بخش چهارم | فرادرس آموزش برنامه نویسی R و نرم افزار R Studio بخش چهارم | فرادرس
آموزش برنامه نویسی R و نرم افزار R Studio بخش چهارم | فرادرس
faradars
 
آموزش طراحی قالب های پلاستیک با نرم افزار اینونتور (Inventor)
آموزش طراحی قالب های پلاستیک با نرم افزار اینونتور (Inventor)آموزش طراحی قالب های پلاستیک با نرم افزار اینونتور (Inventor)
آموزش طراحی قالب های پلاستیک با نرم افزار اینونتور (Inventor)
faradars
 
آموزش برنامه نویسی R و نرم افزار R Studio بخش پنجم | فرادرس
 آموزش برنامه نویسی R و نرم افزار R Studio بخش پنجم | فرادرس آموزش برنامه نویسی R و نرم افزار R Studio بخش پنجم | فرادرس
آموزش برنامه نویسی R و نرم افزار R Studio بخش پنجم | فرادرس
faradars
 

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

آموزش برنامه نویسی به زبان ویژوال بیسیک دات نت
آموزش برنامه نویسی به زبان ویژوال بیسیک دات نتآموزش برنامه نویسی به زبان ویژوال بیسیک دات نت
آموزش برنامه نویسی به زبان ویژوال بیسیک دات نت
 
آموزش برنامه نویسی R و نرم افزار R Studio بخش چهارم | فرادرس
 آموزش برنامه نویسی R و نرم افزار R Studio بخش چهارم | فرادرس آموزش برنامه نویسی R و نرم افزار R Studio بخش چهارم | فرادرس
آموزش برنامه نویسی R و نرم افزار R Studio بخش چهارم | فرادرس
 
آموزش طراحی قالب های پلاستیک با نرم افزار اینونتور (Inventor)
آموزش طراحی قالب های پلاستیک با نرم افزار اینونتور (Inventor)آموزش طراحی قالب های پلاستیک با نرم افزار اینونتور (Inventor)
آموزش طراحی قالب های پلاستیک با نرم افزار اینونتور (Inventor)
 
آموزش برنامه نویسی R و نرم افزار R Studio بخش پنجم | فرادرس
 آموزش برنامه نویسی R و نرم افزار R Studio بخش پنجم | فرادرس آموزش برنامه نویسی R و نرم افزار R Studio بخش پنجم | فرادرس
آموزش برنامه نویسی R و نرم افزار R Studio بخش پنجم | فرادرس
 
آموزش دیتاگارد در اوراکل
آموزش دیتاگارد در اوراکلآموزش دیتاگارد در اوراکل
آموزش دیتاگارد در اوراکل
 
ارزیابی ریسک به روش هازوپ
ارزیابی ریسک به روش هازوپ ارزیابی ریسک به روش هازوپ
ارزیابی ریسک به روش هازوپ
 
programing.pptx
programing.pptxprograming.pptx
programing.pptx
 
Sharding
ShardingSharding
Sharding
 
آموزش شبیه سازی مدارات الکتریکی با OrCAD
آموزش شبیه سازی مدارات الکتریکی با OrCADآموزش شبیه سازی مدارات الکتریکی با OrCAD
آموزش شبیه سازی مدارات الکتریکی با OrCAD
 
آموزش تحقیق در عملیات (برنامه ریزی خطی) - بخش یکم
آموزش تحقیق در عملیات (برنامه ریزی خطی) - بخش یکمآموزش تحقیق در عملیات (برنامه ریزی خطی) - بخش یکم
آموزش تحقیق در عملیات (برنامه ریزی خطی) - بخش یکم
 
آموزش سیستم های عامل - بخش ششم
آموزش سیستم های عامل - بخش ششمآموزش سیستم های عامل - بخش ششم
آموزش سیستم های عامل - بخش ششم
 
Java programming languages
Java programming languagesJava programming languages
Java programming languages
 
Navid Conference - 1394 - Shiraz, Iran
Navid Conference - 1394 - Shiraz, IranNavid Conference - 1394 - Shiraz, Iran
Navid Conference - 1394 - Shiraz, Iran
 
اسلاید وبینار آشنایی با اسپارک - Introduction to Apache Spark in Persian
اسلاید وبینار آشنایی با اسپارک - Introduction to Apache Spark in Persianاسلاید وبینار آشنایی با اسپارک - Introduction to Apache Spark in Persian
اسلاید وبینار آشنایی با اسپارک - Introduction to Apache Spark in Persian
 
Cyber space and timeless opportunity - mohsen amiri fakhr مقاله فضای مجازی و...
Cyber space and timeless opportunity  - mohsen amiri fakhr مقاله فضای مجازی و...Cyber space and timeless opportunity  - mohsen amiri fakhr مقاله فضای مجازی و...
Cyber space and timeless opportunity - mohsen amiri fakhr مقاله فضای مجازی و...
 
آموزش ذخیره و بازیابی اطلاعات - درس پنجم
آموزش ذخیره و بازیابی اطلاعات - درس پنجمآموزش ذخیره و بازیابی اطلاعات - درس پنجم
آموزش ذخیره و بازیابی اطلاعات - درس پنجم
 
آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش چهارم
آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش چهارمآموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش چهارم
آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش چهارم
 
راهکارهای طراحی نرم افزار ها محب الله امان
راهکارهای طراحی نرم افزار ها   محب الله امانراهکارهای طراحی نرم افزار ها   محب الله امان
راهکارهای طراحی نرم افزار ها محب الله امان
 
آموزش ورکینگ مدل
آموزش ورکینگ مدلآموزش ورکینگ مدل
آموزش ورکینگ مدل
 
agil software managment by scrunm in tfs
agil software managment by scrunm in tfsagil software managment by scrunm in tfs
agil software managment by scrunm in tfs
 

Más de faradars

Más de faradars (20)

آموزش فیزیک الکتریسیته - فصل ششم تا نهم
آموزش فیزیک الکتریسیته - فصل ششم تا نهمآموزش فیزیک الکتریسیته - فصل ششم تا نهم
آموزش فیزیک الکتریسیته - فصل ششم تا نهم
 
آموزش فیزیک الکتریسیته - فصل یکم تا پنجم
آموزش فیزیک الکتریسیته - فصل یکم تا پنجمآموزش فیزیک الکتریسیته - فصل یکم تا پنجم
آموزش فیزیک الکتریسیته - فصل یکم تا پنجم
 
آموزش ذخیره و بازیابی اطلاعات - درس دهم
آموزش ذخیره و بازیابی اطلاعات - درس دهمآموزش ذخیره و بازیابی اطلاعات - درس دهم
آموزش ذخیره و بازیابی اطلاعات - درس دهم
 
آموزش ذخیره و بازیابی اطلاعات - درس نهم
آموزش ذخیره و بازیابی اطلاعات - درس نهمآموزش ذخیره و بازیابی اطلاعات - درس نهم
آموزش ذخیره و بازیابی اطلاعات - درس نهم
 
آموزش ذخیره و بازیابی اطلاعات - درس هشتم
آموزش ذخیره و بازیابی اطلاعات - درس هشتمآموزش ذخیره و بازیابی اطلاعات - درس هشتم
آموزش ذخیره و بازیابی اطلاعات - درس هشتم
 
آموزش ذخیره و بازیابی اطلاعات - درس هفتم
آموزش ذخیره و بازیابی اطلاعات - درس هفتمآموزش ذخیره و بازیابی اطلاعات - درس هفتم
آموزش ذخیره و بازیابی اطلاعات - درس هفتم
 
آموزش ذخیره و بازیابی اطلاعات - درس ششم
آموزش ذخیره و بازیابی اطلاعات - درس ششمآموزش ذخیره و بازیابی اطلاعات - درس ششم
آموزش ذخیره و بازیابی اطلاعات - درس ششم
 
آموزش ذخیره و بازیابی اطلاعات - درس چهارم
آموزش ذخیره و بازیابی اطلاعات - درس چهارمآموزش ذخیره و بازیابی اطلاعات - درس چهارم
آموزش ذخیره و بازیابی اطلاعات - درس چهارم
 
آموزش ذخیره و بازیابی اطلاعات - درس سوم
آموزش ذخیره و بازیابی اطلاعات - درس سومآموزش ذخیره و بازیابی اطلاعات - درس سوم
آموزش ذخیره و بازیابی اطلاعات - درس سوم
 
آموزش ذخیره و بازیابی اطلاعات - درس دوم
آموزش ذخیره و بازیابی اطلاعات - درس دومآموزش ذخیره و بازیابی اطلاعات - درس دوم
آموزش ذخیره و بازیابی اطلاعات - درس دوم
 
آموزش ذخیره و بازیابی اطلاعات - درس یکم
آموزش ذخیره و بازیابی اطلاعات - درس یکمآموزش ذخیره و بازیابی اطلاعات - درس یکم
آموزش ذخیره و بازیابی اطلاعات - درس یکم
 
آموزش ترمودینامیک ۲ بخش سوم
آموزش ترمودینامیک ۲ بخش سومآموزش ترمودینامیک ۲ بخش سوم
آموزش ترمودینامیک ۲ بخش سوم
 
آموزش ترمودینامیک ۲ بخش هشتم
آموزش ترمودینامیک ۲ بخش هشتمآموزش ترمودینامیک ۲ بخش هشتم
آموزش ترمودینامیک ۲ بخش هشتم
 
آموزش ترمودینامیک ۲ بخش دوم
آموزش ترمودینامیک ۲ بخش دومآموزش ترمودینامیک ۲ بخش دوم
آموزش ترمودینامیک ۲ بخش دوم
 
آموزش ترمودینامیک ۲ بخش هفتم
آموزش ترمودینامیک ۲ بخش هفتمآموزش ترمودینامیک ۲ بخش هفتم
آموزش ترمودینامیک ۲ بخش هفتم
 
آموزش ترمودینامیک ۲ بخش ششم
آموزش ترمودینامیک ۲ بخش ششمآموزش ترمودینامیک ۲ بخش ششم
آموزش ترمودینامیک ۲ بخش ششم
 
آموزش ترمودینامیک ۲ بخش اول
آموزش ترمودینامیک ۲ بخش اولآموزش ترمودینامیک ۲ بخش اول
آموزش ترمودینامیک ۲ بخش اول
 
آموزش ترمودینامیک ۲ بخش پنجم
آموزش ترمودینامیک ۲ بخش پنجمآموزش ترمودینامیک ۲ بخش پنجم
آموزش ترمودینامیک ۲ بخش پنجم
 
آموزش ترمودینامیک ۲ بخش چهارم
آموزش ترمودینامیک ۲ بخش چهارمآموزش ترمودینامیک ۲ بخش چهارم
آموزش ترمودینامیک ۲ بخش چهارم
 
آموزش نرم افزار Comsol Multiphysics برای تحلیل مسائل مکانیک سیالات و جامدات ب...
آموزش نرم افزار Comsol Multiphysics برای تحلیل مسائل مکانیک سیالات و جامدات ب...آموزش نرم افزار Comsol Multiphysics برای تحلیل مسائل مکانیک سیالات و جامدات ب...
آموزش نرم افزار Comsol Multiphysics برای تحلیل مسائل مکانیک سیالات و جامدات ب...
 

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

  • 1. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫جامع‬ ‫آموزش‬‫شیئ‬‫شارپ‬ ‫سی‬ ‫در‬ ‫گرایی‬ ‫مدرس‬: ‫شجاعی‬ ‫رشید‬ ‫افزار‬ ‫نرم‬ ‫گرایش‬ ‫کامپیوتر‬ ‫ارشد‬ ‫کارشناس‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 2. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫مفاهیم‬‫برنامه‬‫نویسی‬‫شی‬‫گرا‬: •‫کالس‬‫ها‬‫و‬‫اشیاء‬ •‫تعیین‬‫کننده‬‫های‬‫دسترسی‬ •‫کپسوله‬‫سازی‬ •‫وراثت‬ •‫واسط‬ •‫چندریختی‬ •‫خالصه‬‫سازی‬‫و‬‫تجرد‬ •‫کالس‬‫های‬‫انتزاعی‬ OOP: Object Oriented Programming ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 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. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫فرض‬‫کنید‬‫خواهیم‬‫یك‬‫کالس‬‫برای‬‫اشی‬‫ایی‬ ‫از‬‫نوع‬‫مستطیل‬‫ایجاد‬‫کنیم‬.‫برای‬‫یك‬ ‫مستطیل‬‫‌توانیم‬‫ی‬‫م‬‫اجزاء‬‫‌ای‬‫ه‬‫داد‬‫همانند‬ ‫طول‬‫و‬‫عرض‬‫در‬‫نظر‬‫بگیریم‬.‫همچنین‬ ‫‌توانیم‬‫ی‬‫م‬‫متدها‬‫یا‬‫همان‬‫اجزاء‬‫تابعی‬‫همان‬‫ند‬ ‫تنظیم‬‫کردن‬‫عرض‬‫و‬‫طو‬‫ل‬‫و‬‫همچنین‬ ‫محاسبه‬‫محیط‬‫در‬‫نظر‬‫بگیریم‬. ‫مثال‬‌:‫ایجاد‌یک‌کالس‌برای‌مستطيل‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 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. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ 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. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫شکل‌کلي‌ایجاد‌کردن‌اجزاء‌تابعي‌یا‌متد‌های‌کالس‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 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. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫در‬‫شكل‬‫مقابل‬‫شی‬‫بنام‬myrect‫از‬‫روی‬ ‫کالس‬Rectangle‫ایجاد‬‫شده‬. ‫شکل‌کلي‌ایجاد‌کردن‌یک‌شي‌از‌روی‌کالس‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 10. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫تمام‬‫اشیائی‬‫که‬‫از‬‫روی‬‫یك‬‫کالس‬‫ایجاد‬ ‌‫ی‬‫م‬‫شوند‬‫بطور‬‫اختصاصی‬‫حاوی‬‫تمام‬‫اجزاء‬ ‫کالس‬‫مذکور‬‫هستند‬. ‫تعریف‌اشياء‬ Rectangle myrect1 = new Rectangle(); Rectangle myrect2 = new Rectangle(); ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 11. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫در‬‫صورتیكه‬‫از‬‫دستور‬new‫در‬‫تعریف‬‫کردن‬ ‫اشیاء‬‫استفاده‬‫نكنیم‬‫شی‬‫ایجاد‬‫ن‬‌‫ی‬‫م‬‫ش‬،‫ود‬ ‫بلكه‬‫تنها‬‫یك‬‫مرجع‬‫یا‬‫همان‬‫اشاره‬‫گر‬‫ایج‬‫اد‬ ‌‫ی‬‫م‬‫شود‬.‫بنابراین‬‫مطابق‬‫شكل‬‌‫ی‬‫م‬‫توان‬ ‫تعریف‬‫شی‬‫را‬‫در‬‫دو‬‫مرحله‬‫انجام‬‫داد‬. ‫ایجاد‌کردن‌اشاره‌گر‌یا‌همان‌مرجع‌به‌اشياء‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 12. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫در‬‫صورتیكه‬‫از‬‫دستور‬new‫در‬‫تعریف‬ ‫کردن‬‫اشیاء‬‫استفاده‬،‫نكنیم‬‫شی‬‫ایجاد‬ ‫ن‬‌‫ی‬‫م‬‫شود‬‫بلكه‬‫تنها‬‫یك‬‫مرجع‬‫یا‬‫همان‬ ‫اشاره‬‫گر‬‫ایجاد‬‌‫ی‬‫م‬‫شود‬‫که‬‌‫ی‬‫م‬‫تواند‬‫به‬‫ش‬‫ئی‬ ‫که‬‫قبال‬‫ایجاد‬‫شده‬‫نسبت‬‫داده‬‫شود‬‫و‬‫ب‬‫ه‬ ‫عنوان‬‫نام‬‫دوم‬‫شی‬‫مذکور‬‫در‬‫نظر‬‫گرفته‬ ‫شود‬. ‫نسبت‌دادن‌یک‌مرجع‌به‌یک‌شي‌موجود‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 13. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫برای‬‫فراخوانی‬‫متدها‬‫ابتدا‬‫نام‬،‫شی‬‫عالم‬‫ت‬ ‫نقطه‬‫و‬‫سپس‬‫نام‬‫متد‬‫را‬‌‫ی‬‫م‬‫نویسیم‬‫و‬‫م‬‫قادیر‬ ‫مناسب‬‫را‬‫به‬‫عنوان‬‫آرگومان‬‫های‬‫مورد‬‫نیاز‬ ‫به‬‫متدها‬‫ارسال‬‌‫ی‬‫م‬‫کنیم‬. ‫نحوه‌فراخواني‌اجزاء‌تابعي‌کالس‌یا‌همان‌متدها‬ Rectangle R1 = new Rectangle(); ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 14. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‫فراخواني‌متد‬getlength‌‫برای‌شي‬R1Rectangle R1 = new Rectangle(); ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 15. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫ما‬‫در‬‫دنیایی‬‫از‬‫اشیاء‬‫زندگی‬‫‌کنیم‬‫ی‬‫م‬.‫کافیست‬‫نگاهی‬‫به‬‫اطراف‬‫خود‬‫بیانداز‬‫یم‬.‫اطراف‬ ‫ما‬‫پر‬‫است‬‫از‬،‫‌ها‬‫ل‬‫اتومبی‬،‫هواپیماها‬،‫‌ها‬‫ن‬‫انسا‬،‫حیوانات‬،‫‌ها‬‫ن‬‫ساختما‬‫‌های‬‫غ‬‫چرا‬‫ترافیك‬، ،‫باالبرها‬‫و‬‫بسیاری‬‫از‬‫چیزهای‬‫دیگر‬.‫قبل‬‫از‬‫اینكه‬‫‌های‬‫ن‬‫زبا‬‫‌نویسی‬‫ه‬‫برنام‬‫‌گ‬‌‫ی‬‫ش‬‫را‬‫ابداع‬ ،‫شوند‬‫‌های‬‫ن‬‫زبا‬‫‌نویسی‬‫ه‬‫برنام‬(‫همانند‬FORTRAN،Pascal،C‫و‬Basic)‫بر‬‫روی‬ ‫اعمال‬‫یا‬actions‫بجای‬‫چیزها‬‫یا‬‫اشیاء‬‫تمرکز‬‫داشتند‬.‫با‬‫اینكه‬‫‌نویسان‬‫ه‬‫برنام‬‫د‬‫ر‬‫دنیائی‬ ‫از‬‫اشیاء‬‫زندگی‬‫‌کردند‬‫ی‬‫م‬‫اما‬‫با‬‫افعال‬‫سرگرم‬‫بودند‬.‫خود‬‫همین‬‫تناقض‬‫باعث‬‫ش‬‫د‬‫تا‬ ‫‌های‬‫ه‬‫برنام‬‫نوشته‬‫شده‬‫از‬‫قدرت‬‫کافی‬‫برخوردار‬‫نباشند‬.‫هم‬‫اکنون‬‫که‬‫‌های‬‫ن‬‫زبا‬ ‫‌نویسی‬‫ه‬‫برنام‬‫‌گرا‬‌‫ی‬‫ش‬‫همانند‬C#‫و‬Java‫در‬‫دسترس‬،‫هستند‬‫‌نویسان‬‫ه‬‫برنام‬‫به‬‫زندگی‬ ‫خود‬‫در‬‫یك‬‫دنیای‬‫‌گرا‬‌‫ی‬‫ش‬‫ادامه‬‫‌دهند‬‫ی‬‫م‬‫و‬‫‌توانند‬‫ی‬‫م‬‫‌های‬‫ه‬‫برنام‬‫خود‬‫را‬‫با‬‫اسلوب‬ ‫‌گرا‬‌‫ی‬‫ش‬‫بنویسند‬.‫فرآیند‬‫‌نویسی‬‫ه‬‫برنام‬‫‌گرا‬‌‫ی‬‫ش‬‫در‬‫مقایسه‬‫با‬‫‌نویسی‬‫ه‬‫برنام‬ ‫روالی‬(procedural)‫ماهیت‬‫بسیار‬‫‌تری‬‫ی‬‫طبیع‬‫دارد‬‫و‬‫نتیجه‬‫آن‬‫هم‬‫رضایت‬‫بخش‬‫‌تر‬ ‫است‬. ‫برنامه‌نویسی‌شی‬‌‫گرا‬Object Oriented Programming ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 16. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫اشیاء‬‫چه‬‫هستند‬‫و‬‫چرا‬‫خاص‬‫‌باشند؟‬‫ی‬‫م‬‫در‬‫واقع‬ ‫تكنولوژی‬،‫شی‬‫یك‬‫الگوی‬‫بسته‬(package)‫است‬‫که‬ ‫به‬‫ما‬‫در‬‫ایجاد‬‫واحدهای‬‫‌افزاری‬‫م‬‫نر‬‫با‬‫معنی‬‫کمك‬ ‫‌کند‬‫ی‬‫م‬.‫اشیاء‬‫تمرکز‬‫زیادی‬‫بر‬‫نواحی‬‫خاص‬‫‌ه‬‫ه‬‫برنام‬‫ا‬ ‫دارند‬.‫اشیاء‬‫‌توانند‬‫ی‬‫م‬‫از‬‫جمله‬‫اشیاء‬،‫تاریخ‬،‫زمان‬ ،‫پرداخت‬،‫فاکتور‬،‫صدا‬،‫ویدئو‬،‫فایل‬‫رکورد‬‫و‬‫بسی‬‫اری‬‫از‬ ‫موارد‬‫دیگر‬‫باشد‬.‫در‬‫حقیقت‬‫‌توان‬‫ی‬‫م‬‫هر‬‫چیزی‬‫را‬‫بف‬‫رم‬ ‫یك‬‫شی‬‫عرضه‬‫کرد‬.‫فرآیند‬‫‌نویسی‬‫ه‬‫برنام‬‫‌گرا‬‌‫ی‬‫ش‬‫در‬ ‫مقایسه‬‫با‬‫‌نویسی‬‫ه‬‫برنام‬‫روالی‬(procedural)‫ماهیت‬ ‫بسیار‬‫‌تری‬‫ی‬‫طبیع‬‫دارد‬‫و‬‫نتیجه‬‫آن‬‫هم‬‫رضایت‬‫بخ‬‫‌تر‬‫ش‬ ‫است‬. ‫برنامه‬‫نویسی‬‫شی‬‫گرا‬‫در‬‫مقایسه‬‫با‬‫برنامه‬‫نویسی‬‫روال‬‫گ‬‫را‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 17. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫تمرکز‬‫‌نویسان‬‫ه‬‫برنام‬oop‫بر‬‫روی‬‫ایجاد‬«‫اع‬‫و‬‫ان‬‫‌ای‬‫ه‬‫داد‬‫تعریف‬‫شده‬‫از‬‫سوی‬‫کاربر‬»‫که‬ ‫کالس‬‫نامیده‬‫‌شوند‬‫ی‬‫م‬‫است‬.‫قبل‬‫از‬‫اینكه‬‫بتوانید‬‫با‬‫اتومبیلی‬‫رانندگی‬‫کن‬،‫ید‬‫باید‬‫کسی‬ ‫آن‬‫را‬‫طراحی‬‫و‬‫ساخته‬‫باشد‬.ً‫ال‬‫معمو‬‫ساخت‬،‫اتومبیل‬‫با‬‫ترسیم‬‫یا‬‫‌کشی‬‫ه‬‫نقش‬‫مهن‬‫دسی‬ ‫شروع‬‫شود‬.‫متأسفانه‬‫‌توانید‬‫ی‬‫نم‬‫با‬‫‌های‬‫ه‬‫نقش‬‫ترسیمی‬‫یك‬‫اتومبیل‬‫رانندگی‬‫کنید‬.‫قبل‬‫از‬ ‫اینكه‬‫با‬‫اتومبیلی‬‫رانندگی‬‫کنید‬‫باید‬‫آن‬‫اتومبیل‬‫از‬‫روی‬‫‌های‬‫ه‬‫نقش‬‫ترسیم‬‫ی‬‫ساخته‬‫شود‬. ‫‌ها‬‫س‬‫کال‬‫همانند‬‫‌های‬‫ه‬‫نقش‬‫ترسیمی‬‫‌ها‬‫ه‬‫خان‬‫هستند‬.‫یك‬،‫کالس‬‫نقشه‬‫ایجاد‬‫یك‬‫ش‬‫ی‬‫از‬ ‫کالس‬‫است‬.‫همانطوری‬‫که‬‫‌توانیم‬‫ی‬‫م‬‫‌های‬‫ه‬‫خان‬‫متعددی‬‫از‬‫روی‬‫یك‬‫نقشه‬،‫بسازیم‬ ‫‌توانیم‬‫ی‬‫م‬‫تعدادی‬‫شی‬‫از‬‫روی‬‫یك‬‫کالس‬‫‌سازی‬‫ه‬‫نمون‬‫کنیم‬.‫‌توان‬‫ی‬‫نم‬‫در‬‫نقشه‬‫آش‬‫پزخانه‬ ‫مبادرت‬‫به‬‫آشپزی‬،‫کرد‬‫آشپزی‬‫فقط‬‫در‬‫آشپزخانه‬‫خانه‬‫‌پذیر‬‫ن‬‫امكا‬‫است‬.‫اشیاء‬‫ن‬‫مونه‬‫های‬ ‫واقعی‬‫هستند‬‫که‬‫از‬‫روی‬‫کالس‬‫ها‬‫ایجاد‬‫‌شوند‬‫ی‬‫م‬. ‌‫کالس‌و‌شي‬(Class & object) ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 18. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫کالس‬‫قالب‬‫یك‬‫موجودیت‬‫را‬‫تعریف‬‌‫ی‬‫م‬‫ک‬‫ند‬ ‫و‬‫اشیاء‬‫نمونه‬‫هایی‬‫واقعی‬‫از‬‫آن‬‫کالس‬ ‫‌ب‬‫ی‬‫م‬‫اشند‬.‫کالس‬‫هیچ‬‫حافظه‬‫ای‬‫اشغال‬‫نك‬‫رده‬ ‫و‬‫تنها‬‫قالب‬‫موجودیت‬‫را‬‫نمایش‬‌‫ی‬‫م‬‫دهد‬‫اما‬‫از‬ ‫روی‬‫یك‬‫کالس‬‫چندین‬‫شی‬‫‌توان‬‫ی‬‫م‬‫تعری‬‫ف‬ ‫کرد‬‫که‬‫هر‬‫یك‬‫برای‬‫خود‬‫حافظه‬‫اشغال‬ ‫کرده‬‫اند‬‫و‬‫مستقل‬‫از‬‫یكدیگرند‬. ‌‫کالس‌و‌شي‬(Class & object) ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 19. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫تمرکز‬‫‌نویسان‬‫ه‬‫برنام‬C++‫بر‬‫روی‬‫ایجاد‬«‫اع‬‫و‬‫ان‬‫‌ای‬‫ه‬‫داد‬‫تعریف‬‫شده‬‫از‬‫سوی‬ ‫کاربر‬»‫که‬‫کالس‬‫نامیده‬‫‌شوند‬‫ی‬‫م‬‫است‬.‫هر‬‫کالس‬‫حاوی‬‫اجزاء‬‫‌ای‬‫ه‬‫داد‬‫و‬‫هم‬ ‫‌ای‬‫ه‬‫مجموع‬‫از‬‫متدهاست‬‫که‬‫بر‬‫روی‬‫‌ها‬‫ه‬‫داد‬‫کار‬‫‌کنند‬‫ی‬‫م‬‫و‬‫‌هایی‬‫س‬‫سروی‬‫برای‬ ‫‌ها‬‫ه‬‫‌گیرند‬‫س‬‫سروی‬(‫‌ها‬‫س‬‫کال‬‫و‬‫توابع‬‫دیگری‬‫که‬‫از‬‫کالس‬‫استفاده‬‫‌کن‬‫ی‬‫م‬‫ند‬) ‫تدارك‬‫‌بیند‬‫ی‬‫م‬.‫برای‬،‫مثال‬‫یك‬‫کالس‬‫حساب‬‫بانكی‬‫‌تواند‬‫ی‬‫م‬‫شامل‬‫ی‬‫ك‬ ‫شماره‬‫حساب‬‫و‬‫یك‬‫موجودی‬‫باشد‬‫که‬‫اجزاء‬‫‌ای‬‫ه‬‫داد‬‫کالس‬‫محسوب‬‫‌شوند‬‫ی‬‫م‬ ‫و‬‫به‬‫‌های‬‫ر‬‫رفتا‬‫هر‬‫موجودیت‬‫از‬‫یك‬،‫کالس‬‫توابع‬‫عضو‬‫گفته‬‫‌شود‬‫ی‬‫م‬(‫معم‬ً‫ال‬‫و‬ ‫در‬‫سایر‬‫‌های‬‫ن‬‫زبا‬‫‌نویسی‬‫ه‬‫برنام‬‫‌گرا‬‫ی‬‫ش‬‫همانند‬‫جاوا‬‫به‬‫توابع‬،‫عضو‬‫متد‬‫گفته‬ ‫‌شود‬‫ی‬‫م‬).‫برای‬،‫مثال‬‫یك‬‫کالس‬‫حساب‬‫بانكی‬‫‌تواند‬‫ی‬‫م‬‫دارای‬‫توابع‬‫عض‬‫وی‬ ‫برای‬‫ایجاد‬‫یك‬‫‌انداز‬‫س‬‫پ‬(‫‌دهنده‬‫ش‬‫افزای‬‫موجودی‬)،‫برداشت‬(‫‌دهنده‬‫ش‬‫کاه‬ ‫موجودی‬)‫و‬‫نمایش‬‫موجودی‬‫فعلی‬‫باشد‬.‫‌نویس‬‫ه‬‫برنام‬‫از‬‫انواع‬‫توکار‬(‫و‬‫سای‬‫ر‬ ‫انواع‬‫تعریف‬‫شده‬‫توسط‬‫کاربر‬‫در‬‫ایجاد‬‫انواع‬‫جدید‬(‫‌ها‬‫س‬‫کال‬)‫استفاده‬‫م‬‫‌کند‬‫ی‬. ‫کالس‬‫ها،‌اجزاء‌داده‬‫ای‌و‌اجزاء‌تابعي‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 20. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫فرض‬‫کنید‬‫که‬‫‌خواهید‬‫ی‬‫م‬‫با‬‫اتومبیلی‬‫رانندگی‬‫کرده‬‫و‬‫با‬‫فشردن‬‫پدال‬‫گاز‬‫آن‬‫را‬‫سر‬‫یعتر‬‫به‬ ‫حرکت‬‫درآورید‬.‫چه‬‫اتفاقی‬‫قبل‬‫از‬‫اینكه‬‫بتوانید‬‫اینكار‬‫را‬‫انجام‬،‫دهید‬‫باید‬‫رخ‬‫دهد؟‬‫ب‬‫سیار‬ ،‫خوب‬‫قبل‬‫از‬‫اینكه‬‫بتوانید‬‫با‬‫اتومبیلی‬‫رانندگی‬،‫کنید‬‫باید‬‫کسی‬‫آن‬‫را‬‫طراحی‬‫و‬‫ساخته‬‫باشد‬. ً‫ال‬‫معمو‬‫ساخت‬‫اتومبیل‬‫با‬‫ترسیم‬‫یا‬‫‌کشی‬‫ه‬‫نقش‬‫مهندسی‬‫شروع‬‫شود‬.‫همانند‬‫طراحی‬‫ص‬‫ورت‬ ‫گرفته‬‫برای‬‫خانه‬.‫این‬‫ترسیمات‬‫شامل‬‫طراحی‬‫پدال‬‫گاز‬‫است‬‫که‬‫راننده‬‫با‬‫استفاده‬‫از‬‫آ‬‫ن‬‫سبب‬ ‫‌شود‬‫ی‬‫م‬‫تا‬‫اتومبیل‬‫سریعتر‬‫حرکت‬‫کند‬.‫تا‬‫حدی‬‫پدال‬‫سبب‬«‫پنهان‬»‫شدن‬‫پیچیدگ‬‫ی‬ ‫مكانیزمی‬‫‌شود‬‫ی‬‫م‬‫که‬‫اتومبیل‬‫را‬‫سریعتر‬‫بحرکت‬‫‌آورد‬‫ی‬‫درم‬،‫همانطوری‬‫که‬‫پدال‬‫ترمز‬‫س‬‫بب‬ «‫پنهان‬»‫شدن‬‫مكانیزمی‬‫‌شود‬‫ی‬‫م‬‫که‬‫از‬‫سرعت‬‫اتومبیل‬‫کم‬،‫‌کند‬‫ی‬‫م‬‫فرمان‬‫اتومبیل‬‫س‬‫بب‬ «‫پنهان‬»‫شدن‬‫مكانیزمی‬‫‌شود‬‫ی‬‫م‬‫که‬‫اتومبیل‬‫را‬‫هدایت‬‫‌کند‬‫ی‬‫م‬‫و‬‫موارد‬‫دیگر‬.‫با‬‫انجام‬‫چ‬‫نین‬ ،‫کارهایی‬‫افراد‬‫عادی‬‫‌توانند‬‫ی‬‫م‬‫به‬‫آسانی‬‫اتومبیل‬‫را‬‫هدایت‬‫کرده‬‫و‬‫براحتی‬‫از‬‫پدال‬،‫گاز‬‫ترمز‬‫و‬ ،‫فرمان‬‫مكانیزم‬‫تعویض‬‫دنده‬‫و‬‫سایر‬«‫‌های‬‫ط‬‫واس‬»‫کاربرپسند‬‫و‬‫ساده‬‫استفاده‬‫کنند‬‫ت‬‫ا‬‫پیچیدگی‬ ‫‌های‬‫م‬‫مكانیز‬‫داخلی‬‫اتومبیل‬‫برای‬‫راننده‬‫مشخص‬‫نباشد‬.‫متأسفانه‬،‫‌توانید‬‫ی‬‫نم‬‫با‬‫ن‬‫‌های‬‫ه‬‫قش‬ ‫ترسیمی‬‫یك‬‫اتومبیل‬‫رانندگی‬،‫کنید‬‫قبل‬‫از‬‫اینكه‬‫با‬‫اتومبیلی‬‫رانندگی‬‫کنی‬‫د‬‫باید‬‫آن‬‫اتومبیل‬‫از‬ ‫روی‬‫‌های‬‫ه‬‫نقش‬‫ترسیمی‬‫ساخته‬‫شود‬.‫یك‬‫اتومبیل‬ً‫ال‬‫کام‬‫ساخته‬‫شده‬‫دارای‬‫پدال‬‫گاز‬‫وا‬‫قعی‬ ‫برای‬‫به‬‫حرکت‬‫درآوردن‬‫سریع‬‫اتومبیل‬،‫است‬‫اما‬‫این‬‫هم‬‫کافی‬‫نیست‬.‫اتومبیل‬‫بخودی‬‫خود‬ ‫شتاب‬،‫‌گیرد‬‫ی‬‫نم‬‫از‬‫اینرو‬‫الزم‬‫است‬‫راننده‬‫بر‬‫روی‬‫پدال‬‫گاز‬‫فشار‬‫آورد‬‫تا‬‫به‬‫اتومبیل‬‫د‬‫ستور‬ ‫حرکت‬‫‌تر‬‫ع‬‫سری‬‫را‬‫صادر‬‫کند‬. ‫کالس‬‫ها،‌اجزاء‌داده‬‫ای‌و‌اجزاء‌تابعي‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 21. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 Encapsulation‫یا‬‫بسته‬‫بندی‬ ‫قرار‬‫دادن‬‫کلیه‬‫خصوصیات‬‫و‬‫متدهای‬‫یك‬‫کالس‬‫در‬‫یك‬‫‌بندی‬‫ه‬‫بست‬‫مشخص‬‫را‬Encapsulation‫‌نامند‬‫ی‬‫م‬.‫بسته‬‫بندی‬‫کردن‬(package)‫‌افزار‬‫م‬‫نر‬ ‫بصورت‬‫‌ها‬‫س‬‫کال‬‫‌تواند‬‫ی‬‫م‬‫ویژگی‬‫استفاده‬‫مجدد‬‫از‬‫‌افزار‬‫م‬‫نر‬‫را‬‫عرضه‬‫کند‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 22. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 Interface Interface‫به‬‫عنوان‬‫یك‬‫قرارداد‬‫تعر‬‫ی‬‫ف‬‌‫ی‬‫م‬‫شود‬‫که‬‫ه‬‌‫ه‬‫م‬‫ی‬‫گروه‬‫هایی‬‫که‬‫آن‬‫را‬‌‫ی‬‫م‬‫گیرند‬‫باید‬ ‫آن‬‫را‬‫دنبال‬‫کنند‬.Interface‫قسمت‬‫چه‬‫باید‬‫کرد‬‫از‬‫یك‬‫قرارداد‬‫را‬‫تعریف‬‌‫ی‬‫م‬‫کند‬‫و‬ ‫گروه‬‫های‬‫مشتق‬‫شده‬‫قسمت‬‫چگونگی‬‫انجام‬‫این‬‫قراردادها‬‫را‬‫تعریف‬‌‫ی‬‫م‬‫کنند‬.Interface ‫تنها‬‫شامل‬‫اعالم‬‫اعضا‬‌‫ی‬‫م‬‫باشد‬‫و‬‫اغلب‬‫به‬‫ت‬‫أ‬‫مین‬‫یك‬‫ساختار‬‫استاندارد‬‫کمك‬‌‫ی‬‫م‬‫کنن‬‫د‬.‫تعریف‬ ‫عملكرد‬‫اعضا‬‫ء‬‫مسئولیت‬‫گروه‬‫مشتق‬‫شده‬‌‫ی‬‫م‬‫باشد‬.Interface‫نشان‬‌‫ی‬‫م‬‫دهد‬‫که‬‫می‬‫خواهید‬ ‫یك‬‫آبجكت‬‫چگونه‬‫مورد‬‫استفاده‬‫قرار‬‫گیرد‬‫و‬‫به‬‫این‬‫که‬‫چگونه‬‫پیاده‬‫سازی‬‌‫ی‬‫م‬‫شود‬‫ک‬‫اری‬ ‫ندارد‬.‫به‬‫کمك‬Interface‌‫ی‬‫م‬‫توان‬‫عملكرد‬‫وراثت‬‫چندگانه‬‫را‬‫در‬C#‫شبیه‬‫سازی‬‫کرد‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 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. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫‌بری‬‫ث‬‫ار‬‫فرمی‬‫از‬‫بكارگیری‬‫مجدد‬ ‫‌افزار‬‫م‬‫نر‬‫است‬‫که‬‫در‬‫آن‬‫‌های‬‫س‬‫کال‬ ‫ایجاد‬‫شده‬‫اجزاء‬‫‌ای‬‫ه‬‫داد‬‫و‬‫رفتارهای‬ ‫خود‬‫را‬‫براساس‬‫اطالعات‬‫یك‬‫کالس‬ ‫موجود‬‫بدست‬‫آورده‬‫و‬‫در‬‫صورت‬‫نیاز‬ ‫حاوی‬‫‌های‬‫ت‬‫قابلی‬‫جدید‬‫هستند‬. ‫بكارگیری‬‫مجدد‬‫‌افزار‬‫م‬‫نر‬‫سبب‬‫کاه‬‫ش‬ ‫مدت‬‫زمان‬‫توسعه‬‫‌افزار‬‫م‬‫نر‬‫شده‬‫و‬ ‫کیفیت‬‫آنرا‬‫بطور‬‫موثری‬‫افزایش‬ ‫‌دهد‬‫ی‬‫م‬. ‫وراثت‬Inheritance ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 25. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫چند‬‫ریختی‬Polymorphism ‫‌ریختی‬‫د‬‫چن‬‫امكان‬‫‌دهد‬‫ی‬‫م‬‫تا‬‫‌ها‬‫ه‬‫برنام‬‫بجای‬‫اینكه‬«‫برنامه‬‫خا‬‫صی‬» ،‫باشند‬‫حالت‬‫یك‬«‫برنامه‬‫کلی‬»‫داشته‬‫باشند‬. ‫در‬،‫عمل‬‫چند‬‫ریختی‬‫امكان‬‫‌دهد‬‫ی‬‫م‬‫تا‬‫‌هایی‬‫ه‬‫برنام‬‫بنویسیم‬‫که‬ ‫مبادرت‬‫به‬‫پردازش‬‫اشیاء‬‫از‬‫‌هایی‬‫س‬‫کال‬‫کنند‬‫که‬‫بخشی‬‫از‬‫همان‬ ‫سلسله‬‫مراتب‬‫کالس‬،‫هستند‬‫همچنانكه‬‫همگی‬‫آنها‬‫اشیا‬‫ئ‬‫ی‬‫از‬ ‫سلسله‬‫مراتب‬‫کالس‬‫مبنا‬‫‌باشند‬‫ی‬‫م‬.‫به‬‫کمك‬،‫چندریختی‬ ‫‌توانیم‬‫ی‬‫م‬‫‌های‬‫م‬‫سیست‬‫را‬‫طراحی‬‫و‬‫‌سازی‬‫ه‬‫پیاد‬‫کنیم‬‫که‬‫گ‬‫سترش‬ ‫و‬‫‌پذیری‬‫ط‬‫بس‬‫آنها‬‫آسانتر‬‫است‬.‫‌های‬‫س‬‫کال‬‫جدید‬‫‌توانند‬‫ی‬‫م‬‫با‬ ‫کمی‬‫تغییر‬‫یا‬‫اصالح‬‫در‬‫‌های‬‫ش‬‫بخ‬‫عمومی‬،‫برنامه‬‫به‬‫آن‬‫افز‬‫وده‬ ،‫شوند‬‫مادامیكه‬‫‌های‬‌‫س‬‫کال‬‫جدید‬‫بخشی‬‫از‬‫سلسله‬‫مراتب‬‫ت‬‫وارثی‬ ‫باشند‬‫که‬‫برنامه‬‫بطور‬‫جامع‬‫آنرا‬‫پردازش‬‫‌کند‬‫ی‬‫م‬.‫تنها‬‫بخش‬‫‌ها‬‫ی‬‫ی‬ ‫از‬‫برنامه‬‫که‬‫باید‬‫برای‬‫تطبیق‬‫یافتن‬‫با‬‫‌های‬‫س‬‫کال‬‫جدید‬‫تغییر‬ ‫داده‬‫شو‬‫ن‬‫د‬‫آنهایی‬‫هستند‬‫که‬‫نیاز‬‫دارند‬‫تا‬‫از‬‫وجود‬‫‌های‬‫س‬‫کال‬ ‫جدید‬‫افزوده‬‫شده‬‫به‬‫سلسه‬‫مراتب‬ً‫ا‬‫مستقیم‬‫مطلع‬‫گردند‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 26. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫در‬‫لغت‬‫به‬‫معنای‬‫تجرد‬‫یا‬‫انتزاع‬‫است‬‫و‬‫به‬‫مفهوم‬‫یك‬‫برداش‬‫ت‬ ‫واحد‬‫از‬‫مجموعه‬‫مشاهدات‬‌‫ی‬‫م‬‫باشد‬.‫در‬‫واقع‬‫انتزاع‬‫همان‬‫نیرویی‬ ‫است‬‫که‬‫با‬‫دیدن‬‫تعداد‬‫زیادی‬‫درخت‬‫مفهوم‬‫جنگل‬‫را‬‫در‬‫ذهن‬ ‫انسان‬‫تداعی‬‌‫ی‬‫م‬‫کند‬‫یا‬‫با‬‫دیدن‬‫مجموعه‬‫ای‬‫از‬‫پیكسل‬‫های‬‫ص‬‫فحه‬ ‫نمایش‬‫کامپیوتر‬‫یك‬‫تصویر‬‫خاص‬‫را‬‫در‬‫ذهن‬‫ایجاد‬‌‫ی‬‫م‬‫کند‬.‫در‬ ‫این‬‫روش‬‫برنامه‬‫نویس‬‫باید‬‫سعی‬‫کند‬‫اشیائی‬‫را‬‫تعریف‬‫ک‬‫ند‬‫که‬ ‫برنامه‬‫را‬‫از‬‫تعریف‬‫اشیاء‬‫بیشتر‬‫بی‬‫نیاز‬‫کند‬.‫در‬‫واقع‬‫او‬‫ه‬‫مواره‬ ‫باید‬‫به‬‫دنبال‬‫اشیاء‬‫مادر‬‫بگردد‬.‫یعنی‬‫بعد‬‫از‬‫یافتن‬‫توا‬‫بع‬‫و‬ ‫داده‬‫های‬‫مورد‬‫نیاز‬‫برای‬‫پیاده‬‫سازی‬‫سیستم‬‫مورد‬‫نظر‬‫باید‬ ‫مجموعه‬‫ای‬‫از‬‫توابع‬‫و‬‫داده‬‫ها‬‫را‬‫توسط‬"‫یك‬"‫کالس‬(‫شئ‬) ‫پیاده‬‫سازی‬‫کند‬.Abstraction‫در‬‫اصل‬‫به‬‫معنی‬‫نمایش‬‫دادن‬ ‫تنها‬‫جزئیات‬‫مورد‬‫نیاز‬‫به‬‫سرویس‬‫گیرنده‬‫است‬. Abstraction ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 27. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 Abstraction ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 28. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫در‬‫ارث‬‫بری‬‫کالس‬‫های‬،‫پایه‬‫تنها‬‫شامل‬‫متدها‬‫و‬‫خصوصیاتی‬‫هستند‬‫ک‬‫ه‬‫در‬ ‫بین‬‫کالس‬‫هایی‬‫که‬‫از‬‫این‬‫کالس‬‫ها‬‫مشتق‬‌‫ی‬‫م‬‫شوند‬‫مشترك‬‫هستند‬.‫به‬ ‫عبارت‬‫دیگر‬‫خود‬‫کالس‬‫های‬‫پایه‬‫دارای‬‫مفهوم‬‫کاملی‬‫از‬‫یك‬‫شئ‬‫ن‬‌‫ی‬‫م‬‫ب‬،‫اشند‬ ‫درنتیجه‬‫ایجاد‬‫اشیاء‬‫جدید‬‫از‬‫این‬‫کالس‬‫ها‬‫بی‬‫معنی‬‫است‬.‫برای‬‫اینك‬‫ه‬‫نتوان‬ ‫از‬‫کالس‬‫های‬‫پایه‬‫اشیاء‬‫نمونه‬‫ای‬‫تعریف‬‫کرد‬.‫آنها‬‫را‬‫به‬‫صورت‬abstract ‫تعریف‬‌‫ی‬‫م‬‫نماییم‬. ‫نكته‬‫اینكه‬‫ن‬‫‌توان‬‫ی‬‫م‬‫اشیاء‬‫جدیدی‬‫از‬‫کالس‬‫های‬abstract‫ایجاد‬‫کرد‬. Abstract Class ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 29. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫مشاهده‬‫کردید‬‫که‬‫توابع‬‫عضو‬‫یك‬‫شی‬‫‌تواند‬‫ی‬‫م‬‫‌های‬‫ه‬‫داد‬‫شی‬‫را‬ ‫دستكاری‬‫کند‬.‫چگونه‬‫توابع‬‫عضو‬‫‌دانند‬‫ی‬‫م‬‫که‬‫اعضای‬‫داده‬‫کد‬‫ام‬‫یك‬ ‫از‬‫اشیاء‬‫را‬‫دستكاری‬‫کنند؟‬‫هر‬‫شی‬‫از‬‫طریق‬‫یك‬‫‌گر‬‫ه‬‫اشار‬‫بنام‬this (‫یك‬‫کلمه‬‫کلیدی‬‫در‬C#)‫به‬‫آدرس‬‫متعلق‬‫بخود‬‫دسترسی‬‫دارد‬. ‫‌گر‬‫ه‬‫اشار‬this‫یك‬،‫شی‬‫بخشی‬‫از‬‫خود‬‫شی‬،‫‌باشد‬‫ی‬‫نم‬‫‌گر‬‫ه‬‫اشار‬ this‫بصورت‬‫یك‬‫آرگومان‬‫ضمنی‬‫به‬‫هر‬‫تابع‬‫عضو‬‫غیراستاتی‬‫ك‬‫شی‬ ‫ارسال‬‫‌شود‬‫ی‬‫م‬(‫توسط‬‫کامپایلر‬).‫اشیاء‬‫از‬‫‌گر‬‫ه‬‫اشار‬this‫بصورت‬ ‫ضمنی‬(‫که‬‫در‬‫این‬‫بخش‬‫آنرا‬‫انجام‬‫‌دهیم‬‫ی‬‫م‬)‫یا‬‫صریح‬‫برای‬‫مراجع‬‫ه‬ ‫اعضای‬‫داده‬‫و‬‫توابع‬‫عضو‬‫خود‬‫استفاده‬‫‌کنند‬‫ی‬‫م‬. ‌‫مفهوم‌مرجع‬this‫در‌متدهای‌کالس‬ ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 30. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 •‫هر‬‫کالسی‬‫که‬‫اعالن‬‫‌کنید‬‫ی‬‫م‬‫‌تواند‬‫ی‬‫م‬‫یك‬‫سازنده‬(constructor)‫داشته‬‫باشد‬‫که‬‫‌توان‬‫ی‬‫م‬‫با‬‫استفاده‬‫از‬‫آن‬‫مبادرت‬‫به‬‫مقداردهی‬‫اولیه‬‫یك‬‫شی‬‫از‬ ‫کالس‬‫به‬‫هنگام‬‫ایجاد‬‫شی‬‫کرد‬.‫سازنده‬‫یك‬‫تابع‬‫عضو‬‫ویژه‬‫است‬‫که‬‫بایستی‬‫همنام‬‫با‬‫نام‬‫کالس‬‫تعریف‬‫شده‬،‫باشد‬‫از‬‫اینروست‬‫که‬‫کام‬‫پایلر‬‫‌تواند‬‫ی‬‫م‬‫آن‬‫را‬ ‫از‬‫دیگر‬‫توابع‬‫عضو‬‫کالس‬‫تشخیص‬‫دهد‬.‫مهمترین‬‫تفاوت‬‫موجود‬‫مابین‬‫‌ها‬‫ه‬‫سازند‬‫و‬‫توابع‬‫دیگر‬‫در‬‫این‬‫است‬‫که‬‫‌ها‬‫ه‬‫سازند‬‫‌تواند‬‫ی‬‫نم‬‫مقدار‬‫ب‬‫رگشت‬،‫دهند‬ ‫بنابراین‬‫‌توانند‬‫ی‬‫نم‬‫نوع‬‫برگشتی‬‫داشته‬‫باشند‬(‫حتی‬void).ً‫ال‬‫معمو‬‫‌ها‬‫ه‬‫سازند‬‫بصورت‬public‫اعالن‬‫‌شود‬‫ی‬‫م‬.‫هر‬‫زمان‬‫که‬‫شی‬‫از‬‫روی‬‫یك‬‫کالس‬ ‫ایجاد‬‌‫ی‬‫م‬‫کنیم‬‫اتوماتیك‬‫سازنده‬‫کالس‬‫اجرا‬‌‫ی‬‫م‬‫گردد‬.C#‫نیازمند‬‫فراخوانی‬‫یك‬‫سازنده‬‫برای‬‫هر‬‫شی‬‫است‬‫که‬‫ایجاد‬،‫‌شود‬‫ی‬‫م‬‫در‬‫چنین‬‫حالتی‬‫مطمئن‬ ‫خواهیم‬‫بود‬‫که‬‫شی‬‫قبل‬‫از‬‫اینكه‬‫توسط‬‫برنامه‬‫بكار‬‫گرفته‬‫شود‬‫بدرستی‬‫مقداردهی‬‫اولیه‬‫شده‬‫است‬.‫فراخوانی‬‫سازنده‬‫به‬‫هنگام‬‫ایجاد‬‫ش‬،‫ی‬‫بصورت‬ ‫غیرصریح‬‫یا‬‫ضمنی‬‫انجام‬‫‌شود‬‫ی‬‫م‬.‫در‬‫هر‬‫کالسی‬‫که‬‫بصورت‬‫صریح‬‫‌ای‬‫ه‬‫سازند‬‫را‬‫مشخص‬‫نكرده‬،‫است‬‫کامپایلر‬‫یك‬‫سازنده‬‫‌فرض‬‫ش‬‫پی‬‫تدا‬‫رك‬‫‌بیند‬‫ی‬‫م‬‫این‬ ‫سازنده‬‫دارای‬‫پارامتر‬‫‌باشد‬‫ی‬‫نم‬. ‫تابع‌عضو‌سازنده‌و‌تابع‌عضو‌مخرب‬ •‫نابودکننده‬(‫مخرب‬)‫نوع‬‫دیگری‬‫از‬‫تابع‬‫عضو‬‫‌باشد‬‫ی‬‫م‬.‫نام‬ ‫تابع‬‫مخرب‬‫یك‬‫کالس‬‫با‬‫کاراکتر‬‫مد‬(~)‫و‬‫نام‬‫کالس‬ ‫مشخص‬‫‌شود‬‫ی‬‫م‬.‫مخرب‬‫یك‬‫کالس‬‫بصورت‬ ‫ضمنی‬(‫غیرصریح‬)‫و‬‫در‬‫زمان‬‫از‬‫بین‬‫رفتن‬‫شی‬‫فراخوان‬‫ی‬ ‫‌شود‬‫ی‬‫م‬.‫مخرب‬‫پارامتر‬‫دریافت‬‫‌کند‬‫ی‬‫نم‬‫و‬‫مقداری‬‫برگش‬‫ت‬ ‫‌دهد‬‫ی‬‫نم‬‫و‬‫نمیتوان‬‫برای‬‫آن‬‫سطح‬‫دسترسی‬‫مشخص‬‫ک‬‫رد‬. ‫یك‬‫کالس‬‫‌تواند‬‫ی‬‫م‬‫فقط‬‫یك‬‫مخرب‬‫داشته‬‫باشد‬‫و‬ ‫‌توان‬‫ی‬‫نم‬‫آن‬‫را‬‫سربارگذاری‬‫کرد‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 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. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ 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. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ 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. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گاهی‬‫اوقات‬Property‫که‬‫تعریف‬‌‫ی‬‫م‬‫کنیم‬‫تنها‬‫عملیات‬‫خواندن‬‫و‬‫نوش‬‫تن‬ ‫یك‬‫فیلد‬‫را‬‫کنترل‬‌‫ی‬‫م‬‫کند‬.‫برای‬،‫مثال‬‫کالس‬Person‫را‬‫در‬‫نظر‬‫بگیرید‬. ‫کد‬‫مربوط‬‫به‬‫خصوصیت‬‫باال‬‫را‬‌‫ی‬‫م‬‫توان‬‫به‬‫شكل‬‫مقابل‬‫نیز‬‫نوشت‬.‫کامپایلر‬ ‫بعد‬‫از‬‫کامپایل‬‫کد‬،‫باال‬‫به‬‫صورت‬‫خودکار‬‫یك‬‫فیلد‬‫برای‬‫خاصیت‬‫ن‬‫وشته‬‫شده‬ ‫تعریف‬‫کرده‬‫و‬‫بدنه‬get‫و‬set‫آن‬‫را‬‫به‬‫صورت‬‫خودکار‬‌‫ی‬‫م‬‫نویسد‬.‫از‬ ‫مزایای‬Auto-Property‫ها‬‫حجم‬‫کد‬‫کمتر‬‫و‬‫البته‬‫قابلیت‬‫کنترل‬ ‫دسترسی‬‫به‬‫عملیات‬‫خواندن‬‫و‬‫نوشتن‬Property‫ها‬‌‫ی‬‫م‬‫باشد‬.‫مثال‬‫باال‬‫را‬ ‫به‬‫نحوی‬‫تغییر‬‌‫ی‬‫م‬‫دهیم‬‫که‬‫خاصیت‬FirstName‫تنها‬‫داخل‬‫کالس‬‫قابل‬ ‫نوشتن‬‫باشد‬.‫به‬‫این‬‫نكته‬‫توجه‬‫داشته‬،‫باشید‬‫زمانی‬‫که‬‫از‬Auto- Property‫ها‬‫استفاده‬‫‌کنید‬‫ی‬‫م‬‌ً‫ا‬‫حتم‬‫باید‬get‫و‬set‫را‬،‫بنویسید‬‫در‬‫غیر‬ ‫اینصورت‬‫پیغام‬‫خطا‬‫دریافت‬‫خواهید‬‫کرد‬.‫البته‬‫این‬‫مشكل‬‫در‬‫نسخه‬6‫زبان‬ ‫سی‬‫شارپ‬‫برطرف‬‫شده‬‫است‬. ‫ایجاد‬Automatic Properties ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 35. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫فضای‬‫نام‬‫یك‬‫ساختار‬‫سازمانی‬‫است‬‫که‬‫‌ها‬‫س‬‫کال‬‫را‬‫‌بندی‬‫ه‬‫دست‬‌‫ی‬‫م‬‫ک‬‫ند‬.‫به‬ ‫عبارت‬‫دیگر‬‫‌ای‬‫ه‬‫منطق‬‫برای‬‫تعریف‬‫کردن‬‫‌هاست‬‫س‬‫کال‬.‫فضای‬‫نام‬‫به‬‫شما‬ ‫کمك‬‌‫ی‬‫م‬‫کند‬‫که‬‫پایه‬‫و‬‫اساس‬‫کدهایتان‬‫را‬‫پیدا‬‫و‬‫درك‬‫کنید‬.‫فضای‬‫‌ها‬‫م‬‫نا‬ ‫برای‬‫‌نویسی‬‫ه‬‫برنام‬‫سی‬‫شارپ‬‫ضروری‬،‫نیستند‬‫آنها‬ً‫ال‬‫معمو‬‫برای‬‫به‬‫بود‬ ‫قابلیت‬‫فهم‬‫کد‬‫استفاده‬‌‫ی‬‫م‬‫شوند‬.‫بدون‬‫استفاده‬‫از‬‫فضای‬،‫نام‬‫تمام‬‫ی‬‫اسامی‬ ‫مورد‬‫استفاده‬‫در‬‫برنامه‬‫سعی‬‌‫ی‬‫م‬‫کنند‬‫در‬‫یك‬‫فضای‬‫نام‬،‫کلی‬‫جایی‬‫برای‬ ‫خود‬‫در‬‫نظر‬‫بگیرند‬‫که‬‫موجب‬‫برخورد‬‫بین‬‫اسامی‬‫یكسان‬‫‌شود‬‫ی‬‫م‬.‫ام‬‫ا‬‫اگر‬‫از‬ ‫فضای‬‫‌های‬‫م‬‫نا‬‫‌ای‬‫ه‬‫جداگان‬‫استفاده‬،‫شود‬‫هیچ‬‫اشكالی‬‫در‬‫برنامه‬‫به‬‫وجو‬‫د‬ ‫ن‬‌‫ی‬‫م‬‫آید‬.‫در‬‫واقع‬‫فضای‬‫نام‬‫برای‬‫تفكیك‬‫‌ای‬‫ه‬‫مجموع‬‫از‬‫اسامی‬‫از‬‫مجموعه‬ ‫دیگر‬‫به‬‫کار‬‫می‬‫رود‬. ‫نام‬ ‫فضای‬Namespace ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 36. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫از‬‫مهمترین‬‫فضای‬‫‌های‬‫م‬‫نا‬‫موجود‬‫در‬‫کتابخ‬‫انه‬ .Net Framework‫فضای‬‫نام‬ System‫است‬.‫این‬‫فضای‬‫نام‬‫دارای‬‫فضای‬ ‫‌های‬‫م‬‫نا‬‫دیگری‬‫در‬‫داخل‬‫خود‬‫‌باشد‬‫ی‬‫م‬.‫به‬ ‫عنوان‬‫مثال‬Sysytem.IO‫که‬‫حاوی‬ ‫‌هایی‬‫س‬‫کال‬‫برای‬‫کار‬‫با‬‫ورودی‬‫و‬‫خروجی‬‫و‬ ‫کار‬‫با‬‫‌ها‬‫ل‬‫فای‬‌‫ی‬‫م‬‫باشد‬. ‫در‬ ‫موجود‬ ‫نام‬ ‫فضای‬ ‫نمونه‬ ‫چند‬C# ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 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. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‫آشنایي‌با‌مفاهيم‌نوع‬‫داده‬‫شمارشي‌یا‬Enum ‫نوع‬‫داده‬‫شمارشی‬‫یا‬Enum‫جهت‬‫تعریف‬‫مقادیر‬‫ثابت‬‫و‬‫قابل‬‫شمارش‬‫در‬‫برنامه‬‫بسی‬‫ار‬ ‫کاربرد‬‫دارد‬.‫مقادیری‬‫که‬‫در‬‫این‬‫نوع‬‫داده‬‫تعریف‬‫‌شوند‬‫ی‬‫م‬‫بطور‬‫خودکار‬‫از‬‫عدد‬0‫شماره‬ ‫گذاری‬‫‌شوند‬‫ی‬‫م‬‫و‬‫به‬‫ترتیب‬‫یكی‬‫به‬‫‌ها‬‫ن‬‫آ‬‫اضافه‬‫‌شود‬‫ی‬‫م‬. ‫در‬‫این‬‫حالت‬‫متد‬)(ToString‫برای‬‫نوع‬‫‌ای‬‫ه‬‫داد‬Enum‫عنوان‬‫مقادیر‬‫ثابت‬‫را‬‫بر‬ ‫‌گرداند‬‫ی‬‫م‬. ‫روش‬‫عرف‬‫برای‬‫نمایش‬‫مقدار‬‫عددی‬‫استفاده‬‫از‬‫تبدیل‬‫نوع‬‫صریح‬‫به‬int‫است‬. ‫جهت‬‫تغيير‬‫شماره‬‫مقادیر‬‫کافيست‬‫بصورت‬‫زیر‬‫عمل‬‫کنيم‬: enum TypesOfColo { Black=-5, Green=20, White, Red, Blue } ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 39. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‫آشنایي‌با‬‌‌‫ه‬‫کلم‬‌‫کليدی‬static ‫گاهی‬‫نیاز‬‫دارید‬‫که‬‫اعضای‬‫یك‬‫کالس‬‫به‬‫هیچ‬‫شی‬‫ئ‬‫ی‬‫وابسته‬‫نباشن‬‫د‬.‫‌طور‬‫ه‬‫ب‬ ‫معمول‬‫اعضای‬‫کالس‬‫از‬‫طریق‬‫شیئی‬‫که‬‫از‬‫آن‬‫کالس‬‫ساخته‬‫‌شود‬‫ی‬‫م‬‫قاب‬‫ل‬ ‫دسترسی‬‫هستند‬‫اما‬‫شما‬‫‌توانید‬‫ی‬‫م‬‫عضوی‬‫از‬‫کالس‬‫را‬‫طوری‬‫تعریف‬‫ک‬‫نید‬‫که‬ ‫بدون‬‫ساخت‬‫هیچ‬‫شیئی‬ً‫ا‬‫مستقیم‬(‫از‬‫طریق‬‫نام‬‫کالس‬‫و‬‫عملگر‬‫نقطه‬)‫به‬‫آن‬ ‫دسترسی‬‫داشته‬‫باشید‬.‫برای‬‫ساخت‬‫چنین‬،‫عضوی‬‫قبل‬‫از‬‫تعریف‬‫آن‬‫عضو‬‫از‬ ‫‌کلیدی‬‫ی‬‌‫ه‬‫کلم‬static‫استفاده‬‫‌کنید‬‫ی‬‫م‬.‫هنگامی‬‫که‬‫عضوی‬‫از‬‫یك‬‫کالس‬ ‫‌صورت‬‫ه‬‫ب‬static‫تعریف‬،‫‌شود‬‫ی‬‫م‬‫آن‬‫عضو‬‫بدون‬‫ساخت‬‫هیچ‬object‫ای‬‫از‬ ‫کالس‬‫قابل‬‫دسترسی‬‫و‬‫در‬‫واقع‬‫مستقل‬‫از‬‫اشیاء‬‫است‬‫و‬‫به‬‫هیچ‬‫شیئ‬‫ی‬‫از‬‫آن‬ ‫کالس‬‫وصل‬‫‌شود‬‫ی‬‫نم‬.‫شما‬‫‌توانید‬‫ی‬‫م‬‫هم‬‫متدها‬‫و‬‫هم‬‫متغیرها‬‫را‬‫‌صورت‬‫ه‬‫ب‬ static‫تعریف‬‫کنید‬.‫به‬‫عنوان‬‫مثال‬‫متد‬show‫از‬‫کالس‬ MessageBox‫یك‬‫متد‬‫استاتیك‬‫‌باشد‬‫ی‬‫م‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 40. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫اجزاء‌داده‬‌‫ای‬static ‫اعضای‬static‫در‬‫حقیقت‬‫اعضایی‬‫هستند‬‫که‬‫وابسته‬‫به‬‫شئ‬‫نیستن‬‫د‬‫و‬‫در‬ ‫بین‬‫کل‬‫اشیاء‬‫ساخته‬‫شده‬‫از‬‫یك‬‫کالس‬‫مشترك‬‫‌باشند‬‫ی‬‫م‬.‫یعنی‬‫ب‬‫ه‬‫ازای‬‫هر‬ ‫شئ‬‫مقدار‬‫متفاوتی‬،‫ندارند‬‫چون‬‫وابسته‬‫به‬‫شئ‬‫نیستند‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 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. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ 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. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ 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. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫انواع‌روش‌ارسال‌پارامتر‌به‌متد‬ ۱.‫روش‬‫ارسال‬‫با‬‫مقدار‬Pass by value ‫در‬‫این‬‫روش‬‫در‬‫پارامترهای‬‫تابع‬‫متغیرهای‬‫معمولی‬‫تعریف‬‫‌کنیم‬‫ی‬‫م‬‫و‬‫در‬‫زمان‬ ‫فراخوانی‬‫مقادیر‬‫ثابت‬‫یا‬‫اسامی‬‫متغیرهایی‬‫از‬‫فراخواننده‬‫را‬‫به‬‫عنوان‬‫آرگومان‬‫ب‬‫ه‬ ‫پارامترهای‬‫متد‬‫ارسال‬‫‌کنیم‬‫ی‬‫م‬.‫هر‬‫تغییری‬‫برروی‬‫پارامترها‬‫در‬‫بد‬‫ن‬‫ه‬‫متد‬‫هیچ‬‫تأثیری‬ ‫برروی‬‫آرگومانهای‬‫فراخواننده‬‫ندارد‬‫و‬‫آرگومانها‬‫تنها‬‫به‬‫عنوان‬‫مقدار‬‫اولیه‬‫پارامت‬‫رها‬‫در‬ ‫نظر‬‫گرفته‬‫‌شوند‬‫ی‬‫م‬.‫در‬‫این‬‫شكل‬‫ارسال‬‫پارامترها‬‫تنها‬‫به‬‫عنوان‬‫ورودی‬‫در‬‫نظ‬‫ر‬‫گرفته‬ ‫می‬‫شوند‬.‫ارسال‬‫به‬‫روش‬pass by value‫به‬‫صورت‬‫پیش‬‫فرض‬‫‌باشد‬‫ی‬‫م‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 45. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫انواع‌روش‌ارسال‌پارامتر‌به‌متد‬ ۲.‫روش‬‫ارسال‬‫پارامتر‬‫با‬‫ارجاع‬Pass by reference ‫وقتی‬‫متغیری‬‫را‬‫به‬‫صورت‬ref‫به‬‫یك‬‫تابع‬‫ارسال‬،‫‌کنیم‬‫ی‬‫م‬‫مقدار‬‫متغیر‬ ‫ارسال‬‫‌شود‬‫ی‬‫نم‬‫بلكه‬‫آدرس‬‫متغیر‬‫به‬‫بدنه‬‫متد‬‫فرستاده‬‫‌شود‬‫ی‬‫م‬‫و‬‫هر‬‫ت‬‫غییری‬ ‫در‬‫متغیر‬‫محلی‬‫برروی‬‫متغیر‬‫اصلی‬‫نیز‬‫اعمال‬‫‌شود‬‫ی‬‫م‬.‫به‬‫این‬‫نوع‬‫پار‬‫مترها‬ ‫ارجاعی‬‫‌گویند‬‫ی‬‫م‬. ‌‫هر‌تغییری‌برروی‌پارامترها‌در‌بدنه‌متد‬‌‫برروی‬‫‌ها‌در‌فراخوانند‬‫ن‬‫آرگوما‬‌‌‫ه‬ ‌‫اعمال‬‫می‌شود‬. ‌‫نوشتن‌کلمه‌کلیدی‬ref‌‫هم‌درپشت‌آرگومان‌در‌زمان‬‌‫ارسال‌به‬‌‫متد‌و‌هم‬ ‌‫در‌پشت‌تعریف‌پارامتر‌در‌متد‬‫‌باشد‬‫ی‬‫الزامی‌م‬. ‌‫آرگومانی‌که‌به‌این‬‌‫روش‌به‌متد‌ارسال‬‌‫‌شود‌باید‬‫ی‬‫م‬‌‫مقداردهی‬‫اولیه‌ش‬‌‫ده‬ ‫باشد‬. ‌‫در‌این‬‌‫روش‌پارامترها‌به‬‌‫عنوان‬‌‫هم‌ورودی‌و‌هم‌خروجی‬‌‫در‌نظر‌گرفته‬ ‫‌شوند‬‫ی‬‫م‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 46. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫انواع‌روش‌ارسال‌پارامتر‌به‌متد‬ 3.‫روش‬‫ارسال‬‫پارامتر‬‫به‬‫عنوان‬‫تنها‬‫خروجی‬‫با‬‫کلمه‬‫کلیدی‬out ‫این‬‫شیوه‬‫ارسال‬‫هم‬‫به‬‫صورت‬‫ارجاعی‬‫‌باشد‬‫ی‬‫م‬.‫این‬‫پارامترها‬‫زمانی‬‫استف‬‫اده‬ ‫‌شود‬‫ی‬‫م‬‫که‬‫قصد‬‫ارسال‬‫اطالعاتی‬‫به‬‫متد‬‫را‬‫نداشته‬،‫باشیم‬‫بلكه‬‫‌خ‬‫ی‬‫م‬‫واهیم‬ ‫اطالعات‬‫از‬‫متد‬‫برگردد‬. ‫نیازی‬‫به‬‫مقداردهی‬‫قبل‬‫از‬‫ارسال‬‫به‬‫متد‬‫نیست‬‫ولی‬ً‫ا‬‫حتم‬‫باید‬‫درون‬‫م‬‫تد‬ (‫قبل‬‫از‬‫بازگشت‬‫به‬‫متدی‬‫فراخوانی‬‫شده‬)‫مقدار‬‫بگیرد‬. ‫در‬‫این‬‫روش‬‫پارامترها‬‫تنها‬‫به‬‫عنوان‬‫خروجی‬‫در‬‫نظر‬‫گرفته‬‌‫ی‬‫م‬‫شوند‬. ‫استفاده‬‫از‬ref‫و‬out‫تنها‬‫به‬‫فرستادن‬value type‫ها‬‫محدود‬‫‌شود‬‫ی‬‫نم‬ ‫بلكه‬‫هنگام‬‫فرستادن‬reference type‫نیز‬‫‌توانند‬‫ی‬‫م‬‫مورد‬‫استفاده‬‫قرار‬ ‫گیرد‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 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. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ 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. ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‫گرایی‬ ‫شیئ‬ ‫جامع‬ ‫آموزش‬ ‫شارپ‬ ‫سی‬ ‫در‬ faradars.org/fvcs9404 ‌‫کالس‌های‌بخشي‌یا‬partial ‫با‬‫استفاده‬‫از‬‫کلمه‬‫کلیدی‬partial‌‫ی‬‫م‬‫توانید‬‫اجزاء‬‫یك‬‫کالس‬‫را‬‫در‬‫دو‬‫یا‬‫بیشتر‬‫از‬‫دو‬‫فای‬‫ل‬ ‫جداگانه‬‫قرار‬‫دهید‬.‫مشروط‬‫بر‬‫اینكه‬‫فضای‬‫نام‬‫همه‬‫فایل‬‫ها‬‫یكسان‬‫باشد‬. ‫مزایای‬‫استفاده‬‫از‬‫کالس‬‫های‬partial: ۱-‫افزایش‬‫خوانایی‬‫در‬‫‌های‬‫س‬‫کال‬‫بسیار‬‫زیادی‬‫است‬. ۲-‫اگر‬‫شما‬‫برروی‬‫کالس‬‫‌ای‬‫ه‬‫پیچید‬‫کار‬‫‌کنید‬‫ی‬‫م‬‫براحتی‬‫‌توانید‬‫ی‬‫م‬‫آن‬‫را‬‫بین‬‫چند‬‫نفر‬ ‫تقسیم‬‫کنید‬‫و‬‫هر‬‫کدام‬‫از‬‫افراد‬‫در‬‫فایلی‬‫جداگانه‬‫کدهای‬‫کالس‬‫خود‬‫را‬‫‌نویسد‬‫ی‬‫م‬. 3-‫شما‬‫براحتی‬‫‌توانید‬‫ی‬‫م‬‫‌هایی‬‫ن‬‫مكا‬‫که‬‫برخی‬‫کدها‬‫بصورت‬‫اتوماتیك‬‫تولید‬‫م‬،‫‌شوند‬‫ی‬ ‫مثل‬‫کد‬‫‌های‬‫م‬‫فر‬‫تحت‬‫ویندوز‬(Windows Forms, Web Service)،‫را‬‫از‬ ‫کدهایی‬‫که‬‫بصورت‬‫دستی‬‫‌نویسید‬‫ی‬‫م‬‫تفكیك‬‫کنید‬.‫در‬‫نتیجه‬‫اعمال‬‫تغییرات‬‫بسیار‬‫راحت‬ ‫تر‬‫‌شود‬‫ی‬‫م‬.‫بطور‬‫مثال‬‫وقتی‬‫یك‬‫فرم‬‫ویندوزی‬‫ایجاد‬‫‌کنیم‬‫ی‬‫م‬‫قسمت‬‫کدی‬‫که‬‫توس‬‫ط‬ Designer‫نوشته‬‫‌شود‬‫ی‬‫م‬‫و‬‫مربوط‬‫به‬‫ظاهر‬‫فرم‬‫هست‬‫در‬‫فایلی‬‫جداگانه‬‫وجود‬‫دارد‬‫ک‬‫ه‬ ‫باعث‬‫‌شود‬‫ی‬‫م‬‫کدی‬‫که‬‫ما‬‫می‬‫نویسیم‬‫از‬‫آن‬‫کد‬‫جدا‬‫باشد‬‫و‬‫خواناتر‬‫باشد‬. 4-‫در‬‫تعریف‬‫‌ها‬‫س‬‫کال‬‫‌توانیم‬‫ی‬‫م‬‫بخش‬‫از‬‌‫ا‬‫‌ه‬‫س‬‫کال‬‫که‬‫دارای‬‫خصوصیات‬private‫است‬ ‫را‬‫از‬‫بخشی‬‫که‬‫دارای‬‫خصوصیات‬public‫است‬‫تفكیك‬‫کنیم‬.‫این‬‫کار‬‫به‬‫خوانایی‬‫و‬‫روان‬ ‫فهمیدن‬‫کالس‬‫کمك‬‫فراوانی‬‫‌کند‬‫ی‬‫م‬. ‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬ FaraDars.org
  • 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