【发布时间】:2017-03-21 10:02:26
【问题描述】:
我想知道为什么在 C# 中允许以下内容:
当我用 private 方法定义一个类 MyClass 时。让我们调用它的实例A。现在我在它的一个公共方法中创建了一个MyClass 的实例。此实例称为B。所以B 是A 中的一个实例,两者都是同一类型。
我可以从A 调用B 上的这个私有方法。
对我来说,该方法是私有的,这意味着只有 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;
}
}
谢谢!
【问题讨论】:
-
private的范围是类,而不是实例。 -
如你所说,没有其他课程! B 属于 MyClass 类型,您可以访问它在 MyClass 中的私有成员。这很简单。
-
谢谢,现在清楚了!