دورهمی برنامه نویسی

سی شارپ,چندریختی در سی شارپامروز می خواهیم درباره polymorphism در سی شارپ صحبت کنیمو اینکه چرا مایکروسافت این قابلیت را برای ما قرار داده؟ در مقاله قبل درباره مفهوم شی گرایی صحب

مبحث چند ریختی در شی گرایی چیست؟

مبحث چند ریختی در شی گرایی چیست؟

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


روش های مختلف چند ریختی در سی شارپ:

  • متدهای مجازی 

متد مجازی، متدی است که در کلاس پایه با واژه virtual اعلام میشود و در یک یا چند کلاس مشتق دوباره تعریف میشود. بنابراین هر کلاس مشتق میتواند نسخه خاصی از متد مجازی را داشته باشد. در کلاس مشتق، هنگام تعریف مجدد متد مجازی، باید آنرا با واژه کلیدی override مشخص کرد.اگر بخواهید در کلاس مشتق، متدی همنام با کلاس پایه داشته باشید، ولی متد مجازی  نباشد، (یعنی فرض کنید، میخواهید متد مجازی ایجاد کنید که هیچ ربطی به کلاس مشتق ندارد) در این صورت در کلاس مشتق، این متد را باید با واژه new مشخص کنید.
توجه کنید که در هنگام تعریف مجدد متدها در کلاسهای پایه و مشتق اسامی و امضاهای نوع متد تعریف شده دقیقا با متد مجازی یکسان باشد.

  • کلاسها ومتدهای انتزاعی

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

  • delegate ها

متغیرهای عضو کلاس(فیلدها) را میتوان بصورت ثابت const یا readonly اعلان کرد. فیلدهایی که با واژه const اعلان میشوند، در هنگام فراخوانی باید مقدار اولیه بگیرند. فیلدهایی که با واژه readonly اعلان میشوند، میتوانند در سازنده کلاس مقدار اولیه بگیرند، ولی پس از آن مقدارشان قابل تغییر نیست.
گاهی خوب است که اشیا، متدها را بعنوان پارامترها به متدهای دیگر ارسال کنند اما سی شارپ اجازه نمیدهد که مرجع های متد، مستقیما بعنوان پارامتر به متدهای دیگر ارسال شوند به همین دلیل برای ما delegate را قرار داده است.
دلیگیت ها در C# در واقع اشاره گری به متدها هستند. کاربرد اصلی آن جایی است که میخواهیم قطعه کدی را اجرا کنیم اما تا زمان اجرای برنامه آن قطعه کد مشخص نیست کدام قسمت از برنامه است.

  • تعریف مجدد عملگرها

چندریختی در سی شارپ

تعریف مجدد عملگرها، شکل دیگری از چندریختی است . از تعریف مجدد عملگرها وقتی استفاده میشود که انجام عملیات، نسبت به فراخوانی عادی متد، روشن تر انجام شود. بعنوان مثال، عملگر + میتواند دو عدد صحیح یا دو عدد اعشاری را با هم جمع کند و دو رشته را با هم الحاق کند. مترجم با توجه به عملوندهای آن متوجه میشود که چه کدی باید تولید نماید. علاوه بر این در #C امکاناتی فراهم آماده است که برنامه نویس میتواند عملگرها را به دلخواه خودش تعریف کند.

کلام آخر:

خب دوستان این هم بحث چند ریختی در سی شارپ اگر به دنبال آموزش های بیشتری هستید می توانید از سایت خود مایکروسافت استفاده کنید و یا سوال خودتان را در انجمن Stack Overflow  استفاده کنید چرا که جامعه ای بزرگ و فعال در زمینه سی شارپ دارد. موفق باشید.

 

+ نوشته شده در  شنبه 4 بهمن 1399ساعت 20:53  توسط fattahi