Я имею дело с Шаблон оформления декоратора . Что я получил сейчас:
Моя база abstract class Worker
:
public abstract class Worker
{
public float UsdPerHour { get; set; }
public int HoursPerDay { get; set; }
public int DaysOfWork { get; set; }
public abstract float CountSalary();
}
Это абстракция, потому что это основа для моих Workers
классов. Я думаю, что это не обязательно, что внутри этих классов. Если вы хотите, я добавлю его в мои правки.
Затем я начинаю реализацию моего декоратора. Каждый Worker
имеет CountSalary()
. Я хочу применять бонусы к своей зарплате на основе декоратора.
Мы начинаем с abstract Bonus
класса:
public abstract class Bonus : Worker
{
public Bonus(Worker worker) => this.worker = worker;
public override float CountSalary() => worker.CountSalary();
private Worker worker { get; set; }
}
Бонус - базовые классы для AmountBonus
класса.
public class AmountBonus : Bonus
{
public AmountBonus(Worker worker) : base(worker: worker){ }
// is this 'base' call correct?
public override float CountSalary()
{
throw new NotImplementedException();
}
private Worker worker;
}
У меня вопрос, как получить ссылку на объект Worker worker
в базовом классе (Bonus
) в классе конкретного декоратора как AmountBonus
?
EDIT
Основываясь на вашей помощи, могу ли я удалить private Worker worker
из AmountBonus
класса и играть с worker
из базового Bonus
класса, как base.worker
? Возможно ли это?
VS не сказал мне, что не разрешено
public override float CountSalary() => base.worker.CountSalary();