2011-07-17 3 views
1

Voici un simple code de test:C#: droit d'accès en raison de l'héritage

public class A 
{ 
    protected int m = 0; 
} 

internal class B: A 
{ 
    public void test(A objA, B objB) 
    { 
     base.m++; //OK! 
     objA.m++; //cannot access protected member 

     m++;  //OK! 
     objB.m++; //OK! 
    } 
} 

Puis-je demander, pourquoi la méthode B.testA(), il est OK pour accéder base.m (ici base est classe A), mais ne peut pas accéder à objA.m?

Répondre

5

C'est ainsi que le modificateur protected est implémenté. Vous pouvez y accéder à partir de la classe elle-même ou des classes dérivées mais vous ne pouvez pas y accéder si vous avez une instance de l'objet. Vous devrez le rendre public si vous voulez qu'il soit accessible étant donné une instance de la classe. Une autre possibilité est de le faire protected internal ce qui signifie qu'il sera public pour tous les types dans l'assemblage actuel et protected pour les types dans d'autres assemblages.

+0

Merci Darin. Maintenant je comprends :) – athos

Questions connexes