[英]How to constrain type of generic extension
我試圖擴展一個特定的類(比如WPF的StackPanel)。 我們將此擴展稱為MyGenericPanel。 我猜它的聲明應該是:
class MyGenericPanel : StackPanel
但是......如果我希望這個擴展包含變量類型的引用(比方說T)聲明將成為:
class MyGenericPanel<T> : StackPanel
現在如果我想將T限制為類型可識別...其中Identifiable是另一個類。
class MyGenericPanel<T> where T: Identifiable, StackPanel
抱怨StackPanel應該先來......如果我放的話
class MyGenericPanel<T> where T: StackPanel, Identifiable
編譯器抱怨Identifiable應該出現在StackPanel之前。
底線:
我怎么能這樣做?......(或者,可以嗎?)
我認為你混淆基類的規范與泛型類型約束:
class MyGenericPanel<T> : StackPanel where T: Identifiable
MyGenericPanel<T> :
之后的類是基類, where T:
是泛型類型約束之后的類
MyGenericPanel
擴展了StackPanel
T
是Identifiable
的擴展
翻譯成
class MyGenericPanel<T> : StackPanel where T : Identifiable
現在如果我想將T限制為類型可識別...其中Identifiable是另一個類
好吧,如果Identifiable
和StackPanel
都是類而不是它不能工作,因為放入2類類型約束將意味着多重繼承,這是C#中不允許的。 這就是編譯器抱怨你的約束的原因。
如果您的意思是讓MyGenericPanel<T>
擴展StackPanel
的功能並將T
限制為Identifiable
類型,那么以下方法可行:
class MyGenericPanel<T> : StackPanel where T : Identifiable
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.