2011-01-20 8 views

Répondre

4

base.x() devrait fonctionner dans le type b (mais ce n'est pas ce que vous avez ici).

Dans le scénario « cachette méthode » (ce que vous avez), il dépend aussi en grande partie sur ce qu'est une variable typée que, si la coulée à a devrait fonctionner:

a tmp = _b; 
tmp.x = ... // talks to a.x, not b.x 

ou plus succinctement:

((a)_b).x = ... // talks to a.x, not b.x 
0

En plus transtypage (comme ci-dessus, bien que cela ne fonctionnera pas si vous ne connaissez pas son type de parent) vous ne pouvez pas, alors je vous conseille RESTRUCTURATION une de ces classes. Vous devriez probablement rendre x virtuel, ou changer la propriété x à l'intérieur de la classe b pour quelque chose de différent, ou appeler base.x dans l'implémentation x de b.

+0

si vous * Spécifiquement veux * 'a.x', vous connaissez le type ... plus pour les classes le type est rigide de toute façon .... –

2

utilisation typecast:

public class c 
{ 
    a _a = new a(); 
    b _b = new b(); 

    void Test() { 
    int y = _b.x; // This is "x" of "b" 
    a _b_as_a = (a)_b; 
    int z = _b_as_a.x; // This is "x" of "a" of "b" 
    } 
} 
+0

Ne peut-il fonctionner en utilisant la base. Si je dois appeler en utilisant le mot-clé base, comment puis-je structurer ma classe. Je sais utiliser virtuel je peux obtenir ce que je veux, cette question est juste pour effacer quelques doutes –

+0

@Shantanu 'base' signifie seulement" la base de 'c'", alias 'object'. Vous ne pouvez pas utiliser 'base' quand vous parlez à n'importe quel objet sauf' this'. –

Questions connexes