3
public class Class1
{
    private object field;

    public Class1(Class1 class1)
    {
        this.field = class1.field;
    }

    private void Func(Class1 class1)
    {
        this.field = class1.field;
    }
}

このコードはコンパイルして動作します。しかし、なぜ?私は常に、プライベート メンバーはクラス スコープ内でのみアクセスできると考えていました。また、MSDN は次のように述べています。

private キーワードはメンバー アクセス修飾子です。プライベート アクセスは、最も許容度の低いアクセス レベルです。プライベート メンバーは、宣言されているクラスまたは構造体の本体内でのみアクセスできます。

4

4 に答える 4

5

Class1これは、それをプライベートとしてマークすることで、その変数にのみアクセスできるコンパイラに指示しているためです。コンストラクターは ですがpublic、変数自体は内部で宣言されClass1ているため、変更するためのアクセス権があります。

それらは 2 つの異なるインスタンスである可能性がありますが、同じ変数宣言です。

ただし、からこれを行った場合Class2、機能しません。

Class1 c1 = new Class1();
c1.field = "value"; // Won't compile

これは実際にあなたの引用から説明されています:

プライベート メンバーは、クラスの本体内でのみアクセスできます

于 2013-09-13T11:33:26.670 に答える
4

private キーワードは、オブジェクトではなく、(MSDN に記載されているように) クラスのプライベートを意味します。したがって、クラスの 1 つのインスタンスは、クラスの別のインスタンスのプライベート メンバーにアクセスできます。

于 2013-09-13T11:35:07.470 に答える
1

オブジェクトは何でも保持できるため、機能します。class1 を渡し、オブジェクト フィールドが null の場合、オブジェクト フィールドは null のままになります。それが理にかなっている場合は?

于 2013-09-13T11:32:45.823 に答える
1

そのプライベート フィールドにアクセスするコードが Class1 にある限り、それを使用できます。これがプライベートの意味です。これらの {} 内のどこからでもアクセスできます。

于 2013-09-13T11:37:20.720 に答える