如何约束分配给Type类型变量的类型?

时间:2013-12-16 15:45:54

标签: c# types

[注:编辑包含创建FollowUpEvent集合的要求]

我正在写一个日历系统。我有一个基本类型CalendarEvent,以及一个中等复杂的后代类型层次结构(AppointmentEventReminderEventAppointmentInOfficeEvent等)。我还想创建一个模式结构,为每个事件指定应该创建的后续事件列表:

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声明。)

2 个答案:

答案 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,所有其他事件类型都可以从该类型继承,以便您可以限制所应用的类型。