167
یئ گرای جامع شی آموزش در سی شارپfaradars.org/fvcs9404 آموزش جامع شیئی در سی شارپ گرای مدرس: د شجاعی رشیم افزاروتر گرایش نررشد کامپیس ا کارشنا ﻓﺮادرسFaraDars.org

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

Embed Size (px)

Citation preview

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

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

:مدرس

رشید شجاعی

کارشناس ارشد کامپیوتر گرایش نرم افزار

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

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

OOP: Object Oriented Programming

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

برنامه‌نویسیهبشروعونشستهکامپیوترپشتراحتیبهنمی‌توانیدپیچیدهوبزرگپروژه‌هایبرای.کنیدتعیین)کنیدلتحلیوتجزیهراپروژهنیازمندی‌هایبدقتبایستیحل،راهبهترینبهدستیابیبرایسازدبرآوردهراآنهاکهدهیدتوسعهراطرحیو(دهدانجاممی‌خواهدکارچهسیستمکهکنید

ازلقبایده‌آلحالتدر.(باشدخودوظایفانجامبرایصحیحتصمیم‌گیریبهقادرسیستم)آیندفرایناگر.دهیدانجامراطراحیدقتبهورفتهفرآیندسراغبهبایدکدنویسی،هرگونهobject-orientendراآنباشد،شی‌گرا‌نظرنقطهازسیستمطراحیوتحلیلمستلزم

analysis and design (OOAD)بابرنامه‌نویسان.می‌گویندشي‌گراطراحيوتحليلیافه‌جوییصربسیاربرنامهایجادهزینهوزماندرمی‌تواندطراحیوتحلیلکههستندمطلعتجربهی‌شوندمباعثوکشاندهشكستبهرابرنامهبارهردرکهضعیفطرح‌هایاعمالازاجتنابباکند،ازمختلفیپردازش‌هایچهاگر.استزمانوهزینهتحمیلهمانکهگرددآغازابتداازکار

OOADفرآیندهرنتایجنمایشبرایگرافیكیزبانیكامادارد،وجودOOADهمهازبیشترUMLزباناین.استشدهگرفتهبكار (Unified Modeling Language)در.داردنامکردنمدلبرایگرافیكینمایشطرح‌هایپرکاربردترینازیكیUMLزبانحاضرحال

پیشآموزشیمجموعهسراسردرزباناینازسیستم‌هاکردنمدلبرای.استشی‌گراسیستم‌های.کرده‌ایماستفادهرو

OOAD & UML

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

اییاشیبرایکالسیكخواهیمکنیدفرضیكبرای.کنیمایجادمستطیلنوعاز

همانندداده‌ایاجزاءمی‌توانیممستطیلهمچنین.بگیریمنظردرعرضوطول

ندهمانتابعیاجزاءهمانیامتدهامی‌توانیمهمچنینولطووعرضکردنتنظیم

.بگیریمنظردرمحیطمحاسبه

ایجاد‌یک‌کالس‌برای‌مستطيل:‌مثال

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

.شودمی‌استفادهمقابلبصورتclassکلیدیواژهاز#Cدرکالسایجادبرای

•Modifier:دستیابیسطح.کندمی‌مشخصراکالسبهدستیابیسطحسطحدوااینجدر.شوددستیابیبایدچگونهشدهتعریفکالسکهکندمی‌مشخصpublicدستیابیسطحوقتیinternalوpublic:داریمکالسبرایدستیابیعریفتآندرکهنامیفضایازخارجکالساینکهاستاینمعنایبهشودتعریف

عدمیمعنابهعمومیدستیابیسطحدیگر،بعبارت.استاستفادهقابلشودمی‌کهکندمی‌مشخصinternalدستیابیسطح.استدستیابیدرمحدودیتیوجوداستفادهقابلشودمی‌تعریفکهنامیفضایهماندرفقطکالس.شودمی‌تعریفinternalفرضپیشبصورتModifier.است

•class:کاربهکالستعریفبرایصورتهمینبهکهاستکلیدیایواژه.رودمی‌

•name:گذارینام.گرددمی‌انتخابکالسبراینویسبرنامهتوسطکهاستنامی.کندمی‌پیرویهاشناسهبراینامگذاریازکالس،برای

•classmember:وایدادهاعضاءشاملوکندمی‌مشخصراکالساعضای.باشندمی‌کالستابعیاجزاء

شکل‌کلي‌تعریف‌کالس[modifier] class name

{Classmembers

فرادرس{

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

توسطرفتهبكارگرافیكیزبانیكUMLکهداریدبخاطرقبلمطالبازهر.تاساستانداردروشیكبهشی‌گراسیستم‌هاینمایشبرایبرنامه‌نویس

ازیمدل‌سقسمتسهباومستطیلیكبصورتکالسنموداریكدرکالسورتبصوگرفتهقراروسطدرکهاستکالسنامحاویفوقانیبخش.می‌شود

انیتحتبخشواستکالسصفاتحاویمیانیبخش.می‌شودنوشتهتوپرعضودادهمدل‌سازیبهمبادرتمقابلدیاگرام.استکالسعملیاتحاوی

lengthوbreadthاستکردهکالسمیانیبخشدرایدادهاجزاءبعنوان.UMLتصفنوعوکولنیكصفت،نامآندرکهلیستیدررادادهاعضای

کهاستintنوعازbreadthوlengthصفاتنوع.می‌کندعرضهگرفتهقرارحالت#Cدرbreadthوlengthداده‌ایاعضاء.می‌باشد#Cدرintبامتناظر

privateناممقابلدر(-)عالمتیكباکالسدیاگرامدراینروازودارندتصریح‌کنندهبامعادلUMLدرمنفیعالمت.استشدهمشخصصفت

عضوتابعسهحاویRectangleکالس.است#Cدرprivateدسترسیpublicبخشدرعملیاتسهاینکالسدیاگراملیستدراینرواز،استی‌دهدمنشانعملیاتهرنامقبل(+)جمعنماد.گرفته‌اندجایسومیاتحتانی

ازپارامتریكدارایsetlengthعملیات.داردpublicحالت#Cدر‌عملیاتکهنوعوکولنیكدادنقرارباعملیاتیكازبرگشتینوعUMLدر.استintنوع

.می‌شودمشخصعملیاتنامپرانتزهایازپسبرگشتی

Class Diagramنمودار‌کالس‌برای‌مستطيل‌‌‌

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

شکل‌کلي‌ایجاد‌کردن‌اجزاء‌تابعي‌یا‌متد‌های‌کالس

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

classکالس‌مستطيل Rectangle{

// two fieldsprivate int breadth;private int length;

// three methodspublic void setLength(int newValue)

{length = newValue;

}public void setBreadth(int newValue)

{breadth = newValue;

}public int getarea()

{return 2 * (length + breadth);

}

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

رویازmyrectبنامشیمقابلشكلدر.شدهایجادRectangleکالس

شکل‌کلي‌ایجاد‌کردن‌یک‌شي‌از‌روی‌کالس

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

ایجادکالسیكرویازکهاشیائیتماماجزاءتمامحاویاختصاصیبطورشوندمی‌

.هستندمذکورکالس

تعریف‌اشياءRectangle myrect1 = new Rectangle();Rectangle myrect2 = new Rectangle();

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

کردنتعریفدرnewدستورازصورتیكهدرود،شمی‌نایجادشینكنیماستفادهاشیاءادایجگراشارههمانیامرجعیكتنهابلكهتوانمی‌شكلمطابقبنابراین.شودمی‌

.دادانجاممرحلهدودرراشیتعریف

ایجاد‌کردن‌اشاره‌گر‌یا‌همان‌مرجع‌به‌اشياء

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

تعریفدرnewدستورازصورتیكهدرایجادشینكنیم،استفادهاشیاءکردن

همانیامرجعیكتنهابلكهشودمی‌نئیشبهتواندمی‌کهشودمی‌ایجادگراشارههبوشوددادهنسبتشدهایجادقبالکه

گرفتهنظردرمذکورشیدومنامعنوان.شود

نسبت‌دادن‌یک‌مرجع‌به‌یک‌شي‌موجود

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

تعالمشی،نامابتدامتدهافراخوانیبرایقادیرمونویسیممی‌رامتدنامسپسونقطه

نیازموردهایآرگومانعنوانبهرامناسب.کنیممی‌ارسالمتدهابه

نحوه‌فراخواني‌اجزاء‌تابعي‌کالس‌یا‌همان‌متدهاRectangle R1 = new Rectangle();

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

R1برای‌شي‌getlengthفراخواني‌متد‌Rectangle R1 = new Rectangle();

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

اطراف.یمبیاندازخوداطرافبهنگاهیکافیست.می‌کنیمزندگیاشیاءازدنیاییدرما،ترافیكچراغ‌هایساختمان‌ها،حیوانات،انسان‌ها،هواپیماها،اتومبیل‌ها،ازاستپرما

ابداعراشی‌‌گبرنامه‌نویسیزبان‌هایاینكهازقبل.دیگرچیزهایازبسیاریوباالبرها،رویبر(BasicوFORTRAN،Pascal،Cهمانند)برنامه‌نویسیزبان‌هایشوند،دنیائیردبرنامه‌نویساناینكهبا.داشتندتمرکزاشیاءیاچیزهابجایactionsیااعمال

تادشباعثتناقضهمینخود.بودندسرگرمافعالباامامی‌کردندزندگیاشیاءاززبان‌هایکهاکنونهم.نباشندبرخوردارکافیقدرتازشدهنوشتهبرنامه‌های

زندگیبهبرنامه‌نویسانهستند،دسترسدرJavaو#Cهمانندشی‌‌گرابرنامه‌نویسیاسلوبباراخودبرنامه‌هایمی‌توانندومی‌دهندادامهشی‌‌گرادنیاییكدرخود

برنامه‌نویسیبامقایسهدرشی‌‌گرابرنامه‌نویسیفرآیند.بنویسندشی‌‌گرا‌تربخشرضایتهمآننتیجهوداردطبیعی‌تریبسیارماهیت(procedural)روالی.است

Object Oriented Programmingگرا‌برنامه‌نویسی‌شی

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

واقعدرمی‌باشند؟خاصچراوهستندچهاشیاء

کهاست(package)بستهالگوییكشی،تكنولوژی

کمكمعنیبانرم‌افزاریواحدهایایجاددرمابه

ابرنامه‌هخاصنواحیبرزیادیتمرکزاشیاء.می‌کند

زمان،تاریخ،اشیاءجملهازمی‌تواننداشیاء.دارند

ازاریبسیورکوردفایل،ویدئو،صدا،فاکتور،پرداخت،

رمبفراچیزیهرمی‌توانحقیقتدر.باشددیگرموارد

درشی‌‌گرابرنامه‌نویسیفرآیند.کردعرضهشییك

ماهیت(procedural)روالیبرنامه‌نویسیبامقایسه

ش‌تربخرضایتهمآننتیجهوداردطبیعی‌تریبسیار

.است

راگروالنویسیبرنامهبامقایسهدرگراشینویسیبرنامه

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

که«کاربرسویازشدهتعریفداده‌ایانواع»ایجادرویبرoopبرنامه‌نویسانتمرکز

کسیبایدید،کنرانندگیاتومبیلیبابتوانیداینكهازقبل.استمی‌شوندنامیدهکالس

دسیمهننقشه‌کشییاترسیمبااتومبیل،ساختمعموال.باشدساختهوطراحیراآن

ازقبل.کنیدرانندگیاتومبیلیكترسیمینقشه‌هایبانمی‌توانیدمتأسفانه.شودشروع

.شودساختهیترسیمنقشه‌هایرویازاتومبیلآنبایدکنیدرانندگیاتومبیلیبااینكه

ازیشیكایجادنقشهکالس،یك.هستندخانه‌هاترسیمینقشه‌هایهمانندکالس‌ها

بسازیم،نقشهیكرویازمتعددیخانه‌هایمی‌توانیمکههمانطوری.استکالس

پزخانهآشنقشهدرنمی‌توان.کنیمنمونه‌سازیکالسیكرویازشیتعدادیمی‌توانیم

هایمونهناشیاء.استامكان‌پذیرخانهآشپزخانهدرفقطآشپزیکرد،آشپزیبهمبادرت

.می‌شوندایجادهاکالسرویازکههستندواقعی

(Class & object)کالس‌و‌شي‌

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

ندکمی‌تعریفراموجودیتیكقالبکالس

کالسآنازواقعیهایینمونهاشیاءو

ردهنكاشغالایحافظههیچکالس.اشندمی‌ب

ازامادهدمی‌نمایشراموجودیتقالبتنهاو

فتعریمی‌توانشیچندینکالسیكروی

اشغالحافظهخودبراییكهرکهکرد

.یكدیگرندازمستقلواندکرده

(Class & object)کالس‌و‌شي‌

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

سویازشدهتعریفداده‌ایانواع»ایجادرویبر++Cبرنامه‌نویسانتمرکزهموداده‌ایاجزاءحاویکالسهر.استمی‌شوندنامیدهکالسکه«کاربر

برایسرویس‌هاییومی‌کنندکارداده‌هارویبرکهمتدهاستازمجموعه‌ای(ندمی‌کناستفادهکالسازکهدیگریتوابعوکالس‌ها)سرویس‌گیرنده‌ها

كیشاملمی‌تواندبانكیحسابکالسیكمثال،برای.می‌بیندتداركمی‌شوندمحسوبکالسداده‌ایاجزاءکهباشدموجودییكوحسابشماره

والمعم)می‌شودگفتهعضوتوابعکالس،یكازموجودیتهررفتار‌هایبهوگفتهمتدعضو،توابعبهجاواهمانندشی‌گرابرنامه‌نویسیزبان‌هایسایردر

ویعضتوابعدارایمی‌تواندبانكیحسابکالسیكمثال،برای.(می‌شودکاهش‌دهنده)برداشت،(موجودیافزایش‌دهنده)پس‌اندازیكایجادبرای

رسایو)توکارانواعازبرنامه‌نویس.باشدفعلیموجودینمایشو(موجودی.ی‌کندماستفاده(کالس‌ها)جدیدانواعایجاددرکاربرتوسطشدهتعریفانواع

ای‌و‌اجزاء‌تابعيها،‌اجزاء‌دادهکالس

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

بهیعترسرراآنگازپدالفشردنباوکردهرانندگیاتومبیلیبامی‌خواهیدکهکنیدفرضسیاربدهد؟رخبایددهید،انجامرااینكاربتوانیداینكهازقبلاتفاقیچه.درآوریدحرکت.باشدساختهوطراحیراآنکسیبایدکنید،رانندگیاتومبیلیبابتوانیداینكهازقبلخوب،ورتصطراحیهمانند.شودشروعمهندسینقشه‌کشییاترسیمبااتومبیلساختمعموالسببنآازاستفادهبارانندهکهاستگازپدالطراحیشاملترسیماتاین.خانهبرایگرفته

یپیچیدگشدن«پنهان»سببپدالحدیتا.کندحرکتسریعتراتومبیلتامی‌شودببسترمزپدالکههمانطوری،درمی‌آوردبحرکتسریعتررااتومبیلکهمی‌شودمكانیزمی

ببساتومبیلفرمانمی‌کند،کماتومبیلسرعتازکهمی‌شودمكانیزمیشدن«پنهان»نینچانجامبا.دیگرمواردومی‌کندهدایترااتومبیلکهمی‌شودمكانیزمیشدن«پنهان»

وترمزگاز،پدالازبراحتیوکردههدایترااتومبیلآسانیبهمی‌توانندعادیافرادکارهایی،پیچیدگیاتکننداستفادهسادهوکاربرپسند«واسط‌های»سایرودندهتعویضمكانیزمفرمان،

قشه‌هاینبانمی‌توانید،متأسفانه.نباشدمشخصرانندهبرایاتومبیلداخلیمكانیزم‌هایازاتومبیلآنبایددکنیرانندگیاتومبیلیبااینكهازقبلکنید،رانندگیاتومبیلیكترسیمی

قعیواگازپدالدارایشدهساختهکامالاتومبیلیك.شودساختهترسیمینقشه‌هایرویخودبخودیاتومبیل.نیستکافیهماینامااست،اتومبیلسریعدرآوردنحرکتبهبرایستورداتومبیلبهتاآوردفشارگازپدالرویبررانندهاستالزماینروازنمی‌گیرد،شتاب.کندصادرراسریع‌ترحرکت

ای‌و‌اجزاء‌تابعيها،‌اجزاء‌دادهکالس

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Encapsulationبندیبستهیا

نرم‌افزار(package)کردنبندیبسته.می‌نامندEncapsulationرامشخصبسته‌بندییكدرکالسیكمتدهایوخصوصیاتکلیهدادنقرار

.کندعرضهرانرم‌افزارازمجدداستفادهویژگیمی‌تواندکالس‌هابصورت

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Interface

Interfaceبایدگیرندمی‌راآنکههاییگروهیمه‌هکهشودمی‌فیتعرقراردادیكعنوانبه

وکندمی‌تعریفراقراردادیكازکردبایدچهقسمتInterface.کننددنبالراآن

Interface.کنندمی‌تعریفراقراردادهااینانجامچگونگیقسمتشدهمشتقهایگروه

تعریف.دکننمی‌کمكاستانداردساختاریكمینأتبهاغلبوباشدمی‌اعضااعالمشاملتنها

خواهیدمیکهدهدمی‌نشانInterface.باشدمی‌شدهمشتقگروهمسئولیتءاعضاعملكرد

اریکشودمی‌سازیپیادهچگونهکهاینبهوگیردقراراستفادهموردچگونهآبجكتیك

.کردسازیشبیه#Cدرراچندگانهوراثتعملكردتوانمی‌Interfaceکمكبه.ندارد

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

تهداشرازیردسترسیسطحسهازیكیتوانندمی‌کالسدرونتابعیوایدادهاجزاء:باشند

•Private

•Public

•Protected

Access Modifiers

:دسترسیسطوحانواع.1:privateیاپروژهخودداخلتنهاشدهتعریفکدقطعهکهکندمی‌مشخصدسترسیسطحاینScopeصورتبهکهکالسیمثالبرای.باشنددسترسقابلمربوطهprivate

تعریفprivateصورتبهکهکالسیاعضاییابود،نخواهددسترسقابلشدهتعریفsolutionدرکهپروژه‌هاییسایرازوبودهدسترسقابلپروژههمانداخلتنها،باشدشدهتعریف.بودخواهنددسترسقابلباشدمی‌}{عالمت‌هایبینکهکالسهمانScopeدرتنها،شده‌اند

.2:publicبودخواهنددسترسقابلپروژه‌هاسایروپروژهقسمت‌هایتمامیدرباشند،شدهمشخصدسترسیسطحاینباکهکدهایی.

.3internal:دسترسیسطوحinternalبردکارکالس‌هابرایدسترسیسطحاین.داشتنخواهنددسترسیآنهابهنام‌هافضایسایروبودهدسترسقابلنامفضایهمانداخلتنها.داردزیادی

.4protected:مفهومازکهزمانیدسترسیسطحاینinheritanceدادخواهیمقراربررسیموردتفصیلبهرادسترسیسطحاینوراثتقسمتدر.داردکاربردکنیماستفاده.

.5internal protected:قسمتهمانندprotectedدسترسی‌هایازتلفیقیکهشدخواهددادهتوضیحوراثتقسمتدرنیزدسترسیاینinternalوprotectedباشدمی‌.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مجددبكارگیریازفرمیارث‌بری

کالس‌هایآندرکهاستنرم‌افزار

رفتارهایوداده‌ایاجزاءشدهایجاد

کالسیكاطالعاتبراساسراخود

نیازصورتدروآوردهبدستموجود

.هستندجدیدقابلیت‌هایحاوی

شکاهسببنرم‌افزارمجددبكارگیری

وشدهنرم‌افزارتوسعهزمانمدت

افزایشموثریبطورآنراکیفیت

.می‌دهد

Inheritanceوراثت

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Polymorphismریختیچند«صیخابرنامه»اینكهبجایبرنامه‌هاتامی‌دهدامكانچند‌ریختی

.باشندداشته«کلیبرنامه»یكحالتباشند،کهبنویسیمبرنامه‌هاییتامی‌دهدامكانریختیچندعمل،در

همانازبخشیکهکنندکالس‌هاییازاشیاءپردازشبهمبادرتازیئاشیاآنهاهمگیهمچنانكههستند،کالسمراتبسلسلهچندریختی،کمكبه.می‌باشندمبناکالسمراتبسلسله

سترشگکهکنیمپیاده‌سازیوطراحیراسیستم‌هایمی‌توانیمبامی‌توانندجدیدکالس‌های.استآسانترآنهابسط‌پذیریو

ودهافزآنبهبرنامه،عمومیبخش‌هایدراصالحیاتغییرکمیوارثیتمراتبسلسلهازبخشیجدیدکالس‌‌هایمادامیكهشوند،یی‌هابخشتنها.می‌کندپردازشآنراجامعبطوربرنامهکهباشند

تغییرجدیدکالس‌هایبایافتنتطبیقبرایبایدکهبرنامهازکالس‌هایوجودازتادارندنیازکههستندآنهاییدنشوداده

.گردندمطلعمستقیمامراتبسلسهبهشدهافزودهجدید

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

تبرداشیكمفهومبهواستانتزاعیاتجردمعنایبهلغتدرنیروییهمانانتزاعواقعدر.باشدمی‌مشاهداتمجموعهازواحدذهندرراجنگلمفهومدرختزیادیتعداددیدنباکهاستفحهصهایپیكسلازایمجموعهدیدنبایاکندمی‌تداعیانساندر.کندمی‌ایجادذهندرراخاصتصویریكکامپیوترنمایش

کهندکتعریفرااشیائیکندسعیبایدنویسبرنامهروشاینموارههاوواقعدر.کندنیازبیبیشتراشیاءتعریفازرابرنامهوبعتوایافتنازبعدیعنی.بگرددمادراشیاءدنبالبهبایدبایدنظرموردسیستمسازیپیادهبراینیازموردهایداده

(شئ)کالس"یك"توسطراهادادهوتوابعازایمجموعهدادننمایشمعنیبهاصلدرAbstraction.کندسازیپیاده.استگیرندهسرویسبهنیازموردجزئیاتتنها

Abstraction

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Abstraction

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

درهکهستندخصوصیاتیومتدهاشاملتنهاپایه،هایکالسبریارثدر

به.هستندمشتركشوندمی‌مشتقهاکالساینازکههاییکالسبین

اشند،بمی‌نشئیكازکاملیمفهومدارایپایههایکالسخوددیگرعبارت

نتوانهاینكبرای.استمعنیبیهاکالساینازجدیداشیاءایجاددرنتیجه

abstractصورتبهراآنها.کردتعریفاینمونهاشیاءپایههایکالساز

.نماییممی‌تعریف

.کردایجادabstractهایکالسازجدیدیاشیاءمی‌توانناینكهنكته

Abstract Class

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

راشیداده‌هایمی‌تواندشییكعضوتوابعکهکردیدمشاهدهیكامکددادهاعضایکهمی‌دانندعضوتوابعچگونه.کنددستكاری

thisبناماشاره‌گریكطریقازشیهرکنند؟دستكاریرااشیاءاز.دارددسترسیبخودمتعلقآدرسبه(#Cدرکلیدیکلمهیك)

اشاره‌گرنمی‌باشد،شیخودازبخشیشی،یكthisاشاره‌گرthisشیكغیراستاتیعضوتابعهربهضمنیآرگومانیكبصورتبصورتthisاشاره‌گرازاشیاء.(کامپایلرتوسط)می‌شودارسالهمراجعبرایصریحیا(می‌دهیمانجامآنرابخشایندرکه)ضمنی.می‌کننداستفادهخودعضوتوابعودادهاعضای

در‌متدهای‌کالسthisمفهوم‌مرجع‌

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

ازشییكاولیهمقداردهیبهمبادرتآنازاستفادهبامی‌توانکهباشدداشته(constructor)سازندهیكمی‌تواندمی‌کنیداعالنکهکالسیهر•راآنمی‌تواندپایلرکامکهاینروستازباشد،شدهتعریفکالسنامباهمنامبایستیکهاستویژهعضوتابعیكسازنده.کردشیایجادهنگامبهکالس

دهند،رگشتبمقدارنمی‌تواندسازنده‌هاکهاستایندردیگرتوابعوسازنده‌هامابینموجودتفاوتمهمترین.دهدتشخیصکالسعضوتوابعدیگرازکالسیكرویازشیکهزمانهر.می‌شوداعالنpublicبصورتسازنده‌هامعموال.(voidحتی)باشندداشتهبرگشتینوعنمی‌توانندبنابراینمطمئنحالتیچنیندرمی‌شود،ایجادکهاستشیهربرایسازندهیكفراخوانینیازمند#C.گرددمی‌اجراکالسسازندهاتوماتیكکنیممی‌ایجاد

بصورتی،شایجادهنگامبهسازندهفراخوانی.استشدهاولیهمقداردهیبدرستیشودگرفتهبكاربرنامهتوسطاینكهازقبلشیکهبودخواهیماینمی‌بیندركتداپیش‌فرضسازندهیكکامپایلراست،نكردهمشخصراسازنده‌ایصریحبصورتکهکالسیهردر.می‌شودانجامضمنییاغیرصریح.نمی‌باشدپارامتردارایسازنده

تابع‌عضو‌سازنده‌و‌تابع‌عضو‌مخرب

نام.می‌باشدعضوتابعازدیگرینوع(مخرب)نابودکننده•کالسنامو(~)مدکاراکترباکالسیكمخربتابع

بصورتکالسیكمخرب.می‌شودمشخصیفراخوانشیرفتنبیناززماندرو(غیرصریح)ضمنیتبرگشمقداریونمی‌کنددریافتپارامترمخرب.می‌شود.ردکمشخصدسترسیسطحآنبراینمیتوانونمی‌دهد

وباشدداشتهمخربیكفقطمی‌تواندکالسیك.کردسربارگذاریراآننمی‌توان

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Propertyخصوصيت‌یا‌

(propertyخصوصیتیا)اعضایبهدسترسیبرایشارپسیدراستانداردی

propertyهر.باشدمی‌کالسیكداخلدرprivateدسترسیسطحباداده‌ای

برایبخشیكو(set)بلوكمقداردهیجهتبخشیكاست؛بخشدودارای

صورتبهبایدهاprivate.propertyدادهیك(get)بلوكمقداربهدسترسی

publicباشنددسترسیقابلنیزدیگرکالس‌هایدرتاشوندتعریف.

PropertyبدنهکههاییgetندارندWrite-Onlyبدنهکهآنهاییوsetندارندرا

Read-Onlyمی‌گوییم.

فرادرس

FaraDars.org

Page 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بدنهارامقداریبایدحتماgetبدنهکنیددقتخوانیدمی‌راPropertyمقدارشماکه ب

یعنی،باشدaccess-modifierدارایتواندمی‌بدنهاینهمچنین.برگرداندreturnدستوررادسترسیسطحکهصورتیدر.کندمی‌مشخصرامقدارخواندندسترسیسطح

.شودمی‌گرفتهنظردرpublicپیش‌فرضصورتبهنكنیدمشخص‌داخل‌.‌مثال‌قبلی‌استدر‌ Setمتددقیقا‌معادل‌این‌بدنه‌:‌setبدنه‌• زمانی‌که‌شما‌مقداری‌را

Property بدنه‌ست‌کنید‌،set‌ پیش‌فرضی‌وجود‌دارد‌پارامتر‌setداخل‌بدنه‌.‌شودمی‌اجرامی‌توانید‌از‌و‌شما‌گرفته‌آن‌قرار‌داخل‌ Propertyبرایمقدار‌ست‌شده‌که‌ valueنامبه‌

دسترسی‌سطح‌ setبدنهبرای‌توان‌همچنین‌می‌.‌داشته‌باشیددسترسی‌به‌آن‌ setطریق‌بدنهنظر‌در‌ publicفرضبه‌صورت‌پیش‌نكنید،‌دسترسی‌را‌مشخص‌مشخص‌کرد‌که‌اگر‌سطح‌

.شودگرفته‌می‌

Propertyشکل‌کلي‌یک‌خصوصيت‌یا‌

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

لیاتیعمداریمتصمیم.کنیمایجادشخصموجودیتبرایکالسیكبخواهیمکنیدفرضهاPropertyبارادادیمانجامRectangleکالسدرSetوGetمتدهایبوسیلهکه

دومقابل،کددر.کنیممی‌ایجادمقابلشكلبهراPersonکالس.کنیمپیاده‌سازیPropertyنام‌هایباFirstNameوLastNameخواندنعملیاتکهکردیمتعریف

بهنیازیحتماهاPropertyنوشتنبرای.دهندمی‌انجامرامربوطهفیلدهایازنوشتنوبه.بنویسیدsetیاgetبدنهبرایراکدیهرتوانیدمی‌شما.نیستآنهابرایFieldتعریفکاملنامکهکنیمتعریفPropertyیكPersonکالسبرایخواهیممی‌مثالعنوانکالسبهدوبارهنگاهی.گذاریممی‌FullNameراخاصیتایننام.برگرداندراشخص

PersonخاصیتوFullNameنهبدتنهاخاصیتاینباشیدکردهدقتاگر،کنیممی‌getبدنهوداردsetکهاستآنامرایندلیل.ننوشتیمآنبرایراFullNameتنها

مقداریبخواهیمکهصورتیدروبرمی‌گرداندراlastNameوfirstNameازترکیبی.شویممی‌مواجهخطاپیغامبا،بریزیمFullNameداخل

ندارندراsetبدنهکهآنهاییو،Write-OnlyندارندgetبدنهکههاییPropertyبهRead-Onlyودخبرعالوهتوانیممی‌گفتیمهمقبالکههمانطورهمچنین.گوییممی‌

Propertyبدنه‌هایازیكهربرایgetوsetکنیممشخصدسترسیسطحنیز.

Propertyمثالي‌برای‌ایجاد‌‌

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

تننوشوخواندنعملیاتتنهاکنیممی‌تعریفکهPropertyاوقاتگاهی.بگیریدنظردرراPersonکالسمثال،برای.کندمی‌کنترلرافیلدیكکامپایلر.نوشتنیزمقابلشكلبهتوانمی‌راباالخصوصیتبهمربوطکدشدهوشتهنخاصیتبرایفیلدیكخودکارصورتبهباال،کدکامپایلازبعد

از.نویسدمی‌خودکارصورتبهراآنsetوgetبدنهوکردهتعریفکنترلقابلیتالبتهوکمترکدحجمهاAuto-Propertyمزایای

راباالمثال.باشدمی‌هاPropertyنوشتنوخواندنعملیاتبهدسترسیقابلکالسداخلتنهاFirstNameخاصیتکهدهیممی‌تغییرنحویبه

-Autoازکهزمانیباشید،داشتهتوجهنكتهاینبه.باشدنوشتنPropertyبایدحتما‌می‌کنیداستفادههاgetوsetغیردربنویسید،را

زبان6نسخهدرمشكلاینالبته.کردخواهیددریافتخطاپیغاماینصورت.استشدهبرطرفشارپسی

Automatic Propertiesایجاد

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

به.ندکمی‌دسته‌بندیراکالس‌هاکهاستسازمانیساختاریكنامفضایشمابهنامفضای.کالس‌هاستکردنتعریفبرایمنطقه‌ایدیگرعبارتنام‌هافضای.کنیددركوپیداراکدهایتاناساسوپایهکهکندمی‌کمكبودبهبرایمعموالآنهانیستند،ضروریشارپسیبرنامه‌نویسیبرای

اسامییتمامنام،فضایازاستفادهبدون.شوندمی‌استفادهکدفهمقابلیتبرایجاییکلی،نامفضاییكدرکنندمی‌سعیبرنامهدراستفادهموردازاگراام.می‌شودیكساناسامیبینبرخوردموجبکهبگیرندنظردرخوددوجوبهبرنامهدراشكالیهیچشود،استفادهجداگانه‌اینام‌هایفضای

مجموعهازاسامیازمجموعه‌ایتفكیكبراینامفضایواقعدر.آیدمی‌ن.رودمیکاربهدیگر

Namespaceفضای نام

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

انهکتابخدرموجودنام‌هایفضایمهمتریناز.Net Frameworkنامفضای

Systemفضایداراینامفضایاین.استبه.می‌باشدخودداخلدردیگرینام‌هایحاویکهSysytem.IOمثالعنوان

وخروجیوورودیباکاربرایکالس‌هایی.باشدمی‌فایل‌هاباکار

#Cچند نمونه فضای نام موجود در

فرادرس

FaraDars.org

Page 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 declarationsnamespace namespace_name2

{// code declarations

}}

using namespace_name1.namespace_name2;

using namespace_name; فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Enumشمارشي‌یادادهآشنایي‌با‌مفاهيم‌نوع‌اربسیبرنامهدرشمارشقابلوثابتمقادیرتعریفجهتEnumیاشمارشیدادهنوع

شماره0عددازخودکاربطورمی‌شوندتعریفدادهنوعایندرکهمقادیری.داردکاربرد

.می‌شوداضافهآن‌هابهیكیترتیببهومی‌شوندگذاری

برراثابتمقادیرعنوانEnumداده‌اینوعبرایToString)(متدحالتایندر

.می‌گرداند

.استintبهصریحنوعتبدیلازاستفادهعددیمقدارنمایشبرایعرفروش

:کنيمعملزیربصورتکافيستمقادیرشمارهتغييرجهتenum TypesOfColo

{Black=-5,Green=20,

White,Red,Blue

}

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

staticکليدی‌کلمه‌‌آشنایي‌با‌به‌طور.دنباشنوابستهیئشیهیچبهکالسیكاعضایکهداریدنیازگاهیلقابمی‌شودساختهکالسآنازکهشیئیطریقازکالساعضایمعمول

کهنیدکتعریفطوریراکالسازعضویمی‌توانیدشمااماهستنددسترسیآنبه(نقطهعملگروکالسنامطریقاز)مستقیماشیئیهیچساختبدون

ازعضوآنتعریفازقبلعضوی،چنینساختبرای.باشیدداشتهدسترسیکالسیكازعضویکههنگامی.می‌کنیداستفادهstaticکلمه‌ی‌کلیدی

ازایobjectهیچساختبدونعضوآنمی‌شود،تعریفstaticبه‌صورتآنازیشیئهیچبهواستاشیاءازمستقلواقعدرودسترسیقابلکالسبه‌صورترامتغیرهاهمومتدهاهممی‌توانیدشما.نمی‌شودوصلکالس

staticمتدمثالعنوانبه.کنیدتعریفshowکالسازMessageBoxمی‌باشداستاتیكمتدیك.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

staticای‌اجزاء‌داده

درودنیستنشئبهوابستهکههستنداعضاییحقیقتدرstaticاعضایهرازایهبیعنی.می‌باشندمشتركکالسیكازشدهساختهاشیاءکلبین فرادرس.نیستندشئبهوابستهچونندارند،متفاوتیمقدارشئ

FaraDars.org

Page 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

Page 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

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

mainدر‌متد‌staticکليدی‌کلمه‌‌

Main)(متددر‌staticکلیدیکلمه‌یاینمتوجه‌لحظه‌یاینتاحتمااعضایازیكیوبرنامه‌تانشروعنقطه‌یMain)(متدکهآن‌جااز.شده‌ایددهزصدا،شیئیهرگونهساختازپیشوهرچیزازقبلبایداست،کالستعریفstaticبه‌صورتراMain)(متدکهاستدلیلاینبه.شود

فراخوانیMain)(متدشود،ساختهکالسازشیئیاینكهازقبلتامی‌کنیم.بگیریمدستدررابرنامهکنترلبتوانیممتدایندرونتاشده

static class Program{

static void Main(){

Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());}}

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

انواع‌روش‌ارسال‌پارامتر‌به‌متدPassمقدارباارسالروش.۱ by valueزماندرومی‌کنیمتعریفمعمولیمتغیرهایتابعپارامترهایدرروشایندر

هبآرگومانعنوانبهرافراخوانندهازمتغیرهاییاسامییاثابتمقادیرفراخوانیتأثیریهیچمتدهنبددرپارامترهابررویتغییریهر.می‌کنیمارسالمتدپارامترهای

دررهاپارامتاولیهمقدارعنوانبهتنهاآرگومانهاونداردفراخوانندهآرگومانهایبررویگرفتهرنظدرورودیعنوانبهتنهاپارامترهاارسالشكلایندر.می‌شوندگرفتهنظرpassروشبهارسال.شوندمی by valueمی‌باشدفرضپیشصورتبه.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

انواع‌روش‌ارسال‌پارامتر‌به‌متدPassارجاعباپارامترارسالروش.۲ by reference

متغیرمقدارمی‌کنیم،ارسالتابعیكبهrefصورتبهرامتغیریوقتیغییریتهرومی‌شودفرستادهمتدبدنهبهمتغیرآدرسبلكهنمی‌شودارسال

مترهاپارنوعاینبه.می‌شوداعمالنیزاصلیمتغیربررویمحلیمتغیردر.می‌گویندارجاعی

ه‌‌آرگومان‌ها‌در‌فراخوانندبرروی‌هر‌تغییری‌برروی‌پارامترها‌در‌بدنه‌متد‌.می‌شوداعمال‌

متد‌و‌هم‌ارسال‌به‌هم‌درپشت‌آرگومان‌در‌زمان‌refنوشتن‌کلمه‌کلیدی‌.الزامی‌می‌باشددر‌پشت‌تعریف‌پارامتر‌در‌متد‌

ده‌اولیه‌شمقداردهی‌می‌شود‌باید‌روش‌به‌متد‌ارسال‌آرگومانی‌که‌به‌این‌.باشد

در‌نظر‌گرفته‌هم‌ورودی‌و‌هم‌خروجی‌عنوان‌روش‌پارامترها‌به‌در‌این‌.می‌شوند

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

انواع‌روش‌ارسال‌پارامتر‌به‌متدoutکلیدیکلمهباخروجیتنهاعنوانبهپارامترارسالروش.3

ادهاستفزمانیپارامترهااین.می‌باشدارجاعیصورتبههمارسالشیوهاینواهیممی‌خبلكهباشیم،نداشتهرامتدبهاطالعاتیارسالقصدکهمی‌شود.برگرددمتدازاطالعاتتدمدرونبایدحتماولینیستمتدبهارسالازقبلمقداردهیبهنیازی

.بگیردمقدار(شدهفراخوانیمتدیبهبازگشتازقبل).شوندمی‌گرفتهنظردرخروجیعنوانبهتنهاپارامترهاروشایندر

valueفرستادنبهتنهاoutوrefازاستفاده typeنمی‌شودمحدودهاreferenceفرستادنهنگامبلكه typeقراراستفادهموردمی‌توانندنیز.گیرد

فرادرس

FaraDars.org

Page 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

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Reference typeو‌Value typeتفاوت‌Value Typeابفراخوانیروشبهفرضپیشبصورتمتد،یكبهشدنفرستادهموقعها

تغییرهرگونهومی‌کنندکپیمتدآرگوماندرونراخوددرونمقدارومی‌شوندارسالمقدارRefاما.داشتنخواهداصلیدادهدرتغییریگونههیچمتد،آرگومان‌هایدرون Typeها

اقعودرکهخودشاننامبازیرامی‌شوندارسالارجاعبافراخوانیبصورتفرضپیشبصورتدادهویربرتأثیرمتد،درونتغییرهرگونهنتیجهدر.می‌شوندفرستادهمی‌باشدن‌هاآبهارجاعوstack:کنیمتقسیمقسمتدوبهرابرنامهیكmemoryاگرگذاشتخواهداصلی

heap.همهصورتایندرValue typeدرstackتفاوتاینباولیمی‌شوندذخیرهReferenceدرکه TypeهاInstanceدرآنheapچیزیواقعدرومی‌شودنگهداری.Referenceهمانیاheapبهآدرسجزنیستچیزیبودخواهدstackدرکه

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

partialکالس‌های‌بخشي‌یا‌لفایدوازبیشتریادودرراکالسیكاجزاءتوانیدمی‌partialکلیدیکلمهازاستفادهبا

.باشدیكسانهافایلهمهنامفضایاینكهبرمشروط.دهیدقرارجداگانه:partialهایکالسازاستفادهمزایای

.استزیادیبسیارکالس‌هایدرخواناییافزایش-۱نفرچندبینراآنمی‌توانیدبراحتیمی‌کنیدکارپیچیده‌ایکالسبررویشمااگر-۲

.می‌نویسدراخودکالسکدهایجداگانهفایلیدرافرادازکدامهروکنیدتقسیمی‌شوند،متولیداتوماتیكبصورتکدهابرخیکهمكان‌هاییمی‌توانیدبراحتیشما-3

Windows)ویندوزتحتفرم‌هایکدمثل Forms, Web Service)،ازراراحتبسیارتغییراتاعمالنتیجهدر.کنیدتفكیكمی‌نویسیددستیبصورتکهکدهایی

