PDA

View Full Version : سوال: علت استفاده از کلمه virtual و override در معماری شی گرا



alireza_tavakol
یک شنبه 04 مرداد 1388, 12:14 عصر
اگه توی کلاس پدر یک متد داشته باشیم و توی کلاس فرزند ( کلاس مشتق شده از کلاس پدر ) مجددآ همان متد با پیاده سازی متفاوت داشته باشم ، اصولا در هنگام پیاده سازی متد در کلاس پدر از کلمه virtual استفاده میشود و در کلاس فرزند در هنگام پیاده سازی متد از کلمه override استفاده میشود. ( چند ریختی )

سوال من اینه اگه در کلاس پدر کلمه virtual را ننویسیم و در کلاس فرزند کلمه override را ننویسیم باز هم به مطلوب خود میرسیم علت پیاده سازی این دو کلمه در معماری شی گرا چی بوده؟:متفکر:

SMRAH1
یک شنبه 04 مرداد 1388, 14:33 عصر
ُسلام

در شی گرایی ،شما می تونید یک شی از نوع فرزند رو به یک متغیر از نوع پدر تخصیص بدید یعنی :

public class A
{
...
}
public class B : A
{
.....
}

A a = new B();حلا فرض کنید هر دو کلاس دارای متدی به نام func هستند که در دو حالت، دستور زیر را بررسی می کنیم :

a.func();1) اگر از virtual استفاده نشود:
در این جا فراخوان بالا باعث اجرای تابع func از کلاس A می شود (چون متغیر از نوع A) است.

2) اگر از کلمه virtual استفاده شود :
در اینجا فراخوان بالا باعث اجرای تابع func از کلاس B می شود (با اینکه متغیر از نوع A است و لی چون تابع virtual است،برنامه تابع مناسب را با توجه به نوع شی ،نوع شی از نوع B است، فراخوانی می کند).

موفق باشید

alireza_tavakol
یک شنبه 04 مرداد 1388, 15:49 عصر
با تشکر از پاسخ دوست عزیزم SMRAH1

نتیجه گیری عجولانه ::کف:!

به جز مواقعی که در نمونه سازی از کلاس پدر قرار است سازنده کلاس فرزند را صدا بزنیم کلمات virtual و override بلااستفاده هستند و کاربرد دیگری ندارند!

اگه این نتیجه گیری غیر علمی بفرمایید ...

Unknownlive
یک شنبه 04 مرداد 1388, 16:53 عصر
تمامی سوال های که شما تا حالا کردید من دیدم دوباره می گم برید همون کتاب را بخوانید شما نگاهی به کلاس های String مایکروسافت بندازید و ببینید بدون Overide می شه به این تمیزی کار کرد یا خیر