我在dll中有一个类,如下所示
// Summary:
// View component Builder base class.
public abstract class WidgetBuilderBase<TViewComponent, TBuilder> : IHtmlString, IHideObjectMembers
where TViewComponent : global::Kendo.Mvc.UI.WidgetBase
where TBuilder : global::Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder>
{
}
我想在下面的课程
中继承这个课程public abstract class WidgetBuilderBase<TViewComponent, TBuilder>
我在网上冲浪,但网站上的大多数人都没有得到满意的答复 大多数说我们不能继承泛型类。为什么不能继承泛型类。
我正在尝试执行以下代码
public abstract class WidgetBuilderBase<TViewComponent, TBuilder> : Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder>
{
}
但它给了我以下错误。
类型'TBuilder'不能用作类型参数'TBuilder' 通用类型或方法 'Kendo.Mvc.UI.Fluent.WidgetBuilderBase'。 没有装箱转换或类型参数转换 'TBuilder'来 'Kendo.Mvc.UI.Fluent.WidgetBuilderBase'。
TViewComponent的错误相同。如何解决这个问题... :(
有关继承泛型类的任何帮助吗?
答案 0 :(得分:1)
WidgetBuilderBase<TViewComponent, TBuilder>
对其类型参数有一些通用约束:
where TViewComponent : global::Kendo.Mvc.UI.WidgetBase
where TBuilder : global::Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder>
您不能声明可能违反这些约束的后代类。因此,您也必须将它们应用于后代类:
public abstract class WidgetBuilderBase<TViewComponent, TBuilder> : Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder>
where TViewComponent : global::Kendo.Mvc.UI.WidgetBase
where TBuilder : global::Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder>
{
}
答案 1 :(得分:1)
你应该像这样声明一个派生类:
public abstract class WidgetBuilderBase<TViewComponent, TBuilder>
: Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder>
where TViewComponent : global::Kendo.Mvc.UI.WidgetBase
where TBuilder : global::Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder>
{
}
您不能在派生类中覆盖基类通用约束。