2

我在 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”不能用作泛型类型或方法“Kendo.Mvc.UI.Fluent.WidgetBuilderBase”中的类型参数“TBuilder”。没有从“TBuilder”到“Kendo.Mvc.UI.Fluent.WidgetBuilderBase”的装箱转换或类型参数转换。

TViewComponent 的相同错误。如何解决这个问题呢... :(

对继承泛型类有什么帮助吗?

4

2 回答 2

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

    }
于 2012-12-03T07:09:58.830 回答
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>
{

}

您不能在派生类中覆盖基类泛型约束。

于 2012-12-03T07:10:16.240 回答