-1

I have this simple code :

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

}

public class B:A
{
}

this code compiles

  • Via OOP - the b should not provide access to _private.

  • Via private and A , A knows _private , but still the access is made through b !

what is going on here ?

4

1 に答える 1

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、クライアント コードは影響を受けません。

于 2012-12-09T10:41:36.347 に答える