从baseclass访问子类方法和属性

时间:2016-06-20 18:23:58

标签: c# inheritance

我正在考虑我的代码。我有一个Car类作为基类。 SUV和轿车的延伸车型。潜在地,我将不得不添加更多类型的汽车。它们都具有完全相同的Run方法。我想知道是否可以从所有派生类中删除Run方法,并将Run方法保留在Car类中,该类引用在派生类中创建的点火。以下是简化代码。此外,点火应该只创造一次。

public abstract class Car
{
    static Ignition ignition;
    static void Start(){ ignition = A;}
    public void Run(){
        using(ignition){
            Start{};
        }
    }
}

public class Sedan : Car
{
    static Ignition ignition;
    static void Start(){ ignition = B;}
    public void Run(){
        using(ignition){
            Start{};
        }
    }
}

public class SUV : Car
{
    static Ignition ignition;
    static void Start(){ ignition = C;}
    public void Run(){
        using(ignition){
            Start{};
        }
    }
}

2 个答案:

答案 0 :(得分:2)

  

我想知道是否可以从所有派生类中删除Run方法,并在Car类中保留Run方法,该类引用在派生类中创建的点火

是的,但前提是你摆脱了static方法和属性。如果你创建实例方法和属性,那么它们将被继承,你可以使Start虚拟:

public abstract class Car
{
    protected Ignition ignition {get; set;}
    virtual void Start(){ ignition = A;}
    public void Run(){
            Start();
    }
}

public class Sedan : Car
{
    override void Start(){ ignition = B;}
}

public class SUV : Car
{
    override void Start(){ ignition = C;}
}

答案 1 :(得分:0)

您不需要在每个派生类中实现Run(),事实上我认为您不希望这个示例。每个派生可以提供他们自己的Ignition,很好,但只有你的基类只有Run()

另外,有没有理由Ignition是静态的,而不是在构建期间给基础Car类?这可能会允许您删除Start()方法。