C# の変数のスコープ変数とパブリック変数の違いは何ですか? プログラム内の 4 つの異なる場所で変数を宣言できます 変数の「スコープ」とは何を意味しますか? 変数のスコープを「特定の変数のスコープは、その変数がコンパイラによって認識されるプログラムのソースコード内の範囲です」と考えてください。
4 に答える
あなたの質問の私の読みが正しければ、スコープ(ローカル、インスタンス、静的など)と可視性(パブリック、プライベート、保護、内部)を対比しようとしています。これら 2 つの概念はほぼ独立しています (ローカル スコープの変数には可視性がないため、「ほぼ」と言いました)。これらを組み合わせることで、変数の有効期間とアクセシビリティの両方を制御できます。
スコープは変数の有効期間を制御し、変数がいつ存在し、いつ使用できなくなるかを判断できるようにします。当然、スコープは「その変数がコンパイラによって認識されるプログラムのソースコード内の範囲」を制限します。ただし、コンパイラによって認識されているだけでは、プログラムが変数にアクセスするのに十分ではありません。コンパイラが変数をプライベートとして認識した場合、変数が表示されるコンテキスト外 (たとえば、別のメソッドから) にプログラムがアクセスすることはできません。クラス)。
基本的に、スコープと可視性はアクセシビリティの 2 つの異なる側面を制御し、それらが連携して、プログラムのソース コード内で、その変数にアクセスしようとするコードがその変数を使用できる範囲を決定します。
変数のスコープは、その名前を使用して同じことについて話している期間です。
関数内にある場合は、{ }
s を見てください。内部{ }
で宣言され{ }
た変数は外部から参照できませんが、外部で宣言された変数は内部から参照できます。実際、if や for などは必要ありません{ }
。C# ではいつでも new を宣言できます。たとえば、次のようなことができます。
{
int a = foo();
int b = bar();
}
{
int a = foo();
int b = bar();
}
そして再宣言は有効です。
クラスの「スコープ」は、実際には可視性と呼ばれるまったく別のものです。public
あなたがこのファイルまたはusing
このファイルにいる場合、それを参照できることを意味します。protected
は、そのクラス (またはそのサブクラス) のインスタンスである場合にのみアクセスできることを意味します。private
あなたがそのクラスのインスタンスである場合にのみアクセスできることを意味します(そのサブクラスではありません)。internal
public に似ていますが、同じアセンブリにいる必要があることを除けば、.dll としてコンパイルすると、他の場所から内部変数を参照できなくなります。ただし、それが public/private/internal/protected のいずれであるかは、変数の存続期間 (スコープ) を制御しません。