PDA

View Full Version : مبتدی: مفهوم override در چند ریختی



javady_joon
یک شنبه 19 مهر 1394, 18:34 عصر
با سلام من دارم #C یاد می گیرم و به مطلب چند ریختی رسیدم اما هر چه که می خونم متوجه نمی شم بببینید منت اینجوری فهمیدم که وقتی می خوایم از یک متد چند بار استفاده های گوناگونی کنیم از این روش استفاده می کنیم طبق مثالی که خود مطالب زدن مثلا میان توی کلاس پایه A یک متد تعریف می کنند مثلا

class A
{
public virtual void show()
{
console.writeln (" I am first method ");
}
}

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

class B : A
{
public override void show()
{
console.writeline (" I am tow method");
}
}

خوب حالا میان توی Main متد ها رو فذاخونی می کنند که شما استادید دیگه

void main()
{
A str = new A();
B str2 = new B();
str.show();
str2.show();
console.ReadKey(); // برای خالی نبودن عریضه که خروجی وایسه تا ببینیم
}

خوب حالا وقتی برنامه رو اجرا می کنیم دو رشته مورد نظر اجرا میشهاما خوب بدون کلمات کلیدی Override و Virtcual هم برنامه دو رشته رو چاپ می کنه البته با یک warning که این هستالبته اینجا متد نام کلاس ها فرق می کنه


http://www.w3-farsi.com/forum/?qa=blob&qa_blobid=3618121828137061970

می خوام بدونم یعنی این دو کلمه فقط برای جلوگیری از این Warning میان وسط؟من خیلی تلاش کردم که فرق بود و نبود این دو رو بدونم ولی متاسفانه همه منابع فارسی از روی هم کپی - پیست کردن و مطالب تازه ای برای درک بهتر موضوع ارائه ندادن .این هم یک نمونه دیگر از Warning در این برنامه متغیر ها جواب میدن

http://www.w3-farsi.com/forum/?qa=blob&qa_blobid=10933618128240578451

پیشاپیش از کمکتون تشکر می کنم و ممنون میشم که سوای منابع موجود با زبانی ساده تر مفهوم را توضیح دهید.

rahnema1
یک شنبه 19 مهر 1394, 19:43 عصر
سلام
شما کد زیر را بنویسید

A str = new A();
A str2 = new B();

شیء str2 نوعش در هنگام «کامپایل» A هست اما در هنگام «اجرا» نوعش می شه B
متد virtual باعث می شه متد مربوط به «نوع زمان اجرا» انتخاب بشه اما متد معمولی با توجه به «نوع زمان کامپایل» انتخاب می شه