2012-12-03 248 views
2

我有一个类中的DLL我想继承这个类在我下面的类继承泛型类

public abstract class WidgetBuilderBase<TViewComponent, TBuilder> 

我上网净看起来如下

// 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> : Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder> 
    { 

    } 

但它给了我下面的错误。

类型“TBuilder”不能用作 一般类型的类型参数“TBuilder”或方法 “Kendo.Mvc.UI.Fluent.WidgetBuilderBase”。 没有从 'TBuilder'到 'Kendo.Mvc.UI.Fluent.WidgetBuilderBase'的装箱转换或类型参数转换。

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

在继承泛型类的任何帮助

+1

您可能需要将相同的通用约束添加到派生类型中... – horgh

+0

但是我想在运行时使其变为动态 –

+2

您想要什么动态?当继承泛型类时,你也继承它的约束 – horgh

回答

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

} 

您不能在派生类中重写基类泛型约束。

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

    }