2010-01-20 7 views
2
System.Web.UI.WebControls.UI.TableHeaderCell 

dérive deEst-ce que les classes dérivées héritent différemment?

System.Web.UI.WebControls.UI.TableCell 

donc une méthode avec la signature foo(TableCell tc){}

Acceptera cas de TableHeaderCell. Cependant, si je crée deux nouvelles classes et en dérive une de TableCell et l'autre de TableHeaderCell alors ma nouvelle classe TableHeaderCell ne pourra évidemment pas transtyper dans ma nouvelle classe TableCell puisqu'elles ne sont pas directement liées.

Y at-il moyen de contourner ce problème? Je devine non.

+0

Bien qu'il soit "évident" que ce que vous dites est vrai (voir le diagramme de Jon), ce n'est pas parce que "Les classes dérivées héritent différemment". C'est simplement parce que C# n'a pas d'héritage multiple. –

Répondre

3

Vous voulez dire une hiérarchie comme celle-ci?

    TableCell 
       /  \ 
       /   \ 
     TableHeaderCell CustomTableCell 
      /
      /    
    CustomTableHeaderCell 

Non, dans ce cas, vous ne pouviez pas jeter CustomTableHeaderCell-CustomTableCell. Etes-vous sûr que vous avez vraiment besoin de l'héritage dans ce cas?

Pourriez-vous utiliser la composition à la place? Ou pourriez-vous faire CustomTableCell et CustomTableHeaderCell implémenter une interface ICustomCell? Si vous pouviez nous donner plus d'informations sur ce que vous essayez de faire, cela aiderait.

0

Vous pouvez simplement continuer à faire référence à tous les objets TableCell, au moins si l'objectif est de pouvoir appeler votre foo().

Questions connexes