C# 如何约束泛型扩展的类型
我试图扩展一个特定的类(比如WPF的StackPanel)。让我们把这个扩展名称为MyGenericPanel。我想它的声明应该是:C# 如何约束泛型扩展的类型,c#,generics,C#,Generics,我试图扩展一个特定的类(比如WPF的StackPanel)。让我们把这个扩展名称为MyGenericPanel。我想它的声明应该是: class MyGenericPanel : StackPanel 但是。。。如果我希望此扩展保存引用的变量类型(例如T),则声明将变为: class MyGenericPanel<T> : StackPanel 类MyGenericPanel:StackPanel 现在,如果我想限制T是可识别的类型。。。其中可识别的是另一个类 class My
class MyGenericPanel : StackPanel
但是。。。如果我希望此扩展保存引用的变量类型(例如T),则声明将变为:
class MyGenericPanel<T> : StackPanel
类MyGenericPanel:StackPanel
现在,如果我想限制T是可识别的类型。。。其中可识别的是另一个类
class MyGenericPanel<T> where T: Identifiable, StackPanel
类别MyGenericPanel,其中T:可识别,StackPanel
抱怨StackPanel应该放在第一位。。。如果我把
class MyGenericPanel<T> where T: StackPanel, Identifiable
类MyGenericPanel,其中T:StackPanel,可识别
编译器抱怨应在StackPanel之前出现
底线:
我该怎么做?。。。(或者,可以这样做吗?
MyGenericPanel
extendsStackPanel
T
是可识别的
翻译成
class MyGenericPanel<T> : StackPanel where T : Identifiable
class MyGenericPanel:StackPanel,其中T:可识别
我认为您混淆了基类的规范和泛型类型约束:
class MyGenericPanel<T> : StackPanel where T: Identifiable
class MyGenericPanel:StackPanel,其中T:可识别
MyGenericPanel:
之后的类是基类,之后的类,其中T:
是泛型类型约束
现在,如果我想限制T是可识别的类型。。。哪里
可识别是另一类
如果identification
和StackPanel
都是类,那么它就不能工作,因为放置两个类类型的约束将意味着多重继承,这在C#中是不允许的。这就是为什么编译器抱怨您的限制
如果您想让您的MyGenericPanel
扩展StackPanel
的功能,并将T
限制为可识别的类型
,则以下操作可行:
class MyGenericPanel<T> : StackPanel where T : Identifiable
class MyGenericPanel:StackPanel,其中T:可识别
当您总是将泛型类型约束放在自己的行上时,整个事情就变得更加清楚了。就是这样。非常感谢你。我想将类型T限制为可识别的,而MyGenericPanel是StackPanel的扩展