-1

我有这个简单的代码:

public class A
{
  int _private=3;
  public   A (B b)
    {
        b._private=5;
    }

}

public class B:A
{
}

这段代码编译

  • Via OOP-theb应该提供对._private

  • 通过私人和AA知道_private,但仍然是通过b

这里发生了什么 ?

4

1 回答 1

4

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并且客户端代码不会受到影响。

于 2012-12-09T10:41:36.347 回答