當我露出下面的類在組件A:編譯錯誤覆蓋的通用類型的方法
public abstract class ServiceDependencyHost
{
protected virtual T ReferenceService<T>() where T : ServiceBase
{
// Virtual implementation here...
}
}
我暴露在一個單獨的組件,這個派生類(B):
public sealed class ProcessServiceOperation : ServiceDependencyHost
{
public override T ReferenceService<T>()
{
// Override implementation here...
return base.ReferenceService<T>();
}
}
使用代碼如上所示,編譯器對此行抱怨:
return base.ReferenceService<T>();
'T'型可以不能用作通用類型或方法A.ReferenceService()中的類型參數'T'。沒有從'T'到'System.ServiceProcess.ServiceBase'的裝箱轉換或類型參數轉換。
當然,我試圖複製在程序集B的約束:超控和顯式接口實現方法
public override T ReferenceService<T>() where T : ServiceBase
但是,編譯器現在警告上面的行...
約束繼承從基本方法,所以他們不能直接指定。
This answer表示我的解決方案應該有效。我想避免使用反射公開公開此方法。它應該很簡單!
在此先感謝任何能夠發現我所犯錯誤的人。
在elgonzo的帖子下看到我的評論。謝謝道格拉斯。我想知道爲什麼編譯器讓我誤入歧途:-P – AdamStone
啊,你解釋爲什麼編譯器會說出那些錯誤信息是有道理的。這歸結於編譯器執行完整性檢查並首先失敗的順序...... – elgonzo