C# 枚举与继承
我将(再次)使用以下类层次结构:C# 枚举与继承,c#,java,design-patterns,oop,C#,Java,Design Patterns,Oop,我将(再次)使用以下类层次结构: Event 并且以下所有类都继承自事件: SportEventType1 SportEventType2 SportEventType3 SportEventType4 我最初设计的事件类如下: public abstract class Event { public abstract EventType EventType { get; } public DateTime Time { get; protected set; }
Event
并且以下所有类都继承自事件:
SportEventType1 SportEventType2 SportEventType3 SportEventType4
我最初设计的事件类如下:
public abstract class Event
{
public abstract EventType EventType { get; }
public DateTime Time { get; protected set; }
protected Event(DateTime time) {
Time = time;
}
}
事件类型定义为:
public enum EventType {
Sport1,
Sport2,
Sport3,
Sport4
}
最初的想法是,每个SportEventTypeX类将设置其正确的EventType。现在我想起来了,我认为这种方法是完全不正确的,原因如下:
谢谢您只需使用
is
操作符,就可以忘记枚举了
var myEvent = Event.Create(type);
if (myEvent is BaseballGame)
{
// ...
}
如果您的子类将是EventType,我不会为EventType执行枚举。枚举适用于一组固定的选项——在您的情况下,您需要继承的灵活性,所以只需直接使用子类化 如果只是描述的问题,我会这样做:
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;
}
}
这只是让您的子类为您指定这一点,听起来这正是您所追求的。理想情况下,您希望尽可能避免这一点。如果您有“特定于事件”的逻辑,最好将其放在子类中。@Reed-理想情况下,我们将生活在一个理想的单词中。:)非常正确-有时也会这样做,但在可能的情况下应该避免。。。我只是想把它扔出去:)@Reed-我完全理解,事实上,如果我知道时间限制会导致多态性的无效使用,我会努力寻求一种更简单的函数方法。