1

これがVB.NETコードスニペットです

Public Class OOPDemo

    Private _strtString as String

    Public Function Func(obj as OOPDemo) as boolean
      obj._strString = "I can set value to private member using a object"

    End Function

End Class

オブジェクトを使用してプライベートメンバーにアクセスすることはできないと思いましたが、おそらくCLRでアクセスできます。つまり、アクセス修飾子はタイプに基づいており、そのタイプのインスタンスには基づいていません。また、C++でもそれが可能だと聞いています。

これの理由は何でしょうか?

編集:

RoBorgによって提供されたmsdnリンクからのこの行は、この動作を説明していると思います。「含まれる型内のコードを含む、プライベート要素を宣言する型のコードは、要素にアクセスできます」

4

2 に答える 2

3

あなたの質問は非常に紛らわしいですが、「(クラスの) 別のインスタンスのプライベート変数にアクセスできるのはなぜですか?」と理解したと思います。

その通りです。私が使用したすべての OOP 言語では、他のインスタンスからプライベート変数にアクセスできます。これは、アクセス許可がコードが「属する」オブジェクト インスタンスではなく、コードの場所に基づいているためです。

そうしないと、コピー コンストラクターや等価演算子を実装するのが難しい場合があります。

于 2008-12-06T09:34:20.467 に答える
3

MSDNのアクセス レベルに関するセクションを次に示します。

于 2008-12-06T09:41:07.990 に答える