1 回答

TA貢獻(xiàn)1829條經(jīng)驗 獲得超9個贊
您還需要將where T : ISchedule, new()您在Schedule<T>類上指定的約束應(yīng)用于該方法:Register
public void Register<T>(TimeSpan interval, ILogger logger) where T : ISchedule, new()
{
? ? _schedules.Add(new Schedule<T>(interval, logger));
}
考慮以下兩個實(shí)現(xiàn)該ISchedule接口的類。
public class Schedule1 : ISchedule
{
? ? public Schedule1() { }
}
public class Schedule2 : ISchedule
{
? ? public Schedule2(string foo) { }
}
該類Schedule<T>具有泛型類型約束where T : ISchedule, new(),這意味著只有那些實(shí)現(xiàn)ISchedule并包含無參數(shù)構(gòu)造函數(shù)的類型才能用作類型參數(shù)。因此,指定一個Schedule<Schedule2>sinceSchedule2不包含無參數(shù)構(gòu)造函數(shù)是非法的。
如果我們不對方法應(yīng)用相同的類型約束Register,我們可以同時使用Schedule1和調(diào)用該方法Schedule2。由于Schedule2不符合 的Schedule<T>類型約束,我們現(xiàn)在有一個問題 ( '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>') 可以通過對方法應(yīng)用相同的約束來Schedule<T>解決Register。
- 1 回答
- 0 關(guān)注
- 160 瀏覽
添加回答
舉報