2011-07-17 8 views
1
以下

へのアクセスが簡単なテストコードです:C#の:右による継承

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! 
    } 
} 

は私がなぜ法B.testA()で、聞いても、それはbase.mにアクセスするにはOKです(ここではベースはクラスAであります)、objA.mにはアクセスできませんか?

答えて

5

これは、修飾子protectedの実装方法です。クラス自体または派生クラスからアクセスできますが、オブジェクトのインスタンスがある場合はアクセスできません。クラスのインスタンスがあればアクセス可能にするには、そのクラスをパブリックにする必要があります。もう1つの可能性は、protected internalにすることです。これは、現在のアセンブリ内のすべての型がpublic、他のアセンブリの型がprotectedであることを意味します。

+0

ありがとうDarin。今私はそれを得る:) – athos