طتوسکهکدیقسمتمی‌کنیمایجادویندوزیفرمیكوقتیمثالبطور.می‌شودترDesignerهکداردوجودجداگانهفایلیدرهستفرمظاهربهمربوطومی‌شودنوشته

.باشدخواناتروباشدجداکدآنازنویسیممیماکهکدیمی‌شودباعثاستprivateخصوصیاتدارایکهکالس‌ها‌ازبخشمی‌توانیمکالس‌هاتعریفدر-4روانوخواناییبهکاراین.کنیمتفكیكاستpublicخصوصیاتدارایکهبخشیازرا

.می‌کندفراوانیکمكکالسفهمیدن

فرادرس

FaraDars.org

Page 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

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

شکل‌کلي‌بازنویسي‌عملگرهاoperatorیكتعریفبرایoperatorکلیدیکلمه‌یازعملگر،یكکردنoverloadبرای methodتعریفخودشکالسبهمربوطخاصعملیكبرایکهمی‌کنیماستفاده

.می‌شودoperatorازحالتدو methodداردوجود:1unary operators binaryوتكیعملگرهای) operators ،می‌کنیدoverloadراآنکهعملگریاین‌جادر.می‌بینیدزیردرراهرکدامکلیفرم.دوتاییعملگرهای2)

returnاگرچه.شدخواهدreturnکهاستمقدارینوعکننده‌یمشخصret-type.می‌شودopجایگزین/یا+مثل typeکالسیهماننوعازاغلباماباشدنوعیهرازمی‌تواندreturnبودنیكسان)ارتباطاین.می‌شودoverloadآندرoperatorکهاست typeعمگرهایازاستفادهراحتیباعث(کالسجنسباoverloadبرای.می‌شودشده

unary operatorقسمتدرعملوندهاoperandبرای.می‌گیردقرارbinary operator،قسمتدرعملوندهاهاoperand1وoperand2داشتهتوجه.گرفتخواهدقرارoperatorکهباشید methodهمبایدهاpublicهموstaticباشند.

unaryدر operator،عملوندنوعها(operand)کهکالسینوعبابایدoperatorنمی‌توانیدبنابراین.باشدیكسانمی‌شودتعریفآندرoperatorبرایراسی‌شارپهایoperatorاینكهدیگرنكته‌ی.کنیدتعریفstringوintبرایرا+عملگرمجددانمی‌توانیدمثال،برای.کنیدتعریفنساخته‌ایدخودتانکهاشیایی parametersازنبایدref

.کننداستفادهoutو

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثال‌برای‌بازنویسي‌عملگرها

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

+بازنویسي‌عملگر.دباشمیخطادارایبرنامهسومخطکنیددقتوعنبرای+عمگرکهاستدلیلاینبهخطااین

توانیممی.استنشدهتعریفMydateکالسزیرشكلبهMydateکالسبرای+عملگر

یخروجوشودمیبرطرفخطا.کنیمبازنویسی.کنیممیمشاهدهرابرنامه

public static mydate operator +(mydate x, int n){

mydate t = new mydate(x);for (int i = 0; i < n; ++i)

t.increment();return t;

}

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

+ادامه‌بازنویسي‌عملگررالیقببرنامهدرموجودخطای+عملگربازنویسیهب+عملگرازنویسبرنامهاگراماکردبرطرفمیخطابرنامهمجددنمایداستفادهمقابلشكللشكبهمجددرا+عملگرمشكلرفعبرایدهداینبهوشرابنبنابراینبا.کنیممیبازنویسیزیر

.شودمیدادهپذیریجابجاخاصیتعملگر

public static mydate operator +(int n, mydate x){

mydate t = new mydate(x);for (int i = 0; i < n; ++i)

t.increment();return t;

}

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

‌رابطه‌ای بازنویسي‌عملگرهاRelational)رابطه‌ایعملگرهای Operators)به‌سادگیمی‌توانند<یا==مثلoverloadرابطه‌ایعملگریكمعمول،به‌طور.شوندoverloadمقدارشدهtrueیا

