【问题标题】:oop interface, inheritance, base class,oop 接口、继承、基类、
【发布时间】:2012-11-25 20:06:55
【问题描述】:

我正在尝试通过实际示例来学习接口和基类。 假设我要抽象 Player 实体 在 Player.cs 上应该是分配了球员的每项运动的所有通用属性和方法。所以,会有TeamSportPlayer、IndividualSportPlayer。 同样,FootballPlayer 将派生自 TeamSportPlayer,TennisPlayer 将派生自 IndividualSportPlayer 等等。所有这些玩家都应该有权访问一流的 Player 及其属性。

希望我不会太困惑。

问题是:这是用 oop 来抽象玩家表示的正确方法吗?

您将如何在这个实际示例中执行此操作?

【问题讨论】:

  • 你想知道接口和(抽象)类之间的区别是什么,或者你需要一些设计建议在哪里使用(抽象)类和接口?
  • 建议在哪里使用抽象以及在哪里使用接口。
  • 这种建议取决于您实际代码库中的许多具体项目——我们不能在这里给出。
  • @Oded 你能说得更具体一点吗?如果有人能告诉我应该遵循哪种设计模式,并且考虑到这种(前面描述的)情况,那就太好了。我不需要代码
  • 嗯,就是这样 - 可以更具体。在 Stack Overflow 上,如果一个问题中没有代码,它往往会偏离主题。目前尚不清楚您要达到什么目标,并且该问题读作是对解决方案的尝试,而不是对问题的描述。对于与代码无关的问题,例如设计之类的问题,programmers 可能更合适(尽管在发布之前请阅读常见问题解答)。

标签: c# oop


【解决方案1】:

抽象类用于定义您永远不会拥有实例的对象。另一方面,接口用于定义对象的行为,接口独立于继承层次结构。

以你的运动为例:

Player.cs 可以是抽象类。它具有每个球员的姓名、年龄、地址等字段。但运动场上永远不会有“球员”,只有“足球运动员”或“篮球运动员”。而类FootballPlayer.csBasketballPlayer.cs 继承自抽象类Player.cs。

另一方面,接口定义了类共享的一些常见行为。通常它用于定义其他类如何与它们交互。例如,如果你有名为TennisPlayer.csBasketballPlayer.csFootballPlayer.cs 的类,你可以有一个名为IHasJerseyNumber.cs 的接口。篮球和足球运动员有球衣号码,因此他们将继承IHasJerseyNumber.cs 接口。网球运动员没有号码,他们不会继承接口。像Referee.cs 这样的完全独立的类也可以实现该接口,前提是他也有一个球衣号码(在某些运动中可能)。

您可以在这里阅读更多内容:

Interfaces

Abstract classes

【讨论】:

    猜你喜欢
    • 2015-10-12
    • 2013-02-19
    • 2021-06-25
    • 2017-07-18
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    相关资源
    最近更新 更多