1

我正在重构我的代码,所以我需要对接口或抽象类做出决定。我有基类 Player 和继承基类的类,称为 VideoPlayer、MusicPlayer 等。基类有没有实现的抽象方法(Play)。那么,什么是更可取的方式?将 Play 放在接口中或将其留在抽象类中。MusicPlayer 中的播放与 VideoPlayer 中的播放器不同。我在 C# 中这样做。

class Player
{
    abstract void Play();
} 

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

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

6 回答 6

9

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

于 2013-02-04T23:07:23.470 回答
6

一件常见的事情是两者都做

a) 提供接口。并在消费对象时使用接口(即调用播放方法)。

b) 提供一个基类,在有公共管道的情况下实现接口;常用方法等。这是实现者可选择使用的助手

通过这种方式,IAmAPlayer 的实现者可以简单地实现该接口,或者如果他们的用例与您的基类匹配,他们可以使用该接口。

于 2013-02-04T23:14:38.943 回答
3

通常,如果只是为了表示可以调用方法,您会使用接口。该接口部分设计用于解决单继承问题。如果您没有在父级中实现常用方法,请使用接口。

于 2013-02-04T23:07:31.317 回答
1

把事情简单化。如果您可以使用接口,请执行此操作。如果您不能使用接口,请使用抽象类。

于 2013-02-04T23:15:34.033 回答
1

需要考虑的一件事是,接口需要在抽象类不需要的地方实现其所有属性和方法。次要问题,但有时您需要支持程序集的多个版本。

于 2013-02-05T00:46:37.213 回答
1

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

抽象类用于对外观相似的类的类层次结构进行建模(例如,Animal 可以是抽象类,Human、Lion、Tiger 可以是具体的派生类)

Interface is used for Communication between 2 similar / non similar classes which does not care about type of the class implementing Interface(e.g. Height can be interface property and it can be implemented by Human , Building , Tree. It does not matter if you can eat , you can swim you can die or anything.. it matters only a thing that you need to have Height (implementation in you class) )

Now you will understand here that for your example you may need to have both. If you are sure of the possibility of consumption of Play method amongst many other classes its very good to have interface implementation so that others will use method via Interface.

于 2013-02-08T15:40:12.487 回答