抽象与界面混乱

时间:2012-07-28 11:05:16

标签: c# .net oop interface abstract-class

等等,在你开始思考之前,我想清楚我要问接口和抽象之间的例行差异。

我在MSDN中完成了抽象和界面之间的区别。

据说:

  

通过更新基类,所有继承类都会随着更改自动更新。
  另一方面,接口在创建后无法更改。如果是新版本的    需要一个接口,您必须创建一个全新的界面。

看到这个: - Difference between Abstract and Interface

任何人都可以使用以下示例证明这一点: -

abstract class WashingMachine
{
   abstract public void Wash();
}


class Philips : WashingMachine
{
   public Philips() {  }

   override public void Wash(){//Wash code here....}
}

class Samsung : WashingMachine
{
   public Samsung() {  }

   override public void Wash(){//Wash code here....}
}

class Videocon : WashingMachine
{
   public Videocon() {  }

   override public void Wash(){//Wash code here....}
}

现在,如果我在 WashingMachine 中添加了以下新的抽象方法: -

abstract public void Rinse(int loadSize);

所有继承类(即飞利浦/三星/ Videocon)如何 自动 如何更新更新?

4 个答案:

答案 0 :(得分:3)

它们不会得到更新 - 您仍然必须手动向从Rinse继承的每个类添加WashingMachine的实现。

我认为MSDN所说的是,如果你在抽象类中定义了非抽象方法并且你改变了那个方法,那么从抽象类继承的所有类都将从这个变化中受益自动。

答案 1 :(得分:0)

您的具体派生类型都需要提供任何继承的抽象成员的实现...因此,当您修改基础时,您的类型仍需要提供Rinse实现。

http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx

答案 2 :(得分:0)

这是一个混淆程序员通常在读取接口和抽象类之间的差异时得到的。如果抽象类的更改是具体的,那么您引用的行才是真的。我的意思是你添加了一个属性或方法与实现。或者,如果我更具体,基本抽象类中的任何更改都不会使任何具体类抽象。这种更改在抽象类中是可能的,并且您无法在界面中添加此类更改。

答案 3 :(得分:0)

  

所有继承类(即飞利浦/三星/ Videocon)如何自动更新更新?

它们会突然变得不可编译,这不是更新吗?

但是我想指出,抽象类中的抽象方法和接口中的方法实际上没有区别。主要区别在于抽象类可以包含实现方法,而接口则不能。

事实上,我会说我不喜欢MSDN的定义,并且发现它令人困惑并且有些误导。