我有这个简单的代码:
public class A
{
int _private=3;
public A (B b)
{
b._private=5;
}
}
public class B:A
{
}
此代码编译
通过OOP
- b
应该不提供对_private
的访问权限。
通过私人和A
,A
知道_private
,但仍可通过b
进行访问!
这里发生了什么?
答案 0 :(得分:4)
私有访问修饰符允许访问声明它的类型的主体内的成员。 b
是另一个实例并不重要。它是A
,因此在A
内声明的方法可以访问_private
。我还要注意,这个例子或多或少直接来自C#4.0规范,第3.5.2节关于可访问性域:
class A
{
int x;
static void F(B b) {
b.x = 1; // Ok
}
}
class B: A
{
static void F(B b) {
b.x = 1; // Error, x not accessible
}
}
我认为OOP建议的信息隐藏是关于指定客户端代码的合同。公共是支持的东西。 Private是一个实现细节。在这里,我们可以通过删除A
修改_private
的实施,客户端代码不会受到影响。