Más contenido relacionado Similar a آموزش جامع شی گرایی در سی شارپ (20) آموزش جامع شی گرایی در سی شارپ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