[注:编辑包含创建FollowUpEvent集合的要求]
我正在写一个日历系统。我有一个基本类型CalendarEvent
,以及一个中等复杂的后代类型层次结构(AppointmentEvent
,ReminderEvent
,AppointmentInOfficeEvent
等)。我还想创建一个模式结构,为每个事件指定应该创建的后续事件列表:
public class FollowUpEvent
{
public Type EventType { get; set; };
public int OffsetDays { get; set; };
public bool IsRequired { get; set; };
}
static List<FollowUpEvent> EventsToAdd = new FollowUpEvent()
{
new FollowUpEvent() { EventType = typeof(ReminderEvent), OffsetDays = 7, IsRequired = true },
new FollowUpEvent() { EventType = typeof(ReminderEvent), OffsetDays = 14, IsRequired = false }
}
问题是EventType
属性将接受任何对象类型,我想装饰性地将其限制为CalendarEvent
及其后代。我知道我可以在setter中做到这一点,但理想情况下我想在声明中表达它。
这可能吗?
(我来自Delphi背景,我认为我正在寻找的是等同于MyType = class of CalendarEvent
声明。)
答案 0 :(得分:0)
我不认为以下内容有意义,但如果您不想存储实际的CalendarEvent
对象,它将起作用:
public class FollowUpEvent<T> where T: CalendarEvent
{
public Type EventType { get
{
return this.GetType().GetGenericArguments()[0]
// OR
// return typeof(T)
}
}
public int OffsetDays { get; set; };
public bool IsRequired { get; set; };
}
答案 1 :(得分:-2)
具有BaseEvent类型的EventType,所有其他事件类型都可以从该类型继承,以便您可以限制所应用的类型。