2013-02-04 55 views
1

我重构我的代码,所以我需要做出关于接口或抽象类的决定。 我有基类播放器和继承基类的称为VideoPlayer,MusicPlayer等的类。基类有没有实现的抽象方法(Play)。 那么,什么是更好的方法?将Play放在界面中或放在抽象类中。在MusicPlayer中播放与在VideoPlayer中播放器不一样。我在C#中这样做。抽象方法vs接口

class Player 
{ 
    abstract void Play(); 
} 

class VideoPlayer : Player 
{ 
    void Play() 
    { 
     //Some code. 
    } 
} 

class MusicPlayer : Player 
{ 
    void Play() 
    { 
     //Some code. 
    } 
} 
+0

两者都好。作为替代方案,您可以提供一个接口以及一个实现它的骨架抽象类。尽管如此,你似乎不需要这样的实现。 – toniedzwiedz

+6

一个抽象类只有**才有用,如果它真的做了什么。有一个什么都不做的抽象类对我来说没有什么意义。 –

+0

另请参见[接口vs基类](http://stackoverflow.com/q/56867/1037210),[抽象类与接口](http://www.codeproject.com/Articles/11155/Abstract-Class-与接口) – Lion

回答

6

一个共同的事情是做两个

a)提供接口。当你消耗对象时使用接口(即调用播放方法)。

b)中提供一个实现为在有共同的管道的情况下的接口的基类;常用的方法等,这是实施者任意地使用

以这种方式IAmAPlayer的实施者可以简单地实现该接口,或者它们的使用情况的基础类相匹配,他们可以使用的辅助工具。

7

如果您没有任何要继承的基本功能,请使用接口。抽象类用于您想要继承的部分实现。

3

一般来说,如果只是以表示一种方法可以称为你使用的接口。该接口部分设计用于解决单个继承问题。如果您没有在父级中实现常用方法,请使用接口。

1

保持简单。如果你可以使用一个接口来做到这一点。如果您不能使用接口,请使用抽象类。

1

有一点要考虑,接口要求所有的属性和方法,其中抽象类没有得以实施。小问题,但有时你需要支持程序集的多个版本。

0

您需要了解接口继承和类继承的区别。

抽象类被用于建模外观类似的类的一个类层次结构(例如动物可以是抽象类和人类,狮子,老虎可在混凝土派生类)之间

接口用于通信2相似/非类似的类,它不关心实现Interface的类的类型(例如,Height可以是接口属性,它可以由Human,Building,Tree实现)。无论你是否可以吃东西,你都可以游泳,你可以死或任何东西..它重要的只是你需要有高度(在你的类实现))

现在,在这里你会明白一个事情,你比如说你可能需要兼得。如果您确信在其他许多类中使用Play方法的可能性,则非常适合使用接口实现,以便其他类将通过Interface使用方法。