我们可以使用对象访问私有变量吗

nkc*_*dra 4 .net c# oop

我们不能从在类外部创建的对象访问类的私有变量,但是当在类内部创建相同的对象时可以访问它。为什么??

class Program
{
    private int i;

    public void method1()
    {            
        Program p = new Program();
        p.i = 5;        // OK when accessed within the class
    }

}

class AnotherClass
{

    void method2()
    {
        Program p = new Program();
        p.i = 5; //error because private variables cannot be accessed with an object which is created out side the class
    }

}
Run Code Online (Sandbox Code Playgroud)

现在我想每个人都明白我的意思了??

在上述两种情况下,我们都通过对象“p”访问私有变量“i”。但课内允许,课外不允许。谁能告诉我这背后的原因??

Too*_*the 5

您可以从类中访问 i 因为私有成员只能由类的成员访问。在这种情况下,它看起来很奇怪,因为 p 与访问变量的对象是不同的对象,但它仍然是同一个类,并且限制是在类级别而不是对象级别。

class Program
{
    private int i;

    public void method1()
    {            
        Program p = new Program();
        p.i = 5;        // OK when accessed within the class
    }

}
Run Code Online (Sandbox Code Playgroud)

你不能从另一个类中访问 i (除非它是一个内部类,但那是另一回事)。这完全符合预期。

class AnotherClass
{
    void method2()
    {
        Program p = new Program();
        p.i = 5; //error because private variables cannot be accessed with an object which is created out side the class
    }
}
Run Code Online (Sandbox Code Playgroud)

我理解你想表达的观点。班级级别的限制在直觉上看起来是相反的。也许这是错误的。但是成员变量仍然只能从类内部访问,因此您仍然可以完全控制以保证私有变量的封装。