我想知道为什么在C#中允许以下内容:
当我使用私有方法定义类MyClass
时。让我们调用它的实例A
。现在,我在其中一个公共方法中创建了MyClass
的实例。此实例称为B
。因此,B
和A
中的实例都属于同一类型。
我可以在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;
}
}
谢谢!
答案 0 :(得分:5)
B.MyPrivateMethod();
是允许的,因为该方法是在MyClass
类的方法中调用的。
您无法在{$ 1}}之外调用MyPrivateMethod()
MyClass
类中的方法,但由于PublicMethodCreatingB
位于同一个类中,因此可以访问所有私有方法和变量。