falseراreturnجایبهمواردایندراگر.کرداستفادهشرطیعبارت‌هایدرآن‌هاازبتوانوشودحفظرابطه‌ایعملگرهایاستانداردکاربردوحالتکهدلیلبه‌این،می‌کند‌relationalبایستیکهاین‌جاستدیگرمهمنكته‌ی.کرده‌ایدمحدودراoperatorاینکاربردشدتبه،کنیدreturnرادیگریچیزboolمقادیر operatorsبه‌طوررا=<)هایoperatorبرایمورداین.کنیدoverloadنیزرا>بایستی،کردیدoverloadرا<اگرمثالبه‌عنوان.کنیدoverloadجفتی ==)و(=> صادقنیز(=!.است

public static bool operator >(mydate x, mydate y){

if (x.Year > y.Year||(x.Year==y.Year && x.Month>y.Month)||(x.Year==y.Year && x.Month==y.Month && x.Day>y.Day))return true;

elsereturn false;

}

public static bool operator <(mydate x, mydate y){

if (x.Year < y.Year||(x.Year==y.Year && x.Month<y.Month)||(x.Year==y.Year && x.Month==y.Month && x.Day<y.Day))return true;

elsereturn false;

}

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

--و‌++بازنویسي‌عملگرهای‌کافی.استآسانبسیار--و++کردنoverloadسی‌شارپدر

اماکنیدreturnراآنودهیدکاهشیاافزایشرامقدارکهاستخودکاربه‌طورسی‌شارپ.دهیدتغییرراoperandشیءمقدارنباید

.می‌گیردنظردرشمابرایراprefixوpostfixحالت‌های

public static mydate operator++(mydate x){

mydate t = new mydate(x);t.increment();

return t;}

private void button4_Click(object sender, EventArgs e){

mydate d1 = new mydate(27, 12, 1394);mydate d2 = new mydate();

d2 = d1++;MessageBox.Show("d1 = " + d1.ToString() + "\nd2 = " + d2.ToString());

}

private void button4_Click(object sender, EventArgs e){

mydate d1 = new mydate(27, 12, 1394);mydate d2 = new mydate();

d2 = ++d1;MessageBox.Show("d1 = " + d1.ToString() + "\nd2 = " + d2.ToString());

}

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

conversionبازنویسي‌تبدیل‌نوع‌یا‌dataشاملکهکنیداستفادهعبارتیدرکالسیكشیءازمی‌خواهیدمواقعبرخی typeمواردبعضیدر.استنیزدیگریهایoverloadچندیایكکردنoperator

شمابهارپسی‌شموارد،ازدستهاینانجامبرای.استنظرتانموردنوعبهکالسنوعازسادهتبدیلیكداریدنیازشماکهچیزیگاهیاما.دهدانجامشمابرایراکاراینمی‌تواندoperatorازخاصینوعمی‌دهداجازه methodکهبسازیدراconversion operatorمی‌شودنامیده.Conversion operatorنوعبهراشماکالسازشیءیك

conversionازحالتدو.می‌کندتبدیلاستنظرتانمدکهدیگری operatorاستموجود:implicitوexplicitاستزیرشكلبهآن‌هاکلیفرمکه.Conversion.استتبدیلازبعدکالسمقدارvalueوکنیدتبدیلآنبهراsource-typeداریدقصدکهاستنوعیکننده‌یمشخصtarget-typeاین‌جادر

operatorبامطابقرااطالعاتtarget-typeمی‌گرداندباز(returnمی‌کند).conversionاگر operatorبه‌طورimplicitبنابراینشود،مشخصconversionیكباهمراهعبارتیكدرشیءکهحالتیمثلشد،خواهدانجاماتوماتیكبه‌صورت

data typeنوعازدیگریtarget-typeهنگامی‌که.استتعاملدرconversionبه‌صورتexplicitکههنگامیبنابراینباشد،شدهتعریفcastاستنیازموردconversionیكبراینمی‌توانیدکهکنیدتوجه.می‌شودفراخوانیsource-typeوtarget-typeهمimplicitوexplicitاگر.کنیدتعریفراconversionرا

.کنیددقتبایدexplicitیاimplicitبینانتخاببرایقوانین،اینعالوه‌بر.استنیازموردcastونمی‌شودانجاماتوماتیكبه‌صورتتبدیلکنید،تعریفexplicitبه‌طورimplicit conversionفقدانچهیاوال:کنیدپیرویقانوندواینازموردایندراطمینانکسببرای.باشدخطاازعاریکامال‌تبدیلکهگیردقراراستفادهموردزمانیباید

‌.دهدرخنباید(…وعالمتتغییرسرریز،کوتاه‌سازی،مثل)اطالعاتی راقانوندوایننتواندconversionاگر.شودبرنامهدرخطایاexceptionبروزباعثنبایدتبدیلثانیاexplicitازبایدکند،رعایت conversionببریدبهره.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Mydateبرای‌مثال‌نوعبازنویسي‌تبدیل‌public static explicit operator int(mydate x){

int n=0;for(int i=1;i<=x.Month;++i)

n=n+endofmonth[i];return n + x.Day;

}

public static implicit operator string(mydate x){

return x.ToString();}

private void button4_Click(object sender, EventArgs e){

int a;mydate d1 = new mydate(22, 7, 1393);

a = (int)d1;MessageBox.Show(a.ToString());

}

private void button5_Click(object sender, EventArgs e){

mydate d = new mydate(22, 4, 1392);string s1 = d;

MessageBox.Show(s1);}

وودنمی‌شانجاماتوماتیكبه‌صورتتبدیلکنید،تعریفexplicitبه‌طورراconversionاگرcastاستنیازمورد.

تبدیلهموimplicitتبدیلهمtarget-typeوsource-typeیكبراینمی‌توانید•explicitکنیدتعریف.

classنمی‌توانید• typeداده‌ینوعبهراobjectکنیدتبدیل.typeیاsource-typeدرconversionکهباشدکالسیهمانجنسازبایستی

conversionتبدیلنمی‌توانیدمثالبرای.استشدهتعریفآندرdoubleبهintنوازرا.کنیدتعریف

.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

falseو‌trueبازنویسي‌کردنunaryبه‌عنوانمی‌توانندنیزfalseوtrueکلیدیکلمات operatorsبه‌منظورoverloadنسخه‌ی.گیرندقراراستفادهموردکردنoverloadاینشده‌یoperatorها

،ifکردنکنترلبرایکالسآناشیایازمی‌توانید،می‌شوندoverloadکالسیكبرایfalseوtrueهنگامی‌که.می‌شودشخصی‌سازیمی‌سازیدشماکهکالسیبهتوجهباfor،whileوdo-whileکنیداستفاده?همچنینو.

Operatorهایtrueوfalseباهمبایدoverloadراآن‌هاازیكیفقطنمی‌توانیدوشوندoverloadآن‌هادویهر.کنیدunary operatorآن‌هاکلیفرموهستند فرادرس.می‌کندreturnراboolمقدارهریكکهکنیددقت.استزیربه‌صورت

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

falseو‌trueمثال‌بازنویسي‌کردنMydateکالسبراینحویبهراfalseوtrueبخواهیمکنیدفرض

دباشنبودنوسالاولروزمعنیبهتاریخیكبودنtrueکهکنیمبازنویسی.نیستسالاولروزمعادلتاریخ،شیکهاینستمعنیبهfalseو

خطابرنامهfalseوtrueبازنویسیبدونکنیدمیمشاهدهکههمانطورراfalseوTrueعملگرهایMydateکالسدرونکهصورتیدرامادارد.گرددمیبرطرفخطالکنیمبازنویسیزیرشكلبه

public static bool operator true(mydate x){

return x.Day == 1 && x.Month == 1;}

public static bool operator false(mydate x){

return !(x.Day == 1 && x.Month == 1);}

private void button5_Click(object sender, EventArgs e){

mydate d1 = new mydate(1, 1, 1395);if (d1)

MessageBox.Show("Happy new year");}

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

‌به‌خاطر‌داشته‌باش يدموارد‌زیر‌را‌هنگام‌سربارگذاری‌عملگرها.كردoverloadتوانميراادامهدرشدهذكرعملگرهایتنها-1

Unary Operators :

+ - ! ~ ++ -- true false

Binary Operators

+ - * / % & | ^ << >> == != > < >= <=

. باشد voidخروجي متدهاي بكار گرفته شده در سربارگذاري عملگر ها نمي تواند -2

overloadingحداقل يكي از آرگومانهاي بكار گرفته شده در متدي كه براي -3

. عملگرها بكار مي رود بايد از نوع كالس حاوي متد باشد

. تعريف شوند staticو publicمتدهاي مربوطه بايد به صورت -4

ا هم ر< را سربارگذاري مي كنيد بايد جفت متناظر آن يعني > هنگامي كه اپراتور -5

. سربارگذاري نماييد

شده overloadنيز =+ مي كنيد خودبخود overloadرا + هنگاميكه براي مثال -6

. است و نيازي به كدنويسي براي آن نيست

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Inheritanceوراثت،‌ارث‌بری‌

Inheritanceی‌شودمسلسله‌مراتبیبه‌صورتکالس‌هاساختموجبکهاستشی‌گرابرنامه‌نویسیبنیادیاصولازیكی.inheritanceازاستفادهبا.می‌کننداستفادهinheritanceازیكسانیدالیلبهشی‌گرابرنامه‌نویسیزبان‌هایهمه‌ی

.باشندمشتركمباهمرتبطبخشچنددرمی‌توانندویژگی‌هااینکهکنیدتعریفویژگیسرییكباکلیکالسیكمی‌توانیدزباندر.دهدقرارآن‌هااختیاردررایكتاستکهمواردیوشودارث‌بریدیگرکالس‌هایتوسطمی‌تواندکلیکالساین

baseمی‌شود،ارث‌بریآنازکهکالسیسی‌شارپ class(پایهکالس)می‌دهدانجامراارث‌بریکهکالسیوداردنامderived class(شدهمشتقکالس)این‌رواز.می‌شودنامیدهderived classشده‌یاختصاصینسخه‌یbase

classاست.derived classتمامvariableها،method،هاpropertyوهاindexerدرشدهتعریفهایbase

classمی‌کنداضافهنیزراخودبهمخصوصعناصراین‌هاکناردرومی‌بردارثبهرا.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

#Types of Inheritance in Cانواع‌وراثت‌

:شارپسیدروراثتانواعSingleیگانهوراثت• Inheritance

Multilevelسطحیچندوراثت• Inheritance

Hierarchicalمراتبیسلسهوراثت• Inheritance

Multilevelچندگانهوراثت• Inheritance

(using interface) فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Inheritanceوراثت،‌ارث‌بری‌

ردداردکهعضویصدهابارادانشگاهیجامعهیكکارمندان،ازمتشكلاعضااین.بگیریدنظر

نکارمندا.هستنددانشجویانوفارغ‌التحصیالندکارمنیاباشندعلمیهیئتاعضایمی‌توانند

تاداسیامدیرمی‌توانندعلمیهیئتاعضای.سادهجودورابطهمراتب،سلسلهاینفلشهردر.باشندبالدنرافلش‌هااگرمثال،برای.استبرقرارداشتنیكEmployeeکهمی‌شویممتوجهکنیم،

CommunityMember،یااستTeacherیكFacultyواقعدر.است

CommunityMember،مبنایکالسوEmployee،Studentبرایمستقیم

Alumnusاین،برعالوه.استCommunityMemberمبنایکالسیك

رامدیاگدرکالس‌هادیگرتمامبرایغیرمستقیم.استمراتبسلسله

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Shapeسلسله‌مراتب‌ارث‌بری‌(سه‌بعدیشكل‌های)ThreeDimensionalShapeو(دوبعدیشكل‌های)TwoDimensionalShapeکالس‌های.می‌شودآغازShapeمبنایکالسبامراتبسلسلهاینایندر.استسه‌بعدیودوبعدیاشكالازمشخصانواعازبرخیحاویمراتبسلسلهاینسومسطح.هستندسه‌بعدییادوبعدییاشكل‌ها.شده‌اندمشتقShapeمبنایکالساز

شكلیك(کره)Sphereیكحالیكهدر،(shape)استشكلیكودوبعدیشكلیك(مثلث)Triangleیكنمونه،برای.داردوجودis-aرابطهچندینکالس،مراتبسلسله.هستندعدیدوبشكل‌هایهمگیکهباشدذوزنقه‌هاوبیضی‌هامستطیل‌ها،هماننددیگریکالس‌هایحاویمی‌توانستمراتبسلسلهاینکهکنیدتوجه.استشكلیكوسه‌بعدی فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثال‌کاربردی‌از‌وراثتInheritanceیكسانیدالیلبهشی‌گرابرنامه‌نویسیزبان‌هایهمه‌ی.می‌شودسلسله‌مراتبیبه‌صورتکالس‌هاساختموجبکهاستشی‌گرابرنامه‌نویسیبنیادیاصولازیكی

باهمطمرتببخشچنددرمی‌توانندویژگی‌هااینکهکنیدتعریفویژگیسرییكباکلیکالسیكمی‌توانیدinheritanceازاستفادهبا.می‌کننداستفادهinheritanceاز‌بریارثآنازکهکالسیسی‌شارپزباندر.دهدقرارآن‌هااختیاردررایكتاستکهمواردیوشودارث‌بریدیگرکالس‌هایتوسطمی‌تواندکلیکالساین.باشندمشتركbaseمی‌شود، class(پایهکالس)می‌دهدانجامراارث‌بریکهکالسیوداردنامderived class(شدهمشتقکالس)این‌رواز.می‌شودنامیدهderived classنسخه‌ی

baseشده‌یاختصاصی classاست.derived classتمامvariable،هاmethod،هاpropertyوهاindexerدرشدهتعریفهایbase classمی‌بردارثبهرا فرادرس.می‌کنداضافهنیزراخودبهمخصوصعناصراین‌هاکناردرو

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

ایجاد‌کالس‌ها‌بدون‌استفاده‌از‌وراثت‌جزامهایکالسکارمندودانشجوموجودیتبرایصورتیكهدر

وعموضاین.باشدمی‌تكراریکداززیادیبخشکنیم،ایجادتمسیسنگهداریبرشدنهزینههمچنینوکاریدوبارهموجب

فرادرس.شودمی‌

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Inheritanceوراثت،‌ارث‌بری‌

تنهاوببرندارثبهراآنEmployeeوStudentکالس‌هایودهیمقرارآندرراموجودیت‌هامشترکاتوکنیمایجادPersonکالسیكتوانیممی‌کنیدمی‌مشاهدهکههمانطورانجامبریارثروشاینبهوشدهذکرپایهکالسنام:یكباکالسنامازبعدکهمی‌بینیدکنیددقتمشتقکالس‌هایکدبهصورتیكهدر.کننداضافهآنبهراخوداختصاصیبخش‌های فرادرس.می‌شود

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

تخصيص‌حافظه‌در‌وراثت

.دارندنیزراپایهکالساجزاتماممشتقنوعازاشیائی

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Multi level Inheritanceوراثت‌چند‌سطحي‌

وبردمیارثبهراشخصکالسکارمندمثالعنوانبه.باشدسطحیچندتواندمی‌بریارث.بردمیارثبهراکارمندکالسعلمیهیئتعضوکالس

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

تقدسترسي‌به‌اجزاء‌اختصاصي‌کالس‌پایه‌به‌کمک‌متد‌های‌عمومي‌کالس‌پایه‌از‌یک‌شي‌کالس‌مش

سکالعمومیمتدهایتوانیممی‌مشتقنوعازاشیائیطریقازوانندتمی‌نیزپایهکالسعمومیمتدهایوکنیمفراخوانیراپایهاجزایحتی)باشندداشتهدسترسیپایهکالساجزایهمهبه

ایمتدهکمكبهمشتقکالسازخارجدربنابراین(اختصاصیههمبهتوانیممی‌مشتقکالسشییكازپایهکالسعمومی فرادرس.باشیمداشتهدسترسیپایهکالساجزاء

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Constructor and inheritancebaseهمارث‌بری،سلسله‌مراتبدر classهموهاderived classمی‌توانندها

constructorکدامکهمی‌آیدبه‌وجودسوالایناین‌جادر.باشندداشتهراخودشانconstructorشیءساختنمسئولderived classدرآن‌که؟استbase classیااست

derivedدرآن‌که classواقعدرهردو؟یادارد؟قرارconstructorدرکهایbase class

baseبخشدارد،قرار classوشیءیكconstructorدرکهایderived classاست،واقعderivedقسمت classازیراستمنطقیکاراینکهمی‌شویدمتوجهکنیدتوجهاگر.می‌سازدرا

base classدرونعناصرازاطالعیودسترسیهیچderived classاین‌روازونداردconstructorازقبلیمثال‌هایدر.باشدجداگانهبایدآن‌هاdefault constructorکه

الس‌هاکبیشترعملدرامااستشدهاستفادهمی‌شوندساختهسی‌شارپتوسطاتوماتیكبه‌صورتconstructorمی‌کنندتعریف.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

base classهای‌ constructorفراخوانيderivedیك classمی‌تواندconstructorدرکهایbase classفرمدادنگسترشطریقازرااستشدهتعریفاشconstructorدرderived classکلمه‌ی‌کلیدیو

base،بزندصدا.:استزیربه‌شكلآنیافته‌‌یگسترشتعریفکلیفرم

derived-constructor(parameter-list) : base(arg-list)

{

// body of constructor

}baseدرconstructorنیازموردهایargumentمشخص‌کننده‌یarg-listاین‌جا،در classگرفتنقرارنحوه‌یبه.استcolonباشیدداشتهتوجهنیز.

derivedیكهنگامی‌که classکلمه‌ی‌کلیدیازbaseمی‌کند،استفادهbase

baseنزدیك‌ترینبهمستقیما classباالیderived classاز.می‌شودمربوطنزدیك‌ترینبهbaseمی‌کنید،استفادهارث‌بریسلسله‌مراتبازهنگامی‌کهاین‌رو،

base classازاگر.کردخواهدرجوعزنجیرهایندرbaseاستفادهbaseپیش‌فرضconstructorنكنید، classشدخواهداجرا.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

No Multi Inheritance

دلیلبهچندگانهوراثتازنكردنپشتیبانی.داردراواسط‌هانامحدودتعدادازبریارثامكانکالسیكالبته.نمی‌شودپشتیبانیشارپسیزباندرکالس‌هاازچندگانهوراثتمشتقاحتماالکهکالسیكبراییعنی.کرداستفادهمختلفهایInterfaceازمی‌توانعوضدر.استپیچیدگیازجلوگیریبرایوCLIدرزباناینمعماریاهداف فرادرس.نمود(Implement)سازیپیادهراواسطچندینمی‌تواناستدیگرکالسی

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Protected

مابینمیانیحفاظتیسطحیكکنندهعرضهprotectedدسترسیمبنایکالسیكاعضای.استprivateوpublicدسترسی‌های

protectedآنزاشدهمشتقکالسهردریامبناکالسدرفقطمی‌توانند فرادرس.گیرندقراردسترسدرکالس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Hiding inherited member

derived classکهکندتعریفراعضویمی‌تواندbaseاعضایازیكیناممشابه classباشداش.

baseعضوآنافتد،اتفاقیچنینهنگامی‌که classدرderived classموردایندرحالی‌که.نمی‌شوددیده

نمی‌شود،شمردهخطاسی‌شارپدرتكنیكیلحاظازازییكاین‌کهازودادهشمابههشدارپیغامیكکامپایلرماشقصداگر.می‌سازدخبرباراشمانمی‌شوددیدهاعضاbaseاعضایازیكینشدندیدهباعثتاباشداین

classدرکامپایلرهشداررفعبه‌منظور،شویدderived classکلمه‌ی‌کلیدیازعضوآنتعریفدر

newازتفادهاساینکهباشیدداشتهدقت.کنیداستفادهnewاستفادهشیءساختنبرایآنازکهحالتیبا

.استمتفاوتمی‌کردید

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Invoking base class methods

baseازاعضاییبهدسترسیبرایbaseکاربردهایازیكی classدراسمیتشابهدلیلبهکهاستderived classنیستندمشاهدهقابل.derived classیكیناممشابهکهکندتعریفراعضویمی‌تواند

baseاعضایاز classعضوآنافتد،اتفاقیچنینهنگامی‌که.باشداشbase classدرderived

classیكرکامپایلنمی‌شود،شمردهخطاسی‌شارپدرتكنیكیلحاظازموردایندرحالی‌که.نمی‌شوددیدهتاباشداینشماقصداگر.می‌سازدباخبرراشمانمی‌شود،دیدهاعضاازیكیاین‌کهازودادهشمابههشدارپیغامbaseاعضایازیكینشدندیدهباعث classدرکامپایلر،هشداررفعبه‌منظور،شویدderived classدرآنباnewازاستفادهاین‌طورکهباشیدداشتهدقت.کنیداستفادهnewکلمه‌ی‌کلیدیازعضوآنتعریفthisبهشبیهحدودیتاbaseازاستفاده.استمتفاوتمی‌کردیداستفادهشیءساختنبرایآنازکهحالتی

baseبههمیشهbaseکهتفاوتاینبااست classازاستفادهنحوه‌ی.می‌کندرجوعbaseزیرشكلبه:است

base.member

مواقعیبرایbaseازاستفادهنحوه‌یاین.باشدمتدمی‌تواندهمومتغیرمی‌تواندهمmemberاین‌جادرbaseدرعضویكکهاست classدراسمیتشابهدلیلبهderived classمورداین.نمی‌شوددیده

.می‌کندصدقنیزمتدهادرباره‌ی

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

ایجاد‌کالس‌ها‌بدون‌استفاده‌از‌ارث‌برینامهبردرکارمندانانواعحاویکهارث‌بریمراتبسلسلهیكازمثال،ایندر

موجودطهرابتوضیحبهتامی‌کنیماستفادهاستشرکتیكدستمزدپرداختمیسیونککارمندان.بپردازیمشدهمشتقکالسیكومبناکالسیكمابین

د،شخواهندعرضهمبناکالسازاشیاءبعنوانکه(حق‌العمل‌کارکارمندانیا)دانکارمنحالیكهدرمی‌کنند،دریافتفروشازدرصدیبصورتراخودحقوق

عرضهشدهمشتقکالسازاشیائیبعنوانکه)حقوقپایهبرمبتنیکمیسیون.می‌کننددریافترافروشازدرصدیهمراهبهپایهحقوقیك(شدخواهندبهاستکارمندنوعدواینمابینموجودرابطهباارتباطدرکهراخودبحثاینازهریكبرایاولمثالدر.می‌کنیممطرحمثالچندکمكبهودقت

دمی‌کنیمشاهدهکههمانطور.می‌کنیمایجادمستقلکالس‌هایموجودیت‌ها.می‌باشدتكراریشدهنوشتهکددرصد90ازبیش

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

ازجدیدنسخهیكبخشایندرازکهمی‌کنیمایجادBasePlusCommssionEmployeeکالسمثالایندر.استشدهمشتقCommissionEmployeeکالس،یكBasePlusCommssionEmployeeشی

CommisionEmployeeکالسقابلیت‌هایکهچرااستCommissionEmployeeمی‌بردارثبهرا.

هااستفاده‌از‌ویژگي‌وراثت‌در‌ایجاد‌کالس

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Virtual method،کلیدیکلمه‌ی‌باکهاستمتدیvirtualدروbase class

Virtual.می‌شودتعریف methodدرراآنمی‌توانیدکهاستشكلیبه‌derived

classهراین‌رو،از.کنیدتعریفمجدداderived classاختصاصینسخه‌یمی‌تواند

virtualازراخودش methodشد،گفتهکههمان‌طور.باشدداشتهvirtual

methodدرbase classکلیدیکلمه‌ی‌باvirtualیكهنگامی‌که.می‌شودتعریف

virtual methodدرderived classازبایدمی‌شود،تعریفمجدداoverride

modifierمجددتعریفپروسهبنابراین‌کنیداستفادهvirtual methodدر

derived classراmethod overridingهنگام.می‌نامیمoverrideیكکردن

returnمتد،اسمبایدمتد، typeبامطابقراآنپارامترهایوvirtual method

derivedیكاگرمی‌کنید،استفادهارث‌بریمراتبسلسلهازهنگامی‌که.بنویسیم

class،یكvirtual methodراoverrideارث‌بریزنجیره‌یابتدایطرفبه،نكند

.شدخواهداجراشوددیدهکهمتدآنoverrideاولینکنید،حرکت

OverridingمتدهایوVirtual

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

baseیكداریدقصدگاهی classنآومی‌کندمشخصراکلیفرمیكتنهاکهبسازید

derivedخودکهمی‌دهداجازهومی‌گذارداشتراكبهشدهمشتقکالس‌هایتمامبارا

classیکالسچنینمثال،به‌عنوان.کنندتكمیلراکلیفرماینجزئیاتوبدنه‌ها

derivedومی‌کندمشخصرامتدیكماهیت classرامتداینبایدهاoverride

baseخوداماکنند classپیش‌فرضاجراییكمتداینبرایکهنداردنیازیدیگر

baseکهدهدرخزمانیاستممكنحالتاین.باشدداشته classاجراییكنتواند

derivedعهده‌یبررااجرااین‌روازباشد،داشتهنظرموردمتدبرایبامعنی classها

ایهپهایکالسازنتواناینكهبرای.استمعنیبیهاکالساینازاشیاءایجاد.می‌گذارد

.نماییممی‌تعریفabstractصورتبهراآنهاکردتعریفاشیاء

Abstractانتزاعيکالس Class

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

abstractباabstractمتدیك modifierمی‌شودساخته.abstract methodازونداردبدنه

baseدروناین‌رو classشدنخواهداجرا.derived classاینبایدحتماهاabstract methodرا

overrideیك.کنندabstract methodاتوماتیكبه‌صورتvirtualنمی‌توانیدواقعدروهستنیز

abstractدرمی‌بینیدکههمان‌طور.کنیداستفادهتعریفیكدرباهمabstractوvirtualاز

methodکهکنیددقت.نداریدنیازبدنهبهabstract modifierمتدهایبراینمی‌توانیدراstatic

.باشندabstractمی‌توانندنیزindexersوProperties.کنیداستفاده

برای.شودتعریفabstractبه‌صورتبایدباشدabstractمتدیكازبیشتریایكشاملکهکالسی

abstractازclassکلیدیکلمه‌یازقبلکهاستکافیabstractبه‌صورتکالسیكتعریف

modifierکهآن‌جااز.کنیداستفادهabstract classوجودبه‌دلیل)شوداجراکاملبه‌طورنمی‌تواند

abstractازنمی‌توانیددلیلبه‌همین،(ندارندبدنهکهabstractمتدهای classبسازیدشیء.

derivedیكهنگامی‌که classیكازabstract classمتدهایتمامبایدمی‌کندارث‌بری

abstractدرbase classراoverrideاین‌صورتغیردرکندderived classبه‌صورتبایدنیز

abstractشودتعریف.

& abstract Classabstract Method

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

جلوگيری‌از‌ارث‌بریبرای‌sealedاستفاده‌از‌ریپیش‌گیآنشدنانجامازکهاستنیازگاهیاست،کاربردیومفیدبسیارinheritanceاین‌کهبا

منطقومسألهبهبستگیکنید،جلوگیریinheritanceانجامازشرایطیچهدروکجادراین‌که.کنیدانجاممانعمی‌توانیدراحتیبهsealedکلیدیکلمه‌یازاستفادهباسی‌شارپدر.داردخودتان.شویدinheritanceشدنهرمکالسیكازکهمی‌یابیداطمینانآنازاستفادهباواستشدهمومومهرمعنایبهsealedواژه‌ی

تعریفابتدایدرکهاستکافیکالس،یكکردنsealedبه‌منظور.کردارث‌برینمی‌توانشدهموموهمنمی‌توانراکالسیكکهباشیدداشتهدقت.کنیداستفادهsealedکلیدیکلمه‌یازکالس

کاملتنهاییبهabstractکالسچراکهکردتعریفabstractبه‌صورتهموsealedبه‌صورت.استخودشازمشتق‌شدهکالس‌هایبهوابستهباشدداشتهکاملیاجرایاین‌کهبرایونیست

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

متدها overrideازجلوگيری‌برای‌sealedاستفاده‌از‌virtualدرمی‌تواندsealedکهاستایندیگرنكته‌ی methodsازپیش‌گیریبراینیز

overrideکالساین‌جا،در.گیردقراراستفادهموردشدنClassAمتدیكvirtualداردازکهکالس‌هاییاین‌رواز.استشدهsealedهموoverrideهمClassBکالسدرکه

ClassBنمی‌تواننددیگرمی‌کنندارث‌بری)(MyMethodراoverrideمتداینزیراکنند فرادرس.استشدهsealedدیگر

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Indexersو‌شکل‌کلي‌آنها[]عملگرکردنتعریف.می‌شودانجام[]عملگرطریقازآرایهگذاریindexمی‌دانید،کههمان‌طور

operatorازمنظوراینبرایامااستامكان‌پذیرنیزکالسبرای methodعوضدرونكردهاستفاده.شودگذاریindexآرایهیكمانندشیءیكمی‌دهداجازهIndexer.می‌کنیداستفادهIndexerاز

Indexerکلیفرم.باشندداشتهبعدیكازبیشتریایكمی‌توانندهاIndexerبه‌شكلبعدییكهراین‌رو،از.استindexerعنصرنوعکننده‌یمشخصelement-typeاین‌جادر.استمقابل

یكنوعبانوعاین.استelement-typeنوعازباشد،دسترسیقابلindexerتوسطکهعنصریbackingآنبهاصطالحاومی‌گیریدنظردرindexerبرایکه)آرایه storeاستیكسان(می‌گویند.

.می‌کندمشخصراباشیدداشتهدسترسیآنبهمی‌خواهیدکهعنصریindexواقعدرindexپارامترindexبامشابههاindexerکهآن‌جاازاماباشدintپارامترجنسحتمانیستنیازیکهکنیدتوجه.استرایجموردایندرintازاستفادهمی‌گیرند،قراراستفادهموردآرایهaccessorآن‌هاازکدامهربهکهمی‌کنیدمشاهدهراsetوgetکلمه‌هایindexerبدنه‌یدرونparameterوreturn-typeکهتفاوتاینبااستمتدیكمشابهaccessorیك.می‌شودگفتهومی‌شوندفراخوانیاتوماتیكبه‌طورهاaccessorاینمی‌کنیداستفادهindexerازهنگامی‌که.نداردتساویچپطرفدرindexerاگر.می‌کننددریافتپارامتربه‌عنوانراindexهاaccessorدویهرsetبنابراینباشد،گرفتهقرار accessorتوسطکهعنصریبهمقداریكوفراخوانیindexمشخصgetاین‌صورتغیردر.می‌شوددادهاختصاصاست،شده accessorمشخصعنصروشدهفراخوانیمقداریشاملکهداردvalueاسمبهپارامتریكهمچنینSet.می‌شودindex،returnتوسطشدهکهاستاینindexerمزیت‌هایازدیگریكی.می‌شوددادهاختصاصمشخصindexیكبهکهاست

.کنیدوگیریجلنامناسبدسترسی‌هایازوباشیدداشتهکنترلتحتدقیقاراآرایهبهدسترسیمی‌توانید

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثال‌چندضلعي

سازیذخیرهبراینقاطازایآرایهچندضلعیکالس

ازنیزرئوسخواندنونوشتنبرایهمچنین.داردرئوس

اینindexerکمكبهتوانمی.شودمیاستفادهمتد

.کردخواناتربسیارراکالس فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Basic indexer

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Index typeهراین‌رو،از.استindexerعنصرنوعکننده‌یمشخصelement-typeاین‌جا،در

نوعاین.استelement-typeنوعازباشد،دسترسیقابلindexerتوسطکهعنصریbackingآنبهاصطالحاومی‌گیریدنظردرindexerبرایکه)آرایهیكنوعبا store

آنبهمی‌خواهیدکهعنصریindexواقعدرindexپارامتر.استیكسان(می‌گویندپارامترجنسحتمانیستنیازیکهکنیدتوجه.می‌کندمشخصراباشیدداشتهدسترسی

intکهآن‌جاازاماباشدindexerبامشابههاindexمی‌گیرند،قراراستفادهموردآرایه فرادرس.استرایجموردایندرintازاستفاده

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Index number

Indexerاشندبداشتهبعدیكازبیشتریایكمی‌توانندها.

indexتعداداستکافیبعدیچندindexerتعریفبرای

فرادرس.کردزیادراها

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Indexer overloading

indexerچندینکالسیكبرایتوانمی

.کردتعریف

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثال‌چندضلعي

وsetvertexمتدهایازمثالایندر

getvertexرئوسآرایهدرنوشتنوخواندنبرای

وکردهسختراکالسازاستفادهکهشدهاستفاده

ییكسانعدماینونداردراآرایهبابودنمتحدالشكل

نوعازاشیائیباکارراحتیعدموخواناییعدمموجب

Polygon1گرددمی.

class Polygon1{

Point[] vertices;public Polygon1(int n)

{vertices= new Point[n];

}public void setvertex(int i, Point value)

{vertices[i] = value;

}public Point getvertex(int i){

return vertices[i];

}}

private void button1_Click(object sender, EventArgs e){

Polygon1 triangle = new Polygon1(3);triangle.setvertex(0, new Point(10, 10));triangle.setvertex(1, new Point(40, 10));triangle.setvertex(2, new Point(40, 70));

}

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

indexerمثال‌چندضلعي‌با‌

برایgetvertexوsetvertexمتدهایبجایمثالایندر

کهشدهاستفادهindexerازرئوسآرایهدرنوشتنوخواندن

موجبیكسانیاینوکردهمتحدالشكلهاآرایهباراکالسازاستفاده

.گرددمیPolygon2نوعازاشیائیباکارراحتیوخوانایی

class Polygon2{

Point[] vertices;

public Polygon2(int n){

vertices= new Point[n];}

public Point this[int i]{set{

vertices[i] = value;}

get

{return vertices[i];

}}}

private void button2_Click(object sender, EventArgs e){

Polygon2 triangle = new Polygon2(3);

triangle[0] = new Point(10, 10);triangle[1] = new Point(50, 50);triangle[2] = new Point(10, 70);

}

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

indexerمثال‌چندضلعي‌با‌

drawبناممتدیكضلعیچندکالسبرایمثالایندر

سمرراچندضلعیرئوسبینخطترسیمباکهکردیمایجادPolygon2کالسازاستفادهخواناییوسهولتبه.کندمی

بهترراindexerازاستفادهمزیتتاکنیددقتروبروکددرنامفضایدرموجودکالسیكPointکالس.کنیددرك

System.Drawingباشدمی.

class Polygon2{

Point[] vertices;public Polygon2(int n)

{vertices= new Point[n];

}public Point this[int i]{

set{ vertices[i] = value; }get{ return vertices[i]; }

}public void draw(Graphics x,Color c){

int i;for ( i = 0; i < vertices.Length - 1;++i )

x.DrawLine(new Pen(c),vertices[i],vertices[i+1]);x.DrawLine(new Pen(c), vertices[i], vertices[0]);

}}

private void button3_Click(object sender, EventArgs e){

Polygon2 rec1 = new Polygon2(4);rec1[0] = new Point(10, 10);rec1[1] = new Point(80, 10);rec1[2] = new Point(80, 130);rec1[3] = new Point(10, 130);

rec1.draw(pictureBox1.CreateGraphics(), Color.Blue);}

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Polymorphismچندریختي‌

یكحالتباشند،«خاصیبرنامه»اینكهبجایبرنامه‌هاتامی‌دهدامكانچند‌ریختی.باشندداشته«کلیبرنامه»هککنیمپیاده‌سازیوطراحیراسیستم‌هاییمی‌توانیمچندریختی،کمكبه

یاتغییرکمیبامی‌توانندجدیدکالس‌های.استآسانترآنهابسط‌پذیریوگسترشجدیدکالس‌‌هایمادامیكهشوند،افزودهآنبهبرنامهعمومیبخش‌هایدراصالحتنها.‌کندمیپردازشآنراجامعبطوربرنامهکهباشندتوارثیمراتبسلسلهازبخشی

شوندادهدتغییرجدیدکالس‌هایبایافتنتطبیقبرایبایدکهبرنامهازبخش‌هایمراتبسلسهبهشدهافزودهجدیدکالس‌هایوجودازتادارندنیازکههستندآنهایی

.گردندمطلعمستقیما

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثال‌چند‌ریختيس‌هایکال.کندشبیه‌سازیراحیواننوعچندصدایکهبنویسیمبرنامه‌ایمی‌خواهیمکنیدفرضcat(گربه)،Dog(سگ)وDock(اردك)تصور.هستندبررسیتحتحیواننوعسهنشان‌دهندهتابعیكحاویکهدارند،ارث‌بریAnimalمبنایکالسازکالس‌هااینازیكهرکهکنید

speak()متدشدهمشتقکالسهر.دهدمینشانراحیوانبهمربوطصدایکهبودهspeakراانواعازاشیائیبهاشاره‌گرهااز(vector)برداریكنگهداریبهمبادرتبرنامه‌.می‌کندپیاده‌سازیدرشیهربهبرنامهحیوانات،حرکتشبیه‌سازیبرای.می‌کندAnimalیشدهمشتقکالس‌های

پیغاماینبهحیوانازخاصنوعهروجود،اینبا.می‌کندارسال()speakبنامپیغامیكثانیههرازشیهرامامی‌کند،ارسالشیهربهراپیغامیكجامعبطوربرنامهمی‌دهد،پاسخخودروشبه

«حیحصفعلانجام»نحوهازشیهراینكهپایهبر.زندمیحرفآنمبنایبرواستمطلعخودصدای.استpolymorphismیاچندریختیکلیدیمفهوم،یكسانمتدفراخوانیبهواکنشاست،مطلع‌ازوداردبدنبالمختلفینتایجمی‌شودارسالاشیاءانواعبهکه()speakموردایندریكسانپیغاموراحیطراسیستم‌هاییمی‌توانیمچندریختی،کمكبه.استچندریختیمفهومنشاندهندهاینرو

کمیابمی‌توانندجدیدکالس‌های.استآسانترآنهابسط‌پذیریوگسترشکهکنیمپیاده‌سازیازیبخشجدیدکالس‌‌هایمادامیكهشوند،افزودهآنبهبرنامهعمومیبخش‌هایدراصالحیاتغییرکهرنامهبازبخش‌هاییتنها.می‌کندپردازشآنراجامعبطوربرنامهکهباشندتوارثیمراتبسلسلهوجودازتانددارنیازکههستندآنهاییشونددادهتغییرجدیدکالس‌هایبایافتنتطبیقبرایباید

کالساگرمثال،برای.گردندمطلعمستقیمامراتبسلسهبهشدهافزودهجدیدکالس‌هایBird(پرنده)کالسازکهAnimalمتدمی‌تواندکه)کنیمایجادراداردارث‌بریspeakرا

شبیه‌سازیراBirdشیازنمونهیكکهبخشیآنوBirdکالستااستنیازفقط،(کندبازنویسی.بنویسیمرامی‌کند

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثال‌چند‌ریختيکهداریم(مربع)Squareو(مثلث)Triangle،(دایره)Circleهمانندشكلکالس‌هایازمجموعه‌ایکهکنیدفرضابعتیكطریقازخودترسیمقابلیتازمی‌توانندکالس‌هاازکدامیكهر.شده‌اندمشتقShapeمبناکالسازهمگیهربرایتابعاینعملكردلیكن،استبخودمتعلقdrawتابعدارایکالسیهراگرچه.باشدبرخوردارdrawبنامعضوتمامردنکتلقیقابلیتمی‌کند،ترسیمرااشكالازمجموعه‌ایکهبرنامه‌ایدر.بودخواهدمتفاوتکامالدیگریباشكلازآسانیبهمی‌توانیمشكلهرترسیمبرایسپس.بودخواهدسودمندShapeمبنایکالسازاشیائیبصورتاشكالبصورتتادهیماجازهبرنامهبهوکردهاستفادهdrawتابعفراخوانیبرایمبناکالسShapeاشاره‌گریك

Shapeاشاره‌گرکهشینوعبرحسبشدهمشتقکالسdrawتابعکدامکهکندتعیین(اجرازماندریعنی)دینامیك.شودگرفتهبكارمی‌کند،اشارهآنبه

هردرdrawتابعوکردهاعالنvirtualتابعیكبعنوانمبناکالسدرراdrawتابعابتدارفتاری،چنینداشتنبرای.می‌کنیمoverrideمقتضیشكلترسیمبرایراشدهمشتقکالسد،کنشدهمشتقکالسازشییكبهمبناکالسیكاشاره‌گرطریقازvirtualتابعیكفراخوانیبهمبادرتبرنامه‌ایاگر

.کردخواهدانتخاباشاره‌گرنوعنهوشینوعبراساسراdrawصحیحتابع(اجرازماندریعنی)دینامیكبصورتبرنامهdynamic)دینامیكمقیدسازیبعنوان(کامپایلزمانبجای)اجرازماندرفراخوانیبرایمقتضیتابعانتخاب

binding)می‌شودشناخته.د،می‌شوفراخوانینقطهعضوانتخابعملگرونامکمكبهوخاصشییكبهمرجعیتوسطvirtualتابعیكزمانیكهفراخوانیکهvirtualتابعو(می‌شودگفتهاستاتیكمقیدسازیحالتاینبهکه)می‌شودمقررکامپایلزماندرتابعاحضار.ستااستاتیكچندریختیدهندهنشانرفتاراینکهاست،مشخصشیازکالسیبرایشدهتعریفتابعیكشده

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Type Compatibility

