首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继承与继承

继承与继承
EN

Stack Overflow用户
提问于 2010-04-06 23:40:28
回答 2查看 486关注 0票数 1

我将(再次)使用以下类层次结构:

代码语言:javascript
复制
Event

以下所有类都继承了事件:

代码语言:javascript
复制
SportEventType1 SportEventType2 SportEventType3 SportEventType4

我最初设计的事件类如下:

代码语言:javascript
复制
public abstract class Event
{
    public abstract EventType EventType { get; }
    public DateTime Time { get; protected set; }

    protected Event(DateTime time) {
        Time = time;
    }
}

将EventType定义为:

代码语言:javascript
复制
public enum EventType {
    Sport1,
    Sport2,
    Sport3,
    Sport4
}

最初的想法是每个SportEventTypeX类都将设置正确的EventType。现在我想起来了,我认为这种做法是完全不正确的,原因如下:

如果我以后想添加一个新的inheritance.类,我将不得不修改enum

  • ,如果我后来决定删除一个我觉得我不会使用的SportEventType,我在enum上也遇到了很大的麻烦。

  • 在事件类中有一个类变量,它对将继承它的类进行了假设,这有点违背了

你会如何解决这种情况?在事件类中定义一个抽象的"Description“属性,让每个子类实现它?有一个属性(Java中的注释!)设置它的描述变量而不是?在这种情况下,使用类变量而不是属性/注释的利弊是什么?还有其他更优雅的解决方案吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-06 23:45:39

如果您的子类将是EventType,则不会对EventTypes进行枚举。Enum有利于一组固定的选项--在您的情况下,您需要继承的灵活性,所以只需直接使用子类。

如果只是描述的话,我会做这样的事情:

代码语言:javascript
复制
public abstract class Event
{
    public string Description { get; private set;}
    public DateTime Time { get; protected set; }

    protected Event(string description, DateTime time) {
        this.Description = description;
        Time = time;
    }
}

这只是让您的子类为您指定这一点,这听起来似乎是您想要的。

票数 1
EN

Stack Overflow用户

发布于 2010-04-06 23:45:00

您只需使用is操作符就可以忘记枚举。

代码语言:javascript
复制
var myEvent = Event.Create(type);

if (myEvent is BaseballGame)
{
    // ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2589083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档