我将(再次)使用以下类层次结构:
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;
}
}将EventType定义为:
public enum EventType {
Sport1,
Sport2,
Sport3,
Sport4
}最初的想法是每个SportEventTypeX类都将设置正确的EventType。现在我想起来了,我认为这种做法是完全不正确的,原因如下:
如果我以后想添加一个新的inheritance.类,我将不得不修改enum
你会如何解决这种情况?在事件类中定义一个抽象的"Description“属性,让每个子类实现它?有一个属性(Java中的注释!)设置它的描述变量而不是?在这种情况下,使用类变量而不是属性/注释的利弊是什么?还有其他更优雅的解决方案吗?
谢谢
发布于 2010-04-06 23:45:39
如果您的子类将是EventType,则不会对EventTypes进行枚举。Enum有利于一组固定的选项--在您的情况下,您需要继承的灵活性,所以只需直接使用子类。
如果只是描述的话,我会做这样的事情:
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;
}
}这只是让您的子类为您指定这一点,这听起来似乎是您想要的。
发布于 2010-04-06 23:45:00
您只需使用is操作符就可以忘记枚举。
var myEvent = Event.Create(type);
if (myEvent is BaseballGame)
{
// ...
}https://stackoverflow.com/questions/2589083
复制相似问题