【发布时间】:2014-01-04 01:52:01
【问题描述】:
[注:已编辑以包括创建 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 属性将接受 any 对象类型,我想装饰性地将其限制为 CalendarEvent 及其后代。我意识到我可以在 setter 中做到这一点,但理想情况下我想在属性声明中表达它。
这可能吗?
(我来自 Delphi 背景,我认为我正在寻找的内容相当于 MyType = class of CalendarEvent 声明。)
【问题讨论】:
-
为什么不声明 public CalendarEvent EventType?
-
将类设为泛型,其中 T : CalendarEvent,并将 EventType 的类型设置为 T。
-
@NWard 我认为 Lustig 不想指出实际事件。他只想存储事件的类型(另一方面我不知道为什么)
-
因为后续系统是一个模式,它指示工作流组件构建适当的后续实例。
-
@Magus:我需要这些 (
List<FollowUpEvent> FollowUpSpecs) 的列表,并且该列表对于 CalendarEvent 的后代将是多态的。如果我做List<FollowUpEvent<CalendarEvent>>,那会保存一个键入的后续事件列表(我认为这可能是一个解决方案)。