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

时间:2017-06-29 21:34:20

标签: c#

我试图找出为什么我无法访问课堂计划中的私人领域?

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

6 个答案:

答案 0 :(得分:2)

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

  

这打破了封装规则吗? - LearningMath

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

答案 1 :(得分:2)

您可以访问声明它的范围(类)中的私有字段<div class="target">Hover over me</div> - 在您的情况下是类marks

如果它是静态方法或类的其他实例,则无关紧要。以下也很完美

Program

答案 2 :(得分:2)

请参阅private

  

私人会员只能在班级或团体内访问   声明它们的结构

您的变量在类int pn53x_transceive(struct nfc_device *pnd, const uint8_t *pbtTx, const size_t szTx, uint8_t *pbtRx, const size_t szRxLen, int timeout); 中声明,这是您从中访问它的位置。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

最简单的思考方式是,创建的对象与创建的类的类型相同。

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

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

  

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

换句话说,私有成员在类之外是不可访问的,而不是在内部,因为在这里你仍然在类中与创建对象的类型相同的情况。

答案 5 :(得分:0)

因为如果你在另一个类中,你仍然在同一个Program类中,你的代码可以工作,并且可以操作这段代码来完成这项工作但不推荐