castingبهنیازتبدیلنوعاینبرایوباشدمینیزپایهکالسنوعازشییكمشتقکالسازشیهر

.شودمیانجامضمنیبصورتوباشدنمی

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Type Compatibilityمزایای‌زامراجعیبامشتقنوعازاشیائیسازگاریهایمحدودیترقمعلیازهکاشیائیتمامکنیدمیمشاهدهکههمانگونهپایه،کالسنوع

متدبهتوانمیراشوندمیایجادشدهمشتقهایکالسCheckAgeفرادرس.تاسشدهایجادکلیمتدیكبنابراین.کردارسال

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Method bindingدراولروش.شودمیانجامDynamicوStaticروشدوبهءاشیابهمتدهادادننسبت.اجرازماندردومروشوشودمیانجامکامپایلزمان

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Dynamic Polymorphism

وانیفراخبهواکنشاست،مطلع‌«صحیحفعلانجام»نحوهازشیهراینكهپایهبریكسانپیغام.استpolymorphismیاچندریختیکلیدیمفهومیكسان،متدبالبدنمختلفینتایجمی‌شود،ارسالاشیاءانواعبهکه()Promoteموردایندر

یممی‌توانچندریختیکمكبه.استچندریختیمفهومنشاندهندهاینروازودارد فرادرس.استانترآسآنهابسط‌پذیریوگسترشکهکنیمپیاده‌سازیوطراحیسیستم‌هایی

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

