亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Method 的 Generic T 創建具有相同 Generic T 的另一個對象的新實例

使用 Method 的 Generic T 創建具有相同 Generic T 的另一個對象的新實例

C#
慕斯709654 2023-05-13 16:19:19
所以我有一個看起來像這樣的方法public void Register<T>(TimeSpan interval, ILogger logger) where T : ISchedule{    _schedules.Add(new Schedule<T>(interval, logger));}我想用提供給 Register 方法的 T 創建一個新的 Schedule。internal class Schedule<T> : IDisposable where T : ISchedule, new() {}在這里我收到以下錯誤:'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>'這種行為甚至可能還是我做錯了什么?
查看完整描述

1 回答

?
PIPIONE

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。



查看完整回答
反對 回復 2023-05-13
  • 1 回答
  • 0 關注
  • 149 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號