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

وبلاگ آموزش سی شارپ

سلام خدمت همه شما دوستان عزیز که به من لطف داشتید و وبلاگ رو دنبال کردین...از مباحثی که قصد داشتم مطرح کنم
File,delegate,event
هنوز باقی مونده که احتمالاً تو تابستون می گم...شاید هم نگفتم هیچ وقت!:D
به هر حال ادامه آموزش رو تو درس ساختمان داده می گم! به آدرس زیر:
http://datastructurekelas.blogspot.com
تا اطلاع ثانوی موفق باشید!:D

۱۳۸۸ شهریور ۳۱, سه‌شنبه

Override & Virtual

مطلبی که می خواستم بگم در مورد تابع virtual و override کردن بود!

از همون برنامه پایین! به این کد نگاه کنین:

class Kaaj : Dereakht
{
public virtual void derakht()
{
base.derakht();
Console.WriteLine("رشد به صورت طبقه طبقه برگهای سوزنی و همیشه سبز");
}
}

اگر ما درختی رو که می خوایم تعریف کنیم! از جنس کاج تعریف کنیم! مشکلی نداریم! اما اگه بگیم درخت اون وقته که خاصیت کاج براش نوشته نمیشه! یعنی خروجی برنامه فقط این میشه:
ریشه ، ساقه ، برگ
چرا این اتفاق میافته؟! واسه این که تابع کلاس کاج رو override نکردیم!

اما مال سرو رو نگاه کنین:


class Sarv : Kaaj
{
public override void derakht()
{
base.derakht();
Console.WriteLine("برگهای لطیف تر ، رشد منظم");
}
}
اگر سرو رو از جنس درخت تعریف کنیم خروجی برنامه این میشه:
ریشه ، ساقه ، برگ
برگهای لطیف تر ، رشد منظم

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

مثل این هست که مثلاً بدن شما از نظر فیزیکی به پدرتون رفته! این 2تا حالت داره یا تابع بدن پدر شما Virtual نبوده واسه همین شما ناچراً ازش استفاده می کنین! یا این که Virtual بوده ولی شما می خواستید که بدنتون مثل پدرتون بشه!(البته بحث مربوط به استخوان بندی و دوران طفولیت داخل شکم مادره!( خنده )

اما در مورد اخلاقتون ، اخلاقتون به پدرتون رفته ولی رفتار های مربوط به خودتون رو هم دارین!
این یعنی این که متد اخلاق پدر شما Virtual بوده و شما ازش استفاده کردین و override کردینش و اخلاق های مربوط به خودتون رو هم بهش اضافه کردین!

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

۱ نظر: