7

例えば:

internal class C
{
    public void M()
    {
        Console.WriteLine("foo");
    }
}

私には、それは「同じアセンブリ内のコードからのみアクセスできるクラス内にあるアセンブリに関係なく、誰でもアクセスできるメソッド」と読みます。

コンパイラでの私の経験から、そのようなことを行っても警告が表示されない場合は、おそらく警告を表示する正当な理由があることがわかります。

だから、私はどちらかだと思います

  1. 保護レベルの理解に何かが欠けています。
  2. 警告があるかもしれませんが、警告はありません。

(2の場合、これはそれについて不平を言う試みではありません-私はただ理解したいだけです)

4

4 に答える 4

10

私にとって、それは「同じアセンブリ内のコードからのみアクセスできるクラス内にあるアセンブリに関係なく、誰でもアクセスできるメソッド」と読みます。

私にとっては、「C のアクセシビリティ ドメインはこのアセンブリに制限されています。Mのアクセシビリティ ドメインは、そのコンテナ C のアクセシビリティ ドメインの無制限のサブセットです」という意味です。

「パブリック」とは、私にとってそれを意味します。それは、仕様がそれを意味すると言っているからです。これについて質問や懸念がある場合は、アクセシビリティ ドメインをカバーする仕様の部分を読むことをお勧めします。

于 2012-04-30T21:52:08.043 に答える
5

キーワードは、存在するアセンブリ内で行われた呼び出しのみにinternalアクセスを制限します。M()C

public誰でもメンバーにアクセスできることを意味します。publicクラス階層の上位に置かれた制限については何も知りませんし、気にする必要もありません。

言い換えれば、それは「設計による」ものです。メソッドを配置publicすると、コンパイラは、クラス自体にさらに制限を課す場合は、自分が何をしているのかを知っている必要があることを既に知っていると想定します。

于 2012-04-30T21:07:34.417 に答える
5

それがどのように機能するかについての詳細な回答については、このSO Questionを参照してください。

私の経験では、クラスのスコープをパブリックに変更したい将来を見越して、内部メンバーをパブリックにマークするのが好きです。このようにしてそれを行うことができ、以前にマークされたすべての内部メソッドは自動的に公開されます。

于 2012-04-30T21:08:30.513 に答える
2

クラスのスコープは内部であるため、パブリック プロパティを持つことは意味がないように見えますが、名前空間内にあるクラスのみがクラスを参照してプロパティを参照できます。ある時点でクラスを公開することを決定した場合、すべてのメンバーを調べてそのスコープを変更するには、大規模な PIA が必要になります。

于 2012-04-30T21:10:42.030 に答える