ورود

View Full Version : سوال: override کردن متد در کلاس والد



parsdarab
پنج شنبه 28 مرداد 1395, 20:16 عصر
سلام
من میخواستم یک متد در کلاس والد را override کنم چون عملیاتی که در کلاس پایه اتفاق میافته مد نظر نمی باشد و احتیاج به عملیات اضافه تری هست به همین خاطر تصمیم گرفتم که متد کلاس پایه رو در کلاس والد override کنم

کلاس پایه این طوری تعریف شده است





public class BaseServiceGeneric<TEntity> : IBaseServiceGeneric<TEntity>
where TEntity : class
{
public IUnitOfWork _uow;
public IDbSet<TEntity> _BaseModel;


public BaseServiceGeneric(IUnitOfWork uow)
{
_uow = uow;
_BaseModel = _uow.Set<TEntity>();
}


public virtual void Base_AddOrUpdate(TEntity entity)
{
_BaseModel.AddOrUpdate(entity);
}
}

متدی که میخاد override بشه Base_AddOrUpdate هست.
اینم کلاس والد هست



public class BaseServiceSetting : BaseServiceGeneric<BaseSetting>, IBaseServiceSetting
{
//IUnitOfWork _uow;
readonly IDbSet<BaseSetting> _model;




#region کانستراکتور
public BaseServiceSetting(IUnitOfWork uow)
: base(uow)
{
_uow = uow;
_model = _uow.Set<BaseSetting>();
}


#endregion


public void Base_AddOrUpdate(BaseSetting model, object modelConvert)
{
model.CreateXML(modelConvert);
base.Base_AddOrUpdate(model);
}
}

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

142041

parsdarab
سه شنبه 30 شهریور 1395, 18:11 عصر
up........................

Moien Tajik
چهارشنبه 31 شهریور 1395, 00:33 صبح
http://www.codingforums.com/computer-programming/171894-c-how-do-i-overwrite-parent-method.html
http://www.akadia.com/services/dotnet_polymorphism.html

parsdarab
شنبه 03 مهر 1395, 17:17 عصر
چون از اینترفیس ارث بری شده به همین سادگی نیست.
بازم متشکرم

hakim22
شنبه 03 مهر 1395, 17:54 عصر
به طور کلی وقتی یک کلاس Generic میسازید بهتر به دنبال تغییر یا Override متدها نباشید. راه اول اینه که برای اون متدی که میخواهید اضافه کنید یک کلاس جدید تعریف کنید (به همراه اینترفیس و ...) بعد به کلاس مورد نظر تزریق کنید.
راه دیگه اینه که از Extention Method ها استفاده کنید. Linq و کلاسهایی مانند List و Enumerable از همین روش استفاده می کنند.

Black_Hammer
دوشنبه 05 مهر 1395, 00:01 صبح
http://www.codingforums.com/computer-programming/171894-c-how-do-i-overwrite-parent-method.html
http://www.akadia.com/services/dotnet_polymorphism.html
سلام
آقا شما چرا همیشه سایتای خارجی رو معرفی می کنید .:متفکر::متفکر:
واقعا عجیبه اینجا ایرانه ها مشتی مطمعا دوستان هم خیلی ممنون می شن اگه رفرنس های ایرانی رو معرفی کنید. ممنون:بوس:

Moien Tajik
دوشنبه 05 مهر 1395, 14:28 عصر
سلام
آقا شما چرا همیشه سایتای خارجی رو معرفی می کنید .:متفکر::متفکر:
واقعا عجیبه اینجا ایرانه ها مشتی مطمعا دوستان هم خیلی ممنون می شن اگه رفرنس های ایرانی رو معرفی کنید. ممنون:بوس:

خیلی از مسائلی که دنبالش هستیم تا یه سطح متوسطی در مقالات ایرانی میتونید جوابش رو پیدا کنید و وقتی یکم سطح سوال بالا میره امکان نداره در سایت هایی جز StackOverFlow و CSharpCorner و ... جواب رو پیدا کنید ، و متاسفانه مخصوصا در سایت های ایرانی ... :)

ali_md110
دوشنبه 05 مهر 1395, 23:21 عصر
خیلی از مسائلی که دنبالش هستیم تا یه سطح متوسطی در مقالات ایرانی میتونید جوابش رو پیدا کنید و وقتی یکم سطح سوال بالا میره امکان نداره در سایت هایی جز StackOverFlow و CSharpCorner و ... جواب رو پیدا کنید ، و متاسفانه مخصوصا در سایت های ایرانی ... :)

جای بحثش اینجا نیست ولی این سطح متوسط رو صریحتر مشخص بکنید بگید اولا خودتون چه سطحی هستید؟!!!!!
خیلی از سایتهای ایرانی بسیار بالاتر از سطح متوسط هستند
سایت اقای نصیری رو ببینید نظرتون تغییر میکنه
http://www.dotnettips.info

parsdarab
سه شنبه 06 مهر 1395, 22:52 عصر
به طور کلی وقتی یک کلاس Generic میسازید بهتر به دنبال تغییر یا Override متدها نباشید. راه اول اینه که برای اون متدی که میخواهید اضافه کنید یک کلاس جدید تعریف کنید (به همراه اینترفیس و ...) بعد به کلاس مورد نظر تزریق کنید.


سلام
من کلاس والد که از کلاس جنریک ارث بری کرده بود را حذف کردم و تمام متدهای کلاس پایه در اینتفیس کلاس والد کپی شد(یعنی تمام متدها تکراری کپی شد بجز addorupdate)


public class BaseServiceSetting : IBaseServiceSetting
{
IUnitOfWork _uow;
readonly IDbSet<BaseSetting> _model;


#region کانستراکتور
public BaseServiceSetting(IUnitOfWork uow)
//: base(uow)
{
_uow = uow;
_model = _uow.Set<BaseSetting>();
}

#endregion
/// <summary>
/// برای حالت سفارشی این متد override شده است
/// </summary>
/// <param name="model">کلاسی که معاذل ان در بانک است</param>
/// <param name="modelConvert">کلاسی که به ایکس ام ال ذخیره می شود</param>
public void Base_AddOrUpdate(BaseSetting model, object modelConvert)
{
//base.Base_AddOrUpdate(model);

model.CreateXML(modelConvert);
_model.AddOrUpdate(model);
}
}