Class比OOP规则更喜欢私有成员?

时间:2012-12-09 09:54:44

标签: c# .net oop access-modifiers

我有这个简单的代码:

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

}

public class B:A
{
}

此代码编译

  • 通过OOP - b应该提供对_private的访问权限。

  • 通过私人和AA知道_private,但仍可通过b进行访问!

这里发生了什么?

1 个答案:

答案 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的实施,客户端代码不会受到影响。

相关问题