2012-12-03 6 views
2

J'ai une classe dll qui se présente comme suitHériter classe générique

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

je veux hériter de cette classe dans ma classe suivante

public abstract class WidgetBuilderBase<TViewComponent, TBuilder> 

je surfe sur le net, mais la plupart sur le site i n'a pas obtenu de réponse satisfaisante la plupart d'entre eux dit que nous ne pouvons pas hériter de la classe générique. pourquoi il n'est pas possible d'hériter de la classe générique.

Je suis en train de faire le code suivant

public abstract class WidgetBuilderBase<TViewComponent, TBuilder> : Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder> 
    { 

    } 

Mais il me donne l'erreur suivante.

Le type 'TBuilder' ne peut pas être utilisé comme paramètre de type 'TBuilder' dans le type générique ou méthode 'Kendo.Mvc.UI.Fluent.WidgetBuilderBase. Il n'y a pas de conversion de boxe ou de conversion de paramètre de type de 'TBuilder' à 'Kendo.Mvc.UI.Fluent.WidgetBuilderBase'.

même erreur pour TViewComponent. Comment résoudre ce problème ... :(

Toute aide héritant classe générique

+1

vous avez probablement besoin d'ajouter les mêmes contraintes génériques au type dérivé ... – horgh

+0

Mais je veux le rendre dynamique à l'exécution –

+2

Que voulez-vous être dynamique? Lorsque vous héritez d'une classe générique, vous héritez également de ses contraintes – horgh

Répondre

1

vous devriez déclarer une classe dérivée comme ceci:

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

} 

Vous ne pouvez pas remplacer les contraintes génériques de classe de base dans les classes dérivées.

1

WidgetBuilderBase<TViewComponent, TBuilder> a des contraintes génériques pour ses arguments de type:

where TViewComponent : global::Kendo.Mvc.UI.WidgetBase 
where TBuilder : global::Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder> 

Vous ne pouvez pas déclarer classe descendante, . qui peut éventuellement porter atteinte à ces contraintes par conséquent, vous devez les appliquer à la classe descendantes aussi:

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

    } 
Questions connexes