繁体   English   中英

为什么我不能在C#中访问私有字段?

[英]Why can't I access private field in C#?

我试图弄清楚为什么我无法访问Program类中的私有字段?

class Program
{
    int marks;
    static void Main(string[] args)
    { 
        Program p = new Program();
        int s = p.marks;
        Console.Read();
    }
}

因为您是从同一类型中引用它。 如果您使用私有字段创建了其他类型,则无法在Program访问它。

这不是违反封装规则吗? –学习数学

否。封装是通过定义类型来完成的。 Main方法和字段marks都存在于同一类型的Program

您可以访问声明了作用域(类)内的私有字段marks -在您的情况下为Program类。

不管是静态方法还是类的其他实例,都没有关系。 以下也将很好

class Program
{
    int marks;
    public int foo()
    { 
        Program p = new Program();
        return p.marks;
    }
}

看到私人的

私有成员只能在声明其的类或结构体中访问

您的变量在类Program声明,这是您从中访问它的地方。

Main()方法是Program类型的成员,因此可以访问private成员。

最简单的想法是,所创建的对象与所创建的类的类型相同。

阐明在这种情况下访问私有成员的有用性的另一件事是 ,考虑在要通过实现IClonable进行深度克隆的情况下,则可能需要复制对象的所有值,包括私有成员。 如果无法访问私有成员,则可能无法完全(深度)执行克隆。

此外,这篇文章: https : //stackoverflow.com/a/5231603/2696230提到了一个深思熟虑的观点,即

限制是在类级别而不是对象级别。

换句话说,私有成员不能在其类外部访问,而不能在内部访问,在这种情况下,您仍位于与所创建对象类型相同的类内部。

因为如果您在另一个类中,则您仍在同一Program类中,因此您的代码可以工作,并且可以操纵该代码来完成工作,但不建议这样做

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM