簡體   English   中英

如何創建從通用類擴展的抽象類

[英]How to create an abstract class that extends from a generic class

通過以下方式定義了一個類。

class MvxViewController<TViewModel> where TViewModel : class, IMvxViewModel

我通過簡單地擴展來使用此類,例如:

class MyController : MvxViewController<MyViewModel>

由於我在每個控制器中都有重復的任務,因此我想創建一個抽象類,該類從MvxViewController擴展,而MvxViewController又由我的每個控制器擴展(需要時)。 但是,由於語法總是錯誤的,所以我無法創建此抽象類。 到目前為止,我嘗試了一些操作:

a) abstract class BaseViewController<T> : MvxViewController<T>
b) abstract class BaseViewController<T> where T : MvxViewController<T>
c) abstract class BaseViewController<T> : MvxViewController<T> where T : class

和其他...但是我仍然無法獲得正確的語法。 怎么了

對抽象類的約束必須位於where T : class, IMvxViewModel以匹配基數。 例如:

abstract class BaseViewController1<T> : MvxViewController<T> where T : class, IMvxViewModel

因為您已經將MvxViewController的通用參數限制為classIMvxViewModel ,所以還必須將這些約束擴展到抽象類的通用參數。

abstract class BaseViewController<T> : MvxViewController<T> where T : class, IMvxViewModel

約束不是繼承的,必須顯式鍵入。

您需要將MvxViewController<TViewModel>放在TViewModel上的TViewModel放在派生類的類型參數上,如下所示:

abstract class BaseViewController<T> : MvxViewController<T> where T : class, IMvxViewModel {
    ...
}

這是必需的,因為當您從中派生另一個類時,C#編譯器必須檢查TViewModel參數在方案中是否滿足其約束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM