2011-09-02 64 views
5

我有一个有关继承如何在C#中工作的理论/实践问题。假设我必须模拟一些汽车,所以我有几种通用的方法,所有的汽车必须执行并且飞行员应该知道。在码字这应该是一个接口:现在关于C#和继承

interface Automobile { 
    void speedup(); 
    void break(); 
    void steer(); 
    //bla bla 
} 

,所有样车应具备的操作旁边的一些常见的技术实现,飞行员能够在它们执行,比方说房地产fuelLevel,在这一点上我还是不想知道汽车是如何加快或坏了,所以我会说:

abstract class Car : Automobile { 
    int fuelLevel; // for example.... 
    public abstract void speedup(); 
    public abstract void break(); 
    public abstract void steer(); 
} 

现在我想将法拉利车型,因此:现在

class Ferrari : Car { 
    public void speedup() { ... } 
    public void break() { ... } 
    public void steer() { ... } 
} 

,在Java中,这代码守ld工作(改变一些语法),但在C#中不会因为它说:

Error 1 'Ferrari' does not implement inherited abstract member 'Car.speedup()' 
Error 1 'Ferrari' does not implement inherited abstract member 'Car.break()' 
Error 1 'Ferrari' does not implement inherited abstract member 'Car.steer()' 

为什么?我应该如何解决这个问题?

回答

16

您需要override标记方法来覆盖下的abstract定义:

class Ferrari : Car 
{ 
    public override void speedup() { } 
    public override void break() { } 
    public override void steer() { } 
} 

除此之外,你设置 - 在Ferrari类将满足你的界面,即使是派生的方法。另外,作为顺便说一句,在C#命名略有不同:与IIAutomobile

  • 前缀接口。
  • 方法大写字母:Speedup(),Break(),Steer()
+0

我想这是Java和C#的区别之一......非常感谢你。 – IssamTP

+0

@ amod0017完成。对不起,但我很忙,在这里等待7分钟... – IssamTP

+0

@IssamTP其实根据网站上的时间,它只花了我3分钟回答:-) –

3

你实际上忽略了重写抽象类成员。尽量考虑是这样的:

interface IAutomobile 
{ 
    void Steer(); 
    void Break(); 
} 

abstract class Car : IAutomobile 
{ 
    public abstract void Steer(); 
    public abstract void Break(); 
} 

class Ferrari : Car 
{ 
    public override void Steer() 
    { 
     throw new NotImplementedException(); 
    } 

    public override void Break() 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

为什么“扔新”? – IssamTP

+0

@IssamTP这是一个方法的自动默认实现,所以即使没有提供实现它也会编译,无论该方法是否应返回值。 – TrymBeast

1

好,“disconnetti”(你是意大利人?)方法没有在任何地方写的,所以你必须解释之前,我们哪里是从何而来。

其次,在C#中,当你重写一个抽象的方法,就必须明确它通过覆盖关键字

+0

是的,我是意大利人,真正的代码与发布有些不同,因为这个例子更容易理解和解释。无论如何,我很快编辑了代码... – IssamTP

+0

好的,答案只是你需要覆写关键字,就像我写的(和其他人一样)。 Buona fortuna col codice;) –