1 回答

TA贡献1829条经验 获得超9个赞
您还需要将where T : ISchedule, new()您在Schedule<T>类上指定的约束应用于该方法:Register
public void Register<T>(TimeSpan interval, ILogger logger) where T : ISchedule, new()
{
_schedules.Add(new Schedule<T>(interval, logger));
}
考虑以下两个实现该ISchedule接口的类。
public class Schedule1 : ISchedule
{
public Schedule1() { }
}
public class Schedule2 : ISchedule
{
public Schedule2(string foo) { }
}
该类Schedule<T>具有泛型类型约束where T : ISchedule, new(),这意味着只有那些实现ISchedule并包含无参数构造函数的类型才能用作类型参数。因此,指定一个Schedule<Schedule2>sinceSchedule2不包含无参数构造函数是非法的。
如果我们不对方法应用相同的类型约束Register,我们可以同时使用Schedule1和调用该方法Schedule2。由于Schedule2不符合 的Schedule<T>类型约束,我们现在有一个问题 ( 'T' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'Schedule<T>') 可以通过对方法应用相同的约束来Schedule<T>解决Register。
- 1 回答
- 0 关注
- 127 浏览
添加回答
举报