2011-07-17 54 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(这里基地A级),但无法访问objA.m?

回答

5

这就是protected修改器的实现方式。您可以从类本身或派生类访问它,但如果您有对象的实例,则无法访问它。如果您希望在给定课程实例的情况下访问它,则必须公开它。另一种可能性是使其成为protected internal,这意味着对于当前组件中的所有类型将为public,对于其他组件中的类型将为protected

+0

谢谢Darin。现在我懂了 :) – athos