为什么我可以在另一个实例上调用私有方法而不是自己

时间:2017-03-21 10:02:26

标签: c# oop

我想知道为什么在C#中允许以下内容:

当我使用私有方法定义类MyClass时。让我们调用它的实例A。现在,我在其中一个公共方法中创建了MyClass的实例。此实例称为B。因此,BA中的实例都属于同一类型。

我可以在B A上调用此私有方法。 对我来说,这个方法是私有的,只有B可以自己调用它,而不是其他类。显然,另一个相同类的类也可以在B上调用它。

这是为什么? 它与private关键字的确切含义有关​​吗?

代码示例:

public class MyClass
{
    private static int _instanceCounter = 0;

    public MyClass()
    {
        _instanceCounter++;
        Console.WriteLine("Created instance of MyClass: " + _instanceCounter.ToString());
    }

    private void MyPrivateMethod()
    {
        Console.WriteLine("Call to MyPrivateMethod: " + _instanceCounter.ToString());
    }

    public MyClass PublicMethodCreatingB()
    {
        Console.WriteLine("Start call to PublicMethodCreatingB: " + _instanceCounter.ToString());
        MyClass B = new MyClass();
        B.MyPrivateMethod(); // => ** Why is this allowed? **
        return B;
    }
}

谢谢!

1 个答案:

答案 0 :(得分:5)

B.MyPrivateMethod();是允许的,因为该方法是在MyClass类的方法中调用的。

您无法在{$ 1}}之外调用MyPrivateMethod() MyClass类中的方法,但由于PublicMethodCreatingB位于同一个类中,因此可以访问所有私有方法和变量。