PDA

View Full Version : آموزش: نحوه Override کردن یک متد در Partial Class



صادق صدقی
سه شنبه 23 فروردین 1401, 17:28 عصر
با سلام

شاید یه سری جاها نیاز داشته باشین یک کلاس داشته باشیم که یه جای دیگه بخوایم متدی بهش اضافه کنیم یا بتونیم متدی رو بتونیم تغییر بدیم!! یا در اصطلاح Overrides کنیمش

خوب همون طور که می دونین کلید واژه Partial به ما کمک میکنه کلاس هامون رو بعدا بتونیم با همون نام گسترشش بدیم
حالا اگر بخوایم یه متد رو در اصلاح تغییر بدیم یا گسترشش بدیم از کلید واژه virtual استفاده میکنیم

ولی !!! یه ماجرا اینجا هست
شما نمی تونین یک متد رو که در یک کلاس که پارشیال هست و در یک فضای نام (NameSpace) ؛ Override کنین!
یه راهکار ساده اینه کلاس پایه تون مثلا کلاس Student توی یک NameSpace باشه مثلا اینجا نیم اسپیس x داریم
کلاس دوم تون با همون نام Student توی یک NameSpace غیر X باشه باشه و حتما از اون کلاس inherit شده باشه




namespace ClassLibrary2.BaseClass
{
/// <summary>
/// برای داشتن یک کلاس و یک متد که بتونیم بعدا اور راید کنیم باید حتما توی یک نیم اسپیس متفاوت باشهپ
/// اینجا داریم از فضای نام BassClass استفاده میکنیم
/// </summary>
public partial class StudentService
{
public virtual int Save(StudentService s)
{
throw new NotImplementedException();
}
}
}



کلاس دوم


namespace ClassLibrary2
{
/// <summary>
/// کلاس پارشیال که می تونیم داخلش یک متد رو اور راید
/// حتما باید کلاس ارث بری کنه از کلاسی که متد مد نظر داخلش هست
/// متد سیو باید اول در اون کلاس که در یک نیم اسپیس جدا گانه هست تعریف برشه با کلید واژه virtual
/// </summary>
public partial class StudentService : BaseClass.StudentService
{
public override int Save(BaseClass.StudentService s)
{

return base.Save(s);
}
}
}




درپیوست هم یه مثال براش زدم و گذاشتم براتون

How to Override Mehtod in partial C# class


پ.ن: کجا ها کار برد داره حالا؟
شما زمانی که دارین ORM خودتون رو می نویسین تمام کلاس هاتون رو می تونین به صورت پایه بنویسین و بعد اگر چایی نیاز به تغییر کلاس یا متد داشتین با خیال راحت اون توسعه تون رو با کمترین هزینه خواهین داشت

ShayanFiroozi
چهارشنبه 31 فروردین 1401, 05:18 صبح
دوست خوبم شما به جای Inheritance از Composition و اینترفیس ها استفاده کنین بهتره.