在c#中嵌套基类

wil*_*ler 4 c# polymorphism

我有3个类,两个继承自1:

public class Employee {
    private virtual double getBonus() { ... }
    private virtual double getSalary() { ... }
}

public class Nepotism : Employee {
    private double getBonus() { ... }
}

public class Volunteer : Employee {
    private double getSalary() { ... }
}
Run Code Online (Sandbox Code Playgroud)

所以问题是有时会有一个志愿者获得裙带关系奖金 - 有没有办法编写构造函数以允许覆盖/嵌套基类,如下所示:

Employee Bill = new Volunteer(new Nepotism());
Run Code Online (Sandbox Code Playgroud)

我想的是:

public class Volunteer : Employee {
    private Employee _nest;
    public Volunteer(Employee nest) 
        : base() {
        _nest = nest;
        // now what?
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上我希望一些对象具有来自两个类的覆盖.

我想避免编写覆盖方法来检查嵌套类.

getSalary() {
    return (nest != null) ? nest.salary : salary; // I want to avoid this if I can
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我是在正确的轨道上吗?我脱轨了吗?

Ree*_*sey 13

您可能需要考虑使用Decorator模式而不是子类化.

它提供了子类化的替代方法,当您需要向类的单个实例添加"多个"附加功能时,它非常有用,这正是场景.