C#:由于继承而访问权限

ath*_*hos 1 c# inheritance access-rights

下面是一个简单的测试代码:

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!
    }
}
Run Code Online (Sandbox Code Playgroud)

请问,为什么在方法B.testA()中,可以访问base.m(这里base是A类),但是无法访问objA.m?

Dar*_*rov 5

这就是保护修饰符的实现方式.您可以从类本身或派生类访问它,但如果您有对象的实例,则无法访问它.如果您希望在给定类的实例的情况下访问它,则必须将其公开.另一种可能性是使其protected internal意味着它将public适用于当前程序protected集中的所有类型以及其他程序集中的类型.