我有这个简单的代码:
public class A
{
int _private=3;
public A (B b)
{
b._private=5;
}
}
public class B:A
{
}
这段代码编译
Via
OOP
-the不b
应该提供对._private
通过私人和
A
,A
知道_private
,但仍然是通过b
!
这里发生了什么 ?
我有这个简单的代码:
public class A
{
int _private=3;
public A (B b)
{
b._private=5;
}
}
public class B:A
{
}
这段代码编译
Via OOP
-the不b
应该提供对._private
通过私人和A
,A
知道_private
,但仍然是通过b
!
这里发生了什么 ?
private 访问修饰符允许访问声明它的类型的主体内的成员。没关系,那b
是另一个例子。它是在can access中A
声明的 so 方法。我还要注意,这个示例或多或少直接来自 C# 4.0 规范,关于可访问域的第 3.5.2 节:A
_private
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
并且客户端代码不会受到影响。