簡體   English   中英

如何約束泛型擴展的類型

[英]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之前。

底線:

  1. MyGenericPanel擴展了StackPanel
  2. T是Identifiable的擴展
  3. MyGenericPanel沒有XAML定義......它只是C#代碼。

我怎么能這樣做?......(或者,可以嗎?)

我認為你混淆基類的規范與泛型類型約束:

 class MyGenericPanel<T> : StackPanel where T: Identifiable

MyGenericPanel<T> :之后的類是基類, where T:是泛型類型約束之后的類

MyGenericPanel擴展了StackPanel

TIdentifiable的擴展

翻譯成

class MyGenericPanel<T> : StackPanel where T : Identifiable

現在如果我想將T限制為類型可識別...其中Identifiable是另一個類

好吧,如果IdentifiableStackPanel都是類而不是它不能工作,因為放入2類類型約束將意味着多重繼承,這是C#中不允許的。 這就是編譯器抱怨你的約束的原因。

如果您的意思是讓MyGenericPanel<T>擴展StackPanel的功能並將T限制為Identifiable類型,那么以下方法可行:

class MyGenericPanel<T> : StackPanel where T : Identifiable

暫無
暫無

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

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