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关键字是成员访问修饰符。私有访问是最不宽容的访问级别。私有成员只能在类的主体或声明它们的结构中访问
答案 0 :(得分:5)
这是因为通过将其标记为私有,您告诉编译器只有Class1
可以访问该变量。即使你的构造函数是public
,变量本身仍然在Class1
内声明,因此它有权修改它。
即使它们可能是两个不同的实例,它们也是相同的变量声明。
但是,如果我是从Class2
执行此操作,则无效:
Class1 c1 = new Class1();
c1.field = "value"; // Won't compile
这实际上是从你的引言中解释的:
私人会员只能在班级
中使用
答案 1 :(得分:4)
private关键字表示它对类的私有(如MSDN中所述),而不是对象。因此,类的一个实例可以访问该类的另一个实例的私有成员。
答案 2 :(得分:1)
它起作用,因为一个物体可以容纳任何东西。如果传入class1且对象字段为null,则对象字段将保持为null。如果这有意义吗?
答案 3 :(得分:1)
只要访问该私有字段的代码在Class1中,就可以使用它。这就是私人的意思 - 它可以从{}
内的任何地方访问