访问子类中的私有变量?

Rhe*_*xis 2 c# oop nested-class private-members

所以我浏览了一些代码,我遇到了:

public class Person
{
    private string message;

    public override string ToString()
    {
        return message;
    }

    public static Person CreateEmployee()
    {
        return new Employee();
    }

    class Employee : Person
    {
        public Employee()
        {
            this.message = "I inherit private members!";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释如何使用/访问私有变量"消息",即使它是私有的?

SLa*_*aks 9

私有成员可以访问类中的所有代码,包括嵌套类.
如果您将Employee课程移到课堂外Person,那么在您创建该课程之前它将失败protected.


Nol*_*rin 5

简单的事实是,这之所以有效,是因为编译器允许它——设计者认为这是一件好事。一旦代码被编译,私有/公共变量就会以完全相同的方式存储在内存中。(CLR 只是知道它们的不同元数据属性。)

理由:嵌套类及其成员仍然被认为在概念上/层次结构上位于父类内。因此,父类的私有成员始终可以通过这些语义访问。此外,在很多情况下,它只是让程序员的生活变得轻松,而不会破坏面向对象的封装规则!

事实上,如果您想从代码的角度考虑这一点,则任何位于给定类的左大括号和右大括号内的代码都可以访问其私有成员,无论它是否直接位于嵌套类/结构体/等中。

  • 是的; 不要嵌套它们。他们没有“继承”成员,并且成员是真正私有的。 (2认同)