DowncastingازeشیءبهFacultyجنسازReferenceیكدادننسبتباالسطحازرو"خودموندید"اینكهیعنیEmployeeنوع(Employee)ترپائینسطحبه(Faculty)اینكار.بدمتغییردرونیستپذیرامكان(صریحغیر-implicit)فرضپیشصورتبه

بایدحتمادهیدانجامراکاراینبخواهیدشماصورتیكهعهدهبهcastingباراکاراینمسئولیت(explicit)صراحتا فرادرس.بگیرید

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Type testing

نوعازمرجعیكآیاکهدادتشخیصتوانمیisعملگرکمكبهکالسنوعازکهeمرجعآیامثالعنوانبه.خیریااستکالسیكاشارهFacultyکالسنوعازشئیبهباشدمیemployeeپایه فرادرسکند؟می

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

يسيستم‌پرداخت‌حقوق‌با‌استفاده‌از‌چند‌ریخت:‌مثال‌کاربردی.دمی‌کنپرداختحقوقهفتگیبطورخودکارمندانبهشرکتی

قوقحیكکهکارمندانی:شده‌اندتقسیمدستهچهاربهکارمندانمی‌کنند،دریافتهفتهدرکاریساعاتازنظرصرفثابت

هفتهطولدرکاریاضافهوکاریساعتبراساسکهکارمندانیبراساسکهکارمندانیمی‌کنند،دریافتحقوقساعت40برمازادابتثحقوقبرعالوهکهکارمندانیومی‌کننددریافتحقوقفروش

تشرک.می‌گیردتعلقآنهابهکمیسیوننیزفروشازدرصدیوقحقکهکارمندانیبهجاریحقوق‌هایپرداختتاکهداردتصمیمبهدرصد۱0می‌کنند،دریافتفروشازکمیسیونباهمراهپایه

زیپیاده‌سابهمایلشرکت.نمایداضافهپاداشآنهافروشمیزانچندروشبهراحقوقپرداختمحاسباتتااستبرنامه‌اییك

.دهدانجامریختینامنام،دارایوی،حقوقمحاسبهروشازصرفنظرکارمندیهر

دادهاعضایاینروازوبودهاجتماعیتأمینشمارهوخانوادگیوfirstName،lastName:ازعبارتندخصوصی

socialSecurityNumberانتزاعیمبنایکالسدرکهEmployeeمی‌شوندظاهر.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

يسيستم‌پرداخت‌حقوق‌با‌استفاده‌از‌چند‌ریخت:‌مثال‌کاربردیدرکهاستمراتبسلسلهدرموجودکالسپنجازنمایشیمقابلشكلدیاگرام.گرفته‌اندقرارسرستون‌هادرToStringوearningsتوابعوآنچپسمتهککنیددقت.می‌دهدنشانراتابعهردلخواهنتیجهدیاگرامکالس،هربرای

وشدههمراهearningsتابعبرای"abstract“باEmployeeکالسشدهمشتقکالسهر.استمحضvirtualتابعیكتابعاینکهمی‌دهدنشانعتابیعنی)می‌کندانتخابمقتضیمقاصدانجامبرایراخودمناسبتابع

