继承泛型类

时间:2012-12-03 07:02:10

标签: c# generics inheritance

我在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的错误相同。如何解决这个问题... :(

有关继承泛型类的任何帮助吗?

2 个答案:

答案 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>
{

}

您不能在派生类中覆盖基类通用约束。