[英]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.