3
public class Class1
{
    private object field;

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

    private void Func(Class1 class1)
    {
        this.field = class1.field;
    }
}

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

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

4

4 回答 4

5

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

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

但是,如果我从 执行此操作Class2,它将不起作用:

Class1 c1 = new Class1();
c1.field = "value"; // Won't compile

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

私有成员只能在类的主体内访问

于 2013-09-13T11:33:26.670 回答
4

private 关键字表示它对类的私有(如 MSDN 中所述),而不是对象。因此,一个类的实例可以访问该类的另一个实例的私有成员。

于 2013-09-13T11:35:07.470 回答
1

它之所以有效,是因为一个对象可以容纳任何东西。如果传入 class1 并且对象字段为空,则对象字段将保持为空。如果这有意义吗?

于 2013-09-13T11:32:45.823 回答
1

只要访问该私有字段的代码在 Class1 中,您就可以使用它。这就是私有的含义 - 它可以从那些 {} 内部的任何地方访问

于 2013-09-13T11:37:20.720 回答