[英]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
的通用參數限制為class
和IMvxViewModel
,所以還必須將這些約束擴展到抽象類的通用參數。
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.