0

假设我想在一个地方收集所有运动的所有常见属性和行为。为此,我正在考虑使用 SportBase 作为抽象类,但我不确定。我试图了解此示例中抽象与接口使用之间的区别。

每项运动都应具有以下属性

  • 日期时间开始;
  • 日期时间结束;
  • 字符串名称;

如果我声明这些属性(如整数),然后我决定使用 Game 对象作为独立实体(如 Game StartGame)。我不清楚使用哪种方法具有高度抽象性来减少后期修改的痛苦(这种修改可以添加新属性、新行为等)

谢谢

4

4 回答 4

3

如果您只有属性和空方法,那么接口可能是您更好的选择。如果您有一些实际代码,那么抽象类是您唯一的选择。还要记住,您只能继承一个抽象类,但可以实现多个接口。

于 2012-11-21T21:34:16.303 回答
2

不,我不会那样做。你最终会创建一个抽象的上帝类,它有很多职责。

于 2012-11-21T21:36:39.050 回答
2

您可以使用接口来提供要编码的合同。

public interface ISportsEvent
{
    DateTime Start { get; set; }
    DateTime End { get; set; }
    string Name { get; set; }
}

but that doesn't give you a reusable implementation

As a general rule you should prefer composition over inheritance.

So its often better to do something like this

public interface EventDetails
{
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public string Name { get; set; }
}


public class SportingEvent
{

    public EventDetails Details {get;set;}
}

now this is a bit rough but you can see what I'm getting at.

于 2012-11-21T21:40:52.283 回答
1

我个人可能会把它变成一个抽象类,因为你的运动不仅会共享一些领域,而且它们也可能会共享一些逻辑。

接口不是用于分离重复代码,而是纯粹用于多态性。

接口所做的只是保证您的类将以某种方式运行。如果您打算将逻辑放在基类中,而不是需要一个抽象类。

于 2012-11-21T21:37:17.110 回答