访问私人班级成员

ant*_*nth 3 .net c#

public class Class1
{
    private object field;

    public Class1(Class1 class1)
    {
        this.field = class1.field;
    }

    private void Func(Class1 class1)
    {
        this.field = class1.field;
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码编译和工作.但为什么?我一直认为私有成员只能在类范围内访问.MSDN也这样说:

private关键字是成员访问修饰符.私有访问是最不宽容的访问级别.私有成员只能在类的主体或声明它们的结构体中访问

Cod*_*gue 5

那是因为通过将其标记为私有,您告诉编译器只能Class1访问该变量.即使您的构造函数是public,变量本身仍然在其中声明Class1,因此它有权修改它.

即使它们可能是两个不同的实例,它们也是相同的变量声明.

但是,如果我这样做Class2,它将无法工作:

Class1 c1 = new Class1();
c1.field = "value"; // Won't compile
Run Code Online (Sandbox Code Playgroud)

这实际上是从你的报价中解释的:

私人会员只能在班级的机构内访问