我有一些問題與代表無過載火柴代表FUNC <T, T>
我的班方案:
public interface IWorker<T> where T : IModel
{
T Do(T model);
T ReadyToWork(T model);
}
public abstract class Workers<T> : IWorker<T> where T : IModel
{
public abstract T Do(T model);
public abstract T ReadyToWork(T model);
}
類的工作! FirstModel : IModel
public class FirstWorker : Workers<ModelFirst>
{
public override ModelFirst Do(ModelFirst model)
{
return new ModelUserFirst();
}
public override ModelFirst ReadyToWork(ModelFirst model)
{
throw new NotImplementedException();
}
}
我可以創造許多工作特價類,我創建了一個接入點與他們一起工作:
public class WorkPoint<T> where T : IModel
{
public static Func<T, T> Do { get; set; }
public static Func<T, T> ReadyToWork{ get; set; }
public WorkPoint(ModelFirst mod)
{
Do = FirstWorker.Instance().Do;
ReadyToWork= FirstWorker.Instance().ReadyToWork;
}
}
ok了,問題。在瞬間分配Do
和ReadyToWork
我捕捉錯誤 錯誤CS0123沒有過載'做'匹配代表'Func' 什麼錯了?
在這些情況下,找出問題的最快方法是嘗試將其分配給不存在的變量,然後使用快速操作和重構爲您創建變量。然後你會看到變量的實際簽名,通常能夠弄清楚你爲什麼試圖做失敗。 – Will
如果你在這裏提供[mcve]會有所幫助 - 例如,我們看不到'UserFirstWorker'或它的'Instance'方法。但是,如果它是「FirstWorker」或類似的,如果有人使用「WorkPoint」,你會發生什麼? –
這看起來像你想使用協變。 'Func'只對第二個'T'是協變的,但是與第一個相反,這意味着'Do'方法必須完全匹配'T'。 –
juharr