PDA

View Full Version : سوال: سئوال در مورد کلاسهای آینده نگر



parsdarab
پنج شنبه 09 اردیبهشت 1395, 12:39 عصر
سلام دوستان
من یک کلاس اینترفیس به صورت زیر تعریف کردم

public interface IBaseServiceGeneric<T>
{
void Base_AddOrUpdate(T entity);
}

این کلاس به صورت زیر از اینترفیس استفاده میکنه

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


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


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

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


public class BaseServiceTransaction : BaseServiceGeneric<BaseTransaction>, IBaseServiceTransaction
{


readonly IDbSet<BaseTransaction> _model;
readonly IDbSet<BaseCredit> _modelBaseCredit;


#region کانستراکتور
public BaseServiceTransaction(IUnitOfWork uow)
: base(uow)
{
_uow = uow;
_model = _uow.Set<BaseTransaction>();
_modelBaseCredit = _uow.Set<BaseCredit>();


}
#endregion




public override void Base_AddOrUpdate(BaseTransaction entity)
{
//ممکن است بیش از حد برداشت داشته باشد


BaseCredit objCredit;


if (entity.Credit == 0) return;


//اضافه کردن تراکنش
_model.Add(entity);


//پیدا کردن اعتبار کاربر
objCredit = _modelBaseCredit.FirstOrDefault(x => x.UserId == entity.UserId);
if (objCredit != null)
{
objCredit.Credit += entity.Credit;
}
else
{
objCredit = new BaseCredit();
objCredit.Credit = entity.Credit;
objCredit.UserId = entity.UserId;
}
//آپدیت کردن اعتبار کاربر در بانک اطلاعاتی
_modelBaseCredit.AddOrUpdate(p => p.UserId, objCredit);




}
}





خوب الان سئوال اینجاست که من میخام روال Base_AddOrUpdate را به صورت protected تعریف کنم که در این کلاس آخری BaseServiceTransaction بتونم کدهای آینده نگر بنویسیم
مشکل اینجاست که اگه من بخوام در کلاس BaseServiceGeneric نوع روال را protected تعریف کنم باید اینترفیس آن را هم به protected تغییر بدم که به پیام زیر روبه رو می شم.
The modifier 'protected' is not valid for this item
البته به تعریف کردن روال از نوع virtual و ovverride کردن اون به جواب رسیدم.
اما می خوام با استفاده از protected کد رو جلو ببرم.
مرسی از همگی