为什么我可以在另一个实例上调用私有方法而不是它本身 [duplicate]

Why can I call a private method on another instance than itself [duplicate]

提问人:Stefan 提问时间:3/21/2017 最后编辑:Stefan 更新时间:1/9/2021 访问量:1048

问:

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

当我用私有方法定义一个类时。让我们调用它的实例。现在,我在其中一个公共方法中创建了一个实例。此实例称为 。两种相同类型的实例也是如此。MyClassAMyClassBBA

我可以从 调用这个私有方法。 对我来说,该方法是私有的,这意味着只能调用它本身,而不能调用其他类。显然,另一个相同类型的类也可以调用它。BABB

为什么会这样? 这与私钥的确切含义有关吗?

代码示例:

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;
    }
}

谢谢!

C# 哎呀

评论

1赞 Lee 3/21/2017
private作用域为类,而不是实例。
0赞 Efe 3/21/2017
正如你所说,没有其他班级!B 的类型为 MyClass,您可以在 MyClass 中访问它的私有成员。这很简单。
0赞 Stefan 3/23/2017
谢谢,现在很清楚了!

答:

5赞 Nathangrad 3/21/2017 #1

B.MyPrivateMethod();是允许的,因为该方法是在类中的方法内调用的。您将无法在类中的方法之外调用,但是,由于在同一个类中,因此所有私有方法和变量都可供它访问。

MyClassMyPrivateMethod()MyClassPublicMethodCreatingB

评论

0赞 Stefan 3/23/2017
谢谢,它帮助了我!