0

重複の可能性:
プライベート フィールドがインスタンスではなく型に対してプライベートなのはなぜですか?

次のコードを検討してください。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Foo foo = new Foo();
            Foo foo2 = new Foo();
            foo.Test(foo);

            Console.ReadLine();

        }
    }


    public class Foo
    {
        public void Test(Foo foo)
        {
            Console.WriteLine("I was called");
            foo.test_fuction();
        }

        private void test_fuction()
        {
            Console.WriteLine("!");
        }


    }

}

この場合、private キーワードによって、インスタンスのメンバー変数と関数へのアクセスが妨げられることが予想されます。これにより、誰かが一部のオブジェクトへの不十分なラウンドアバウト アクセスを作成できるようになるのではないでしょうか? この動作を防ぐ方法はありますか? それとも正当な理由で意図されていますか?

4

1 に答える 1

0

プライベートとは、特定のインスタンスにアクセスできるだけでなく、宣言されている型の本体内でメンバーにアクセスできることを意味します。

この動作を防ぐ方法はありません。特定のインスタンスのみがプライベート メンバーにアクセスできる場合、静的メソッドはあまり役に立ちません。

仕様のセクション 3.5.2 から:

プログラム P 内の型 T で宣言されたネストされたメンバー M のアクセシビリティ ドメインは、次のように定義されます (M 自体が型である可能性があることに注意してください)。

  • M の宣言されたアクセシビリティが非公開の場合、M のアクセシビリティ ドメインは T のプログラム テキストです。
于 2013-01-28T21:35:01.860 に答える