PDA

View Full Version : سوال: یک سوال در مورد چندریختی



mehdi_7
سه شنبه 26 مهر 1390, 19:58 عصر
با سلام
آیا نوشتن virtual / override در چند ریختی مهم هست؟ چون اگر ننویسیم هم باز هم میتونیم در کلاس مشتق شده، یک پیاده سازی جدید بنویسیم

Amir Oveisi
چهارشنبه 27 مهر 1390, 00:34 صبح
در حالت کلی سه روش برای پیاده سازی polymorphism وجود داره:
۱- Interface Polymorphism
2- Inheritance polymorphism
3- Polymorphism با استفاده از کلاس های Abstract

از هر سه روش برای این منظور میشه استفاده کرد اما در عمل ثابت شده که روش دوم (که همونیه که سوال شماست) در پروژه های بزرگ به خوبی جواب نمیده به خصوص به دلیل افزایش زمان توسعه. اما برای پروژه های کوچک انتخاب مناسبی هست. بنابراین با توجه به کاری که قراره انجام بشه یکی از این سه روش رو انتخاب کنید.

توضیحات کامل:
http://msdn.microsoft.com/en-us/library/9w2ctx1s%28v=vs.71%29.aspx
موفق باشید

gwbasic
چهارشنبه 27 مهر 1390, 07:59 صبح
دو روش برای پیاده سازی مجدد یک متد وجود دارد. یکی virtual/Override و دیگری روش hiding. در روش دوم برای بازنویسی یک متد از new استفاده می شود که البته اگه نوشته نشه کامپایلر فقط Warning می ده ولی بهتره که نوشته بشه. این موردی که شما می گید روش دوم هست و تنها تفاوتی هم که این دو روش با هم دارند اینه که هنگام casting رفتار متفاوتی از خودشون نشون می دن درحالت اول هرگاه یه کلاسی از تایپ فرزند رو به کلاس پدر cast کنیم در هر صورت متدی رو صدا بزنیم ، متد فرزند یعنی متدی که override شده اجرا می شود ولی در حالت دوم متد پدر اجرا می شه.

می تونید برای اطلاع بیشتر به آموزش سی شارپ که در این سایت گذاشتم مراجعه کنید
http://barnamenevis.org/showthread.php?208537-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B2%DB%8C%D8%A7%D9%86-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE&highlight=%D8%A2%D9%85%D9%88%D8%B2%D8%B4+%D8%B2%DB %8C%D8%A7%D9%86+%D8%B3%DB%8C+%D8%B4%D8%A7%D8%B1%D9 %BE