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 關注
- 149 瀏覽
添加回答
舉報