PDA

View Full Version : توضیح در مورد override



adabyron
دوشنبه 28 خرداد 1386, 21:45 عصر
سلام . لطفا در مورد overriding توضیح بدید . اینکه چه قابلیتهایی داره و چه مواقعی ازش استفاده می شه ممنونم

Alireza_Salehi
دوشنبه 28 خرداد 1386, 21:55 عصر
زمانی که لازم باشه method یا property یا indexer یا event از یک کلاس که قبلا تعریف شده رو تغییر بدیم یا مواردی به قابلیت های پیشفرض آن اضافه کنیم از override استفاده می کنیم.

فقط اعضایی از کلاس که به صورت abstract یا virtual یا Override تعریف شده اند قابل Override کردن هستند.

مثلا ممکنه شما بخواهید ظاهر یک کنترل را تغییر بدید در این صورت رویداد Paint آن کنترل را Override می کنیم و ترسیمات دلخواه را علاوه در رویداد Override شده انجام می دهیم.

به طور ساده شاید بشه گفت دوباره پیاده سازی کردن یک چیز - دقت کنید تعاریف تغییر نمی کنند و فقط محتوا تغییر می کند!

adabyron
دوشنبه 28 خرداد 1386, 21:58 عصر
ممنونم از اینکه به سوالم توجه کردین ولی راستش تعریف overrid رو میدونستم اما احتیاج به توضیحات بیشتری دارم اگر هم در این مورد یه کد ساده بذارین ممنون میشم

Alireza_Salehi
دوشنبه 28 خرداد 1386, 22:22 عصر
با Override کردن می توانید عضو مورد نظر را دوباره تعریف کنید یا به تعریف پیشفرض آنچیزی اضافه کنید، مثال زیر را در نظر بگیرید:


class BaseClass
{
public virtual String GetString(String s)
{
return "Base Method: " + s;
}
}
class TestClass:BaseClass
{
public override string GetString(string s)
{
return "Override Method: " + s;
}
}

در این مثال کلاس پایه عملیاتی بر روی ورودی انجام می دهد ، در کلاس مشتق شده بر اساس نیاز عملیات جدیدی مورد نیاز است که با Override کردن متد مورد نظر عملیات جدید را اضافه می کنیم.

در صورتی که بخواهیم علاوه بر عملیات جدید عملیات کلاس پایه نیز انجام شود با کلمه کلیدی base به آن دسترسی دارین در آن صورت کلاس دوم به صورت زیر می شود:


class TestClass:BaseClass
{
public override string GetString(string s)
{
return "Override Method: " + s + base.GetString(s);
}
}



اگر بد توضیح دادم به بزرگواری خودتون ببخشید!

kiani_behzad
دوشنبه 28 خرداد 1386, 22:23 عصر
ovverride کردن یکی از مباحث مهم شی گرایی هست و شما اگر از وراثت استفاده کنید حتما" باید با این قابلیت آشنا باشید. من یک مثال خیلی ساده از کاربردش می زنم:
فرض کنید شما کلاسی برای مستطیل نوشتین. و حالا می خوایین کلاس مربع رو بنویسین چون هر مربع یک مستطیل هست شما می تونین از کلاس مستطیل که قبلا" نوشتین ارث ببرین فقط باید برخی متدها مانند متد محاسبه ی مساحت مستطیل رو که قبلا" نوشتین رو برای محاسبه ی مساحت مربع ovverride کنین. اگه توضیح کامل می خوایین بگین تا بدم آخه الآن یه کم سرم شلوغه امیدوارم حرفام موثر بوده باشه.
Kiani.behzad@gmail.com

adabyron
دوشنبه 28 خرداد 1386, 22:34 عصر
ممنونم به خاطر توضیحاتتون اتفاقا خیلی هم مفید و واضح بود .

hdv212
دوشنبه 28 خرداد 1386, 23:30 عصر
به صورت ساده اگه بخوایم بیان کنیم، اینه که بعضی از کنترل ها یا کلاسها در کدشون دارای متدهای virtual هستند، به این معنی که این متدها میتونن در کلاسهای مشتق شده خودشون باطل یا override بشن، یعنی دوباره رفتارشون تعریف بشه.