earningsراoverrideفرادرس.(می‌کند

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Employeeکالس‌مبنای‌انتزاعي‌ایجاد‌

مفاهیمآنسازیپیادهبرایکالسایندرزیراباشدمیabstractنوعازEmployeeکالسازEarningمتددلیلبه.گرددمیسازیپیادهشوندمیمشتقEmployeeکالسازکههاییکالسدرمتداین.نیستموجودکافی فرادرس.گرددتعریفانتزاعیکالسیكشكلبهبایدباشد،میانتزاعیمتدیكحاویEmployeeکالساینكه

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

SalariedEmployeeکالس‌مشتق‌شده‌غيرانتزاعي‌ایجاد‌

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

HourlyEmployeeغيرانتزاعي‌شده‌کالس‌مشتق‌ایجاد‌

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

CommissionEmployeeکالس‌مشتق‌شده‌غيرانتزاعي‌ایجاد‌

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

BasePlusCommissionEmployeمشتق‌شده‌غيرانتزاعي‌کالس‌

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Static Polymorphismتست‌

private void button1_Click(object sender, EventArgs e){

SalariedEmployee salariedEmployee =new SalariedEmployee("Ali", "Ahmadi", "111-11-1111", 800000);HourlyEmployee hourlyEmployee =new HourlyEmployee("Reza","Mohaghegh","222-22-2222", 11000, 40.75m);

CommissionEmployee commissionEmployee =new CommissionEmployee("Farshid", "keshavarz","333-33-3333", 7000000.00M, .06M);BasePlusCommissionEmployee basePlusCommissionEmployee =new BasePlusCommissionEmployee("Mostafa", "haghi kashany","444-

44-4444", 5000000.00M, .04M, 300000.00M);label1.Text = salariedEmployee.ToString() +"\nEarning: "+ salariedEmployee.Earnings()+"T";

label1.Text += commissionEmployee.ToString() + "\nEarning: " + commissionEmployee.Earnings() + "T";label1.Text += hourlyEmployee.ToString() + "\nEarning: " + hourlyEmployee.Earnings() + "T";

label1.Text += basePlusCommissionEmployee.ToString() + "\nEarning: " + basePlusCommissionEmployee.Earnings() + "T";}

Static polymorphismزماندرکهافتدمیاتفاقزمانیCompileیك.گرددمیفراخوانیشینامطریقازمتد

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Dynamic Polymorphismتست‌

Dynamic polymorphismمتدیكاجرازماندرکهافتدمیاتفاقزمانیبر.گرددمیفراخوانیپایهشیمرجعطریقازمشتقکالسبهمربوطوصحیحانیفراخوبهواکنشاست،مطلع‌«صحیحفعلانجام»نحوهازشیهراینكهپایهیاپویاچندریختیکلیدیمفهومپایه،شیمرجعطریقازیكسانمتد

polymorphismموردایندریكسانپیغام.استEarning()طریقازکهازودداربدنبالمختلفینتایجمی‌شود،ارسالاشیاءانواعبهپایهکالسمراجع.استچندریختیمفهومدهندهنشاناینرو

private void button2_Click(object sender, EventArgs e) {SalariedEmployee salariedEmployee = new SalariedEmployee("Ali", "Ahmadi", "111-11-1111", 800000);

HourlyEmployee hourlyEmployee = new HourlyEmployee("Reza", "Mohaghegh", "222-22-2222", 11000, 40.75m);CommissionEmployee commissionEmployee = new CommissionEmployee("Farshid", "keshavarz", "333-33-3333", 7000000.00M, .06M);BasePlusCommissionEmployee basePlusCommissionEmployee = new BasePlusCommissionEmployee("Mostafa", "haghi kashany", "444-

44-4444", 5000000.00M, .04M, 300000.00M);Employee[] employees = new Employee[4];

employees[0] = salariedEmployee;employees[1] = hourlyEmployee;

employees[2] = commissionEmployee;employees[3] = basePlusCommissionEmployee;

foreach ( Employee currentEmployee in employees )label2.Text+=currentEmployee.ToString()+"\nEarning: "+currentEmployee.Earnings().ToString();}

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Type Testingکالسیكنوعازشئیبهآیاکهکردکنترلتوانمیداریم،پایهکالسنوعازمرجعیکهزمانی:کنیممیاستفادهزیرشكلبهisعملگرازمنظوراینبرای.خیریاکندمیاشارهخاصمشتق

if(currentEmployee is BasePlusCommissionEmployee)

private void button2_Click(object sender, EventArgs e) {SalariedEmployee salariedEmployee = new SalariedEmployee("Ali", "Ahmadi", "111-11-1111", 800000);

HourlyEmployee hourlyEmployee = new HourlyEmployee("Reza", "Mohaghegh", "222-22-2222", 11000, 40.75m);CommissionEmployee commissionEmployee = new CommissionEmployee("Farshid", "keshavarz", "333-33-3333", 7000000.00M, .06M);

BasePlusCommissionEmployee basePlusCommissionEmployee = new BasePlusCommissionEmployee("Mostafa", "haghi kashany", "444-44-4444", 5000000.00M, .04M, 300000.00M);Employee[] employees = new Employee[4];

employees[0] = salariedEmployee;employees[1] = hourlyEmployee;

employees[2] = commissionEmployee;employees[3] = basePlusCommissionEmployee;

foreach (Employee currentEmployee in employees){

if (currentEmployee is BasePlusCommissionEmployee) {BasePlusCommissionEmployee employee = (BasePlusCommissionEmployee)currentEmployee;

employee.BaseSalary *= 1.10M; }label3.Text += currentEmployee.ToString() + "\nEarning: " + currentEmployee.Earnings().ToString();} }

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Interfacesواسط‌ها‌

دهد،امانجبایدراکاریچهکالسیكاینكهتعریفشی‌گرابرنامه‌نویسیدرمواقعبعضیازشپیشما.نیستمهممی‌دهدانجامروشیچهبهرااین‌کاراینكهاما،باشدمفیدمی‌تواند

abstractکهنمونه‌ایچنینبااین methodیك.شدیدآشناداشتنامabstract

methodیكبارامتدیreturn typeاجراراچیزیامامی‌کندتعریفنام،یكوderivedبلكهنمی‌کند classبایدabstract methodدرکههاییbase class

abstractاین‌رو،از.کندسازیپیادهراشده‌اندتعریف methodکننده‌یمشخصinterfaceاگرچه.اجراییقسمتنهواستمتدیكabstract classesو

abstract methodsشكلبهرامفهوماینمی‌تواناماهستند،کاربردیومفیدازکاملبه‌طورراکالسیكinterfaceمی‌توانیدشماسی‌شارپدر.کردبیاننیزکامل‌تری

انجامinterfaceکلیدیکلمه‌یتوسطکاراینکهکنید،جداآناجراییبخشabstractبامشابهsyntaxنظرازInterface.می‌شود classدر.استinterface

.نمی‌شونداجرامتدهاinterfaceدرکهاستمعنیبدیناینوندارندبدنهمتدهانیزInterfaceآنشدنانجامچگونگیبهاماشودانجامبایدکاریچهکهمی‌کندمشخص

.می‌کنیداجرارانظرموردمتدهستیدمایلکههرطورشماونمی‌دهداهمیت

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

کدام‌یک‌را‌انتخاب‌کنيم؟ Abstract Classو‌ Interfaceبين‌

پسی‌شاربرنامه‌نویسیمهمقسمت‌هایازیكیقصدهنگامی‌کهکهاستموضوعایندانستنچهدهید،شرحراکالسیكقابلیت‌هایداریداززمانیچهوinterfaceاززمانی

abstract classکنیداستفادهبایددینبکلیقانون.نداریداجراییقسمتدرحالی‌که

راکلیمفهومبخواهیدهرگاهکهاستصورتتاکیدکارهاشدنانجامبهفقطودهیدشرحنآشدنانجامچگونگیواقعدروباشیدداشتهازبایدباشد،نداشتهاهمیتشمابرای

interfaceهکداریدنیازاگر.کنیداستفادهد،کنیواردقبلازراشدناجراجزئیاتازبعضیabstractبایدآن‌گاه classاستفادهموردرا.دهیدقرار

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

interfaceتعریف‌واسط‌کلي‌قالب‌

شده‌یسادهفرممقابلدر.می‌شودتعریفinterfaceکلیدیکلمه‌یتوسطواسطیكمتدها.می‌شودمشخصnameتوسطinterfaceاسم.می‌بینیدراinterfaceیكreturnتوسطنیز type،پارامترهاونام(signature)درمتدهااین.می‌شوندتعریفabstractواقع methodدرشد،ذکرپیش‌ترکههمان‌طور.هستندinterface،

متدهایتمامبایدداردinterfaceکهکالسیاین‌روازوندارنداجراییبدنه‌یمتدهامتدها،interfaceیكدر.کندسازیپیادهراinterfaceدرشدهتعریف

implicitly publicخودکاروپیش‌فرضبه‌صورتیعنی.هستندpublicوهستند.نداریدراحالتاینتغییراجازه‌یشما

ازتنهااگر.می‌شوندتعریفبدنهبدونinterfaceدرنیزpropertiesمتدها،همانندgetیاsetکنید،استفادهpropertyشماread-onlyیاwrite-onlyبودخواهد.auto-implementedتعریفبامشابهinterfaceدرpropertyتعریفاگرچه

propertyتعریفروشاین.نیستندیكیدواینامااست،کالسدرpropertyدرinterfaceکهنمی‌شودباعثauto-implementمشخصتنهااینبلكهباشد

accessتغییراجازههمچنین.استpropertyنوعونامکننده‌ی modifierدررا.نداریدsetوgetقسمتازتنهااگرقبلهمانند.باشدداشتهخوددرنیزراindexerمی‌تواندinterfaceیكgetیاsetکنید،استفادهindexerشماread-onlyیاwrite-onlyبودخواهد.

accessازاستفادهبهمجازهمچنین modifierدرaccessorهایindexer

.نیستیدinterfaceدرشدهتعریف

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Interface implementationهرمی‌شود،تعریفinterfaceیكهنگامی‌که

نایمی‌توانندداریدنظرمدشماکهکالستعدادinterfaceیكهمچنین.کنندسازیپیادهرا

classدلخواهتعدادبهمی‌تواندinterface

،interfaceیكاجرایبرای.کندسازیپیادهدرشدهتعریفمتدهایبدنه‌یبایدکالس

interfaceکهآن‌طورکالس،هر.آوردفراهمرادرکهبدنه‌هایی)متدهاایناجرایبرایبخواهدآمادهinterfaceمتدهایبرایخودشکالسکالسدوبنابراین.می‌کنداقدام(استکرده

مختلفیروش‌هایبهراinterfaceیكمی‌توانندهکمتدهاییتمامشاملکالسدوهراماکننداجرا.می‌باشنداستشدهمشخصinterfaceدر

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

interfaceهای‌reference variableاستفاده‌از‌

referenceیكمی‌توانیدسی‌شارپدرشما variableازinterfaceسی‌شارپدردیگر،عبارتبه.کنیدتعریف

interfaceمی‌توانید reference variableبسازید.رااشinterfaceکهشیئیهربهمی‌تواندمتغیریاین‌چنین

طریقازراشیءیكمتدهنگامی‌که.کندرجوعمی‌کنداجراinterface referenceکهمتدازنسخهآنمی‌زنید،صدا

اجرااستکردهسازیپیادهراinterfaceآنبهمربوطشیءbaseازاستفادهبهشبیهپروسهاین.می‌شود class

referenceشیءبهدسترسیبرایderived classاست.(شدیدآشناآنباقبلیقسمت‌هایدرکه)

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Generic codeGeneric codeبرایوشدهنوشتهکلیبطورکهشودمیگفتهایبرنامهبه

عنوانبهWarmupمتدمثالعنوانبه.باشدمیاستفادهقابلزیادیمواردیهایکالستمامازاشیاییبنابراینگیرد،میIFighterنوعازمرجعیورودی

کردارسالمتداینبهتوانمیراکنندمیسازیپیادهراinterfaceاینکه فرادرس.باشدمیکلیکدیكمتداینبنابراین

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Type testing

یكآیاکهدادتشخیصتوانمیisعملگرکمكبهبه.خیریاکردهسازیپیادهراinterfaceیكمرجعSoldierکالسنوعازکهsمرجعآیامثالعنوان

سازیپیادهراIfighterبنامintefcaceباشدمی فرادرس.خیریااستکرده

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Interface inheritanceها‌ارث‌بری‌واسطsyntaxازامر،اینانجامبرای.کندارث‌بریدیگرinterfaceیكازمی‌تواندinterfaceیك

راایinterfaceاجرایقصدکالسیكکههنگامی‌که.می‌شوداستفادهکالس‌هادرارث‌بریمشابهتعریفاعضایتمامبایدکالساست،کردهبریارثدیگریinterfaceازinterfaceآنکهدارددیگریinterfaceازinterfaceیكکههنگامی.کندسازیپیادهراارث‌بریزنجیره‌یدرشده

derivedدرکهداردوجودامكاناینمی‌کندارث‌بری interfaceعضواینوشودتعریفعضویكbaseاعضایازیكیبا interfaceدرموجودعضومواقعایندر.باشدهم‌نامbase interface

ازلقبمی‌توانیدهشدارپیغامرفعبرای.دیدخواهیدراهشدارپیغامیكشماونمی‌شوددیدهدیگرderivedدرعضوآنتعریف interface،کلیدیکلمه‌یازnewکنیداستفاده.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

(Ambiguity)ابهامههمرابهراعضوآنناممی‌توانید،می‌کنیدسازیپیادهراinterfaceاعضایازیكیهنگامی‌که

explicitساختنباعثکاراینانجام.بنویسیداشinterfaceنام interface member

implementationخالصهبه‌طوریاexplicit implementationساختن.می‌شودexplicit implementationازinterface method۱:باشدداشتهدلیلدومی‌تواند.

interfaceیكهنگامی‌که methodطریقازراexplicit implementationریقطازبلكهبودنخواهددسترسیقابلکالساشیایطریقازشدهساختهمتدمی‌سازید،

interface referenceاین‌رو،از.داشتخواهیددسترسیآنبهexplicit

implementationسازیپیادهبرایدیگریروشinterface methodاینامااستدوکهاستامكان‌پذیرکالسیكبرای.۲.نیستکالس‌تانازpublicعضویكدیگرمتد،

interfaceسازیپیادهرا(implement)آن‌هاهردویکهداردوجودامكاناینوکندexplicitازاستفادهمواردایندر.باشندداشتهsignatureیكونامیكبامتدهایی

implementationناممتد،نامازقبلشماچراکهمی‌شودابهامرفعباعثinterfaceآن.می‌کنیدمشخصنیزرا

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

پرداخت‌یکسانسيستم‌:‌مثال‌کاربردی،کردیدمشاهدهچندریختیفصلدرکههمانگونههپایبرشرکتدستمزدوحقوقپرداختسیستم

ایلمشرکتکنیدفرض.گردیدطراحیچندریختیمحاسباتتمامتااستبرنامه‌ایپیاده‌سازیبه

غمبالپرداختیاوحقوقپرداختقبیلازهاپرداختوریختیچندروشبهراهاپرداختسایروفاکتورهاهاپرداختاینكهبا.دهدانجامسیستمدریكسانباinterfaceیكابتدالیكندارند،متفاوتیمعانیتماموکنیممیتعریفپرداختجهتمتدیك

interfaceپرداخت،نوعهربامرتبطهایکالس

.کنندمیسازیپیادهرامذکور

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

پرداختسيستم‌:‌مثال‌کاربردیقالبinterfaceاین.کنیممیایجادIpayableبنامinterfaceیكابتداونداردورودیکهکندمیتعریفراGetPaymentAmountبناممتدیكراIPayableواسطEmployeeکالس.گرداندبرمیراپرداختمبلغرایبچونامانمایدسازیپیادهرامذکورمتدبایدبنابراینکندمیسازیپیادهاستنبودهموجودکافیاطالعاتEmployeeکالسدرمتداینسازیپیاده

Employeeکههاییکالستماموشدهتعریفabstractشكلبهبنابراین

سازیپیادهبهمؤظفSalariedEmployeeکالسهمانندبرندمیارثبهرا.هستندمتداین

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

پرداخت‌یکسانسيستم‌:‌مثال‌کاربردییاInvoiceکالسبینیدمیکههمانگونه

راIpayableواسطنیزفاکتورهماندارایبنابراینواستکردهسازیپیادهGetPaymentAmountمتدخودکاربردمطابقآنرابایدوباشدمی

کههاییکالستمام.نمایدسازیپیادهInterfaceسازیپیادهرامذکور

بناممتدیدارایکنندمیGetPaymentAmountکههستند

راینبنابکند،میتعیینراپرداختمبلغاهموجودیتتمامبراییكسانهایبرنامه.گرددمیایجاد

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

نمونه‌خروجي-یکسانسيستم‌پرداخت‌:‌مثال‌کاربردی

private void button1_Click(object sender, EventArgs e){

IPayable[] payableObjects = new IPayable[4];double TotalPayment = 0;

payableObjects[0] = new Invoice("01234", "seat", 2, 37500);payableObjects[1] = new Invoice("56789", "tire", 4, 290000);

payableObjects[2] = new HourlyEmployee("Farshid", "keshavarz", "111-11-1111", 100000, 50);payableObjects[3] = new SalariedEmployee("Mostafa", "haghi kashani", "888-88-8888", 3200000);

foreach (IPayable x in payableObjects){

label1.Text += x.ToString() + "\nPayment: " + x.GetPaymentAmount();TotalPayment += x.GetPaymentAmount();

}label1.Text += "\n -----------------------\nTotal Payment: " + TotalPayment.ToString()+"T";

}

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Delegates

یكبهمی‌تواندکهشیئیبااستبرابرdelegateیكسادهزبانبه

methodیكهنگامی‌کهبنابراین.کندرجوعdelegateدر،می‌سازید

رامتدیكبهreferenceمی‌تواندکهمی‌آوریدبه‌وجودراobjectیكواقع

referenceاینطریقازمی‌تواندمتداین‌رو،از.داردنگاهخودشدر

متدهایازلیستیشاملکهباشدشیتواندمیDelegates.شودفراخوانی

می‌شودموجبdelegate.(یكسانبازگشتیمقادیردارایوامضاهم)یكسان

اینكهبدونکنداجرارامتدها(اجرازمان)runtimeدربتواندشمابرنامهتا

compileدرمتدهاآنبداند timeکهاستذکربهالزم.هستندچیزیچه

Referenceلیستبه Methodsیكبهمربوطdelegate

Invocationاصطالحا Listمی‌شودگفته.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Step By Step Creating and Using the Delegate

Step 1 Declare a Delegate

Step 2 Create a Delegate reference

Step 3 Point the reference pointer to methods

Step 4 Invoke the methods through delegate

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Background - object-oriented method call

.می‌باشدمقابلشكلبهاشیاءمتدهایفراخوانیروش

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Notification

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Delegate definition

:استزیر‌صورتبهdelegateکلیفرم

راآنdelegateکهاستمتدیبازگشتینوعret-typeاین‌جادر

پارامترهای.استdelegateنامبابرابرName.می‌کندفراخوانی

قسمتدرمی‌شوندفراخوانیdelegateطریقازکهمتدنیازمورد

parameter-listمی‌گیردقرار.

رامربوطهمتدنام،می سازيدdelegateازشیءيکهنگامی که

:می دهيمdelegateبه(پارامتربدونمتد،نامتنها)

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Delegate use

GradeChangeتعریفباReportمتدامضای،می‌بینیدمقابلکددرکههمانطور

Invocationبهمی‌تواندمتداینپسدارد،مطابقت ListآبجكتTargetsاضافهما

متد،نامتنها)رامربوطهمتدنام،می‌سازیدdelegateازشیءیكهنگامی‌که.شود

فرادرس.می‌دهیمdelegateبه(پارامتربدون

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Multiple targetsالسکیكاشیاءتوابعشمانداردلزومیهیچکهباشیدداشتهتوجهمی‌توانیدشما.نماییدثبتDelegateشیءیكداخلدرراخاصنیزرادشده‌انایجادمختلفیکالس‌هایازکهاشیائیبهمربوطتوابعدرندباشیكسانآنهاخروجیوورودیپارامترهایاینكهشرطبهتنها

.نماییدتبتDelegateشیءداخل،Delegateشیءیكدرداخلتابعاولینثبتبرایکهکنیددقت

یدبخواهصورتیكهدر.کنیداستفاده(مساوی)=عملگرازمی‌تواننمایید،ثبتDelegateشیءهمانداخلدرنیزرادیگریتوابع.یدنمایاستفادهمنظوراینبرای(مساویبعالوه)=+عملگرازبایدلگرعمازاستفادهجایبهسهواحالتایندراگرکهاستذکربهالزمداخلردشدهثبتقبلازتوابعتمامیکنید،استفاده=عملگراز=+

!می‌گردندUnregisteredخودکارطوربهDelegateشیءDelegateشیءیكداخلدرراشییكازتابعیصورتیكهدر

تابعبایداابتدببرید،بینازرامذکورشیءکهبخواهیدوکرده‌ایدثبتUnregistered(مساویمنها)-=عملگرازاستفادهبارامربوطه

:نماییداقدامشیءآنبردنبینازبهنسبتسپسونموده

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثال.می‌باشدDelegateتعریفاولخط

.می‌باشدPublisherیاcallerهمانStudentکالس

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثالیاهاTargetsهمانRegistararکالسوParentکالس

.هستندSubscripbersهمان

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثال

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثالتمام،کنیمInvokeرانظرموردdelegateآبجكتاگرحال

Invocationدرکهمتدهایی Listاجراهستندموجودآن

delegateآبجكتیكکردنInvokeنحوه‌ی،می‌شوند

نآبه(نیازصورتدر)پارامترارسالومتدیكفراخوانیمانند

StudentکالسازRecordClassمتددرون.می‌باشد

.می‌کنیمInvokeرانظرموردdelegateآبجكت فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Null reference

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Null referenceمثال‌از‌

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Static methodsورودیپارامترهایکهاستاینآنشرطتنهاکردیمعنوانکههمانطوروبودخواهیدDelegateاشیاءداخلدرنیزکالس‌ها(Static)استاتیكتوابعثبتبهقادرشماکهکنیددقت

می‌کنیماستفادهکالسنامازstaticتوابعبهدسترسیبرای.باشندداشتهمطابقتDelegateکالسساختاربانیزاستاتیكتوابعاینخروجیو

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Eventseventیكبرایمی‌تواندobjectیك

eventتعدادی handlerراregisterکند

می‌افتد،اتفاقeventیكهنگامی‌کهو

شدهregisterهایhandlerتمامی

Event.می‌شوندفراخوانی handlerبایدها

.باشندdelegateبامطابق فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Eventseventتعدادیeventیكبرایمی‌تواندobjectیك handlerراregisterهنگامی‌کهوکند

Event)می‌افتداتفاقeventیك Raise)،تمامیhandlerهایregisterفراخوانیشده

Event.می‌شوند handlerبامطابقبایدهاdelegateفرادرس.باشند

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Eventseventتعدادیeventیكبرایمی‌تواندobjectیك

handlerراregisterیكهنگامی‌کهوکندeventاتفاق

فراخوانیشدهregisterهایhandlerتمامیمی‌افتد،

Event.می‌شوند handlerبامطابقبایدهاdelegate

فرادرس.باشند

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Applications

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Applications

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Exceptions

ازاستفادهبا.می‌افتداتفاق(اجرازمان)runtimeدرکهاستخطاییexceptionیك

شدهکنترلروشیكازمی‌توانیدشماسی‌شارپ،درexception-handlingزیرسیستم

اصلیمزیت‌هایازیكی.کنیدhandleراruntimeخطاهایسازمان‌یافته،و

exception handlingاینومی‌دهدانجامراخطاگیریخودکاربه‌طورکهاستاین

اگیریخطخودتانبایدبرنامه‌نویسی،درویژگیاینآمدنبه‌وجودازپیشکهاستدر‌صورتی

Exception.بودخطامستعدهموخسته‌کنندههمکه‌می‌دادیدانجامرا handlingیك

exceptionکه)کدبالك handlerخطابروزهنگامکهمی‌کندتعریف(می‌شودنامیده

یابودنموفقدستیبه‌صورتکهنیستنیازیدیگربنابراین.می‌شوداجراخودکاربه‌صورت

آیدبه‌وجودruntimeدرخطایكاگر.کنیدبررسیرابرنامهازقسمتهربودنموفقعدم

exceptionتوسط handlerسی‌شارپ.شدخواهدبررسیexceptionرااستانداردهای

-index-out-ofوdivide-by-zeroخطاهایمانند)برنامهیكدررایجخطاهایبرای

range)اهمیتدالیلازدیگریكیموضوعاینکهمی‌کندتعریفexception

handlingاستاین.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Exception hierarchyکالس‌هایهمه‌ی.می‌شوندارائهکالس‌هاتوسطهاexceptionسی‌شارپدر

exception(خطاگیریبرایدات‌نتاستانداردکالس‌هایمثل)کالسازبایدExceptionازبخشیخودشکهشوندمشتقSystem namespaceبنابراین.است

مهمزیرکالس‌هایازیكی.هستندExceptionزیرکالسهاexceptionهمه‌یException،کالسSystemExceptionمشخص‌کننده‌یکهاستbase class

Systemدرشدهتعریفپیشازهایexceptionبرای namespaceکالس.استSystemExceptionکالسبهراچیزیExceptionصدردرفقطبلكهنمی‌افزاید

فریم‌وركدات‌نت.می‌گیردقرارفریم‌وركدات‌نتاستانداردهایexceptionزنجیره‌یexceptionتوکارهای(built-in)ازکهمی‌کندتعریفرازیادیبسیار

SystemExceptionرخرصفبرتقسیمخطایهنگامی‌کهمثال،برای.می‌کنندارث‌بریبه‌زودی.می‌آیدبه‌وجودDivideByZeroExcepionنوعازexceptionیكمی‌دهد،کالسازارث‌بریباراخودتانexceptionکالس‌هایچگونهکهشدخواهیدمتوجه

Excepionتعدادی.بنویسیدpropertyآن‌هامهم‌ترینازعددسهکهداردMessage،StackTraceوTargetSiteاین.هستندpropertyهرسههاread-

onlyهستند.Messageمی‌دهدشرحراخطاماهیتکهاسترشتهیكشامل.StackTraceبهمنجرکهاستفراخوانی‌هاییشاملرشتهاینکهاسترشتهیكشامل

تولیدکننده‌یمتدمشخص‌کنندهکهبودهشیءیكشاملTargetSite.شده‌اندخطاexceptionاست.Exception Classاستمتدچندینشاملهمچنین.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Handling an exceptionوtry،catch،throwکلمه‌کلیدیچهارتوسطسی‌شارپدر

finallyجودبه‌ورامرتبطزیرسیستمیكاین‌ها.می‌شودمدیریتدر.دارددیگریازاستفادهبهاشارههرکدام،ازاستفادهکهمی‌آورند

exceptionمبحثبررسیطول handlingکلماتازکدامهرهبمختصرنگاهیاماشدخواهنددادهتوضیحجزییاتباکلیدیازقسمتآن.شودواقعمفیداین‌جادرمی‌تواندهرکداموظایفراآن(exceptions)خطاهایداریدقصدکهبرنامهکدهایblockدرونکنید،بررسی tryیكاگر.می‌گیرندقرار

exceptionدرونtry blockایندهد،رخexception(بهاینمی‌تواندشماکد.می‌شود(throw)پرتاب(اصطالح

exceptionقسمتدرراblock catchروشیبهودریافتسیستم،استانداردهایException.کندhandleراآنمنطقی

کردنthrowبرایامامی‌شوندthrowخودکاربه‌صورتخودشانthrowکلمه‌کلیدیازبایددستیبه‌صورتexceptionیك

رااجبایدشرایطیهرتحتنهایتدرکهکدیهر.کنیداستفادهfinallyقسمتدرشود blockمی‌گیردقرار.ه

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Multiple catch.استدادهرخکهمی‌باشدای‌exceptionنوعExcepTypeاین‌جا،در

بامرتبطcatchجزءتوسطمی‌شود،پرتابexceptionیكهنگامی‌کهمنطقیروشیكباقسمتآندرexceptionسپسوشدهگرفتهخودش

handleکلیفرمکههمان‌طور.می‌شودtry/catchنشانمقابلشكلدرواقعدر.باشدوابستهtryبهمی‌تواندcatchجزءیكازبیشترمی‌دهد،

این‌رو،از.شوداجرابایدcatchکدامکهمی‌کندمشخصexceptionنوعهمانفقطداشت،مطابقتcatchیكباexceptionیكهنگامی‌که

catchبقیه‌یومی‌شوداجراcatchهنگامی‌که.می‌شوندگرفتهنادیدههادر.می‌کنددریافتراآنمقدارeمتغیرمی‌شود،گرفتهexceptionیكeکردنمشخصواقع (exception variable)استاختیاری.exceptionاگر handlerبهدسترسیبهنیازیexception

objectمشخصبهنیازی،(استصورتهمینبهاغلبکه)باشدنداشته.می‌کندکفایتتنهاییبهexceptionنوعکردنمشخصونیستeکردن

اینمهمنكته‌ی.هستندeفاقدمی‌بینیدکهمثال‌هاییاکثردلیلهمینبهtryنشود،پرتابایexceptionهیچاگرکهاست blockبه‌صورت

گرفتهنادیدهآنبهوابستههایcatchهمه‌یوشدخواهداجرامعمولزمانیتنهابنابراین.می‌یابدادامهبعدبهcatchآخرینازاجراومی‌شوند

ازاستفاده.باشدشدهپرتابexceptionیكکهمی‌شوداجراcatchیكcatchکردنمشخصبدونexception typeگرفتنبرایروشیك.استهاexceptionتمامی

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثال‌مدیریت‌استثناء

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثال‌مدیریت‌استثناء

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثال‌مدیریت‌استثناء

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثال‌مدیریت‌استثناء

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثال‌مدیریت‌استثناء

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

مثال‌مدیریت‌استثناء

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Generating an exceptionruntimeتوسطخودکاربه‌طورکههاییexceptionقبلمثال‌هایدر systemیكدستیبه‌صورتمی‌توانیدشمااما.می‌شدندگرفتهبودند،شدهتولیدexceptionازاستفادهبارا

می‌بینید،کههمان‌طور.استکردهارث‌بریExceptionازکهباشدexceptionنوعباکالسیكازشیءیكبایدthrowجلویمقداراین‌جا،در.کنیدپرتابthrowکلمه‌کلیدی

DivideByZeroExceptionقسمتدرthrowازاستفادهباnewکهباشیدداشتهیادبه.استشدهساختهthrowبرایشیءیكبایدشمابنابراین.می‌کندپرتابراشیءیك

defaultازDivideByZeroExceptionشیءساختبرایمورد،ایندر.کنیدپرتابراtypeیكنمی‌توانیدکهمعناستبداناین.کندپرتابراآنتابسازیدآن constructor

exceptionاشیایمی‌کنیدپرتابکههاییexceptionموارداکثردر.هستندموجودهاexceptionبراینیزدیگرهایconstructorامااستشدهاستفاده classکههستندهایی

exceptionچگونهکهشدخواهیدمتوجهمبحثاینیادامه‌در.ساخته‌ایدخودتان classبسازیدراخودتانهای. فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Locating a handler.استتادهافاتفاقکهبالکی‌ستدروناستثناءیكمدیریتفرضپیشصورتبهسیستمباشدنیفتادهاتفاقمناسبخطایمدیریتجاریبالكدرونصورتیكهدر

‌کرددمیمناسبکنندهمدیریتبالكدنبالبهبالك‌هافراخوانیمراحلبرعكسtryازبرنامه‌نویسانبیشتر.برسدmainهمانیابرنامهاصلیبدنهبهتا block

هستندکردناصالحقابلسختکهخطاهاییکردنhandleبرایخارجیtryازومی‌کننداستفاده blockکهخطاهاییکردندرستبرایداخلیtryازمی‌توانیدهمچنینشما.می‌برندبهرهمی‌شوند،اصالحراحت‌تر block

catchبه‌عنوانخارجی all handlerبرایhandleکردنerrorکههاییtryدر blockداخلیhandleکنیداستفاده،نشده‌اند.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Custom exceptionرایجخطاهایاکثرسی‌شارپbuilt-inهایexceptionاگرچه

درexception-handlingمكانیزماما،می‌کنندhandleراقدرتازبخشیواقع،در.نیستمحدودخطاهااینبهسی‌شارپکردنhandleتواناییها،exceptionبهسی‌شارپرویكرد

exception typeشما.می‌سازیدخودتانکهاستهاییکردنhandleبرایراخودتانهایexceptionمی‌توانیدcustom)بسازیدآمدهبه‌وجودخطاهای exception).ساختن

کالسیكاستکافیتنهااست،سادهبسیارexceptionیك.باشدکردهارث‌بریExceptionازکالسآنوکنیدتعریفچیزیهیچاجرایبراینیازیواقعدرشماشده‌یمشتقکالسارث‌بریExceptionازشماکالس‌هایهنگامی‌که.ندارد

exceptionبه‌عنوانآن‌هاازبتوانیدتامی‌شودموجبمی‌کنند،

شاملمی‌سازیدشماکههاییexception.کنیداستفادهpropertyوmethodکهاستهایی

ApplicationExceptionهمچنین.می‌سازدفراهمآنبرایexceptionدرراآناعضایازتعدادیمی‌توانید classکهای

.کنیدoverrideساخته‌اید،خود

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Custom exceptionمثال‌از‌

درضلعیچندکالسبهمجددادر.کنیدفكرindexerمبحث

ازخارجاندیسیكازصورتیكهخطاییكکنیماستفادهمحدودبرنامهومی‌دهدرخاجرازمانبامی‌توانمی‌کندپیداخانمهآنمدیریتواستثتاءیكتعریف

برنامهیافتنخانمهازبرنامهدر.کردجلوگیری

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Custom exceptionمثال‌از‌

یكخودبرنامهبرایمی‌توانیمافیستکتنهاکنیمتعریفاستثناءکالسیاوExceptionکالس

ApplicationExceptionبهکالسبرایمی‌توانیم.ببردارث

وداده‌ایاجزاشدهایجاداستثناءوریمبگینظردرتیزجدیدتابعی

وتابعیاجراهمچنینراپایهکالسخصوصیت‌های

overrideکنیم.

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Custom exceptionمثال‌از‌

یكنباشدمجازمحدودهدرورودیاندیسindexerدرصورتیكهدر

.می‌کندپرتاببیرونبهوکردهایجادMyExceptionنوعازاستثناء

فرادرس.گرددایجادمی‌تواندجاییهردرخطااینکنندهمدیریتبالك

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Custom exceptionمثال‌از‌

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Catching base class

exceptionگرفتنهنگام typeشاملکههاییbaseوderived classبهباید،هستندbaseیكبرایcatchیكزیراکنیددقتهاcatchدنباله‌یگرفتنقرارنحوه‌یوچیدمان

classکالساین‌کهبه‌دلیلمثال،برای.داردتطابقآن،ازشدهمشتقکالس‌هایتمامباException،تماموالدکالسexceptionتمامگرفتنموجبآنگرفتناست،دیگرهایexceptionازاستفاده(شددادهتوضیحقبالکههمان‌طور)البته.می‌شودموجودهایcatch

exceptionکردنمشخصبدون type،تمامیگرفتنبرای(خواناترو)دیگرراهیكexceptionگرفتنکهکنیددقتبایدحال،اینبا.استهاderived class

exceptions(‌ باالییاهمیتازمی‌سازید،راخودتانهایexceptionهنگامی‌که(مخصوصاbaseکردنcatchازاستفادهمزایایازیكی.استبرخوردار classمی‌توانیدکهاستاین

بهآمدهبه‌وجودخطایاگرمثال،برای.کنیدcatchراهاexceptionازکلیدسته‌بندییكbaseکردنcatchنداشت،مطابقتهاcatchازیكهیچ‌کدام classدرمی‌شودموجب.شودگرفتهخطانهایت

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

هاcatchمثال‌ترتيب‌قرارگرفتن‌baseهایexceptionهممی‌خواهیداگر classهموexceptionهای

derived classنوشتندنباله‌یدربایدبگیرید،راcatch،نوعهاderived classیكزیرااستضروریکاراین.دهیدقرارابتدادرراbase

class catchتمامderived classراهاcatchخوشبختانه.می‌کندخطایباآنرعایتعدمصورتدرواستضروریسی‌شارپدرشدهذکرقانون

compile-timeدوزیربرنامه‌ی.می‌شویدمواجهexceptionباکالسکالسازExceptA.می‌سازدExceptBوExceptAنام‌های

ExceptionوExceptBازExceptAسپس.استکردهارث‌بریبرنامهاین‌کهبرای.می‌کندthrowراهاtypeازیكهرexceptionبرنامه

customباشد،مختصر exceptionیكتنهاهاconstructorفراهمرا.می‌دهدشرحراخطاومی‌گیردرارشتهیكکهمی‌آورند،

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

هاcatchمثال‌ترتيب‌قرارگرفتن‌.کنیددقتهاcatchگرفتنقرارترتیبونوعبهمقابلبرنامه‌یدرهکآن‌جااز.باشندداشتهمی‌توانندآن‌هاکهاستترتیبیتنهااین

ExceptBازExceptAاست،شدهمشتقcatchبهمربوطExceptBازقبلبایدExceptAترتیب،همینبه.شودواقع

catchکالسبهمربوطException(کهbase classتمامیexceptionجابه‌جابامی‌توانید.گیردقرارآخردرباید(استها

خطایبااجراهنگامبرنامهکهببینیدها،catchترتیبکردنcompile-timeمی‌شودمواجه.

baseکردنcatchازاستفادهمزایایازیكی classکهاستاین.کنیدcatchراهاexceptionازکلیدسته‌بندییكمی‌توانید

هاcatchازیكهیچ‌کدامبهآمدهبه‌وجودخطایاگرمثالبرایbaseکردنcatchنداشت،مطابقت classدرمی‌شودموجب.شودگرفتهخطانهایت

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

هاcatchعدم‌ترتيب‌صحيح

baseهایexceptionهممی‌خواهیداگر classهمو

exceptionهایderived classدنباله‌یدربایدبگیرید،را

derivedنوع،هاcatchنوشتن classاین.دهیدقرارابتدادررا

baseیكزیرااستضروریکار class catchتمامderived

classراهاcatchدرشدهذکرقانونخوشبختانه.می‌کند

خطایباآنرعایتعدمصورتدرواستضروریسی‌شارپ

compile-timeمی‌شویدمواجه.

برنامهکهمی‌ببینیدهاcatchترتیبکردنجابه‌جاباقبلیمثالدر

.می‌شودمواجهcompile-timeخطایبااجراهنگام

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

Finallyازپسحتماکدازبلوكیكمی‌خواهیدشماگاهی‌اوقات

try/catchیكاستممكنمثالبرای.شوداجرا

exceptionیابدپایانمتدیكاجرایادامه‌یتاشودباعث

networkیكیافایلیكمتدآناما connectionبازرا

چنیناین.شودبستهنهایتدربایدحتماکهاستکرده

وادهسحلراهسی‌شارپوهستندزیادبرنامه‌نویسیدرشرایطی

finallyازاستفادهحلراهاینکهدادهارائهآنبرایمناسبی

blockاست.Finally blockدنباله‌یانتهایدرباید

catchبگیردقرارها.Finally blockشرایطیهرتحت

tryنیستمهمکهمعناستبداناین.می‌شوداجرا blockبا

finallyنهایتدرخیر،یاشوداجراموفقیت blockاجرا

.شدخواهد

فرادرس

FaraDars.org

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

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

faradars.org/fvcs9404

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

faradars.org/fvcs9404

این اسالید ها بر مبنای نکات مطرح شده در فرادرس« آموزش جامع شی گرایی در سی شارپ»

.تهیه شده است

.یدبرای کسب اطالعات بیشتر در مورد این آموزش به لینک زیر مراجعه نمای

faradars.org/fvcs9404

فرادرس

FaraDars.org