【问题标题】:Access to private members of class [duplicate]访问类的私人成员[重复]
【发布时间】:2013-09-18 01:56:22
【问题描述】:
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 关键字是成员访问修饰符。私有访问权限是最低权限的访问级别。私有成员只能在类的主体或声明它们的结构中访问

【问题讨论】:

  • 您在技术上属于 Class1,因此您可以在任何地方访问 Class1 中 Class1 的私有成员
  • 它是类私有的,而不是实例私有的。
  • 是的,它是重复的,我找不到那个答案。谢谢。

标签: c# .net


【解决方案1】:

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

尽管它们可能是两个不同的实例,但它们是相同的变量声明。

但是,如果我从 Class2 执行此操作,它将无法正常工作:

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

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

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

【讨论】:

  • 是的,我注意到了,但是你能指出一些解释这种行为的文档参考吗?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 不是,他说的是访问右侧的私有成员class1.field
    【解决方案4】:

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

    内部的任何地方访问

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多