我正在考虑我的代码。我有一个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{};
}
}
}
答案 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()
方法。