Fields
クラスまたは構造体内の変数でありlocal variables
、メソッド内にありglobal variables
、すべてのスコープ(クラスとメソッドを含む)でアクセスできます。
これはそうfields
かもしれないと私に思わせますが、クラスの外にある変数を考えることはできませんが、global variables
必ずしもglobal variables
そうとは限りません。fields
2つの間に明確な違いはありますか?
このC#にタグを付けましたが、C#には実際には「グローバル変数」がありません。
しかし、public static
フィールド(またはプロパティ)は近くになります。静的はそれを特異にし、「グローバル」な寿命を与えます。
ウィキペディアの定義はここで適切だと思います:
オブジェクト指向プログラミングでは、フィールド(データメンバーまたはメンバー変数とも呼ばれます)は、クラスまたはオブジェクト内にカプセル化されたデータです。通常のフィールド(インスタンス変数とも呼ばれます)の場合、オブジェクトのインスタンスごとにインスタンス変数があります。たとえば、EmployeeクラスにはNameフィールドがあり、従業員ごとに1つの異なる名前があります。静的フィールド(クラス変数とも呼ばれます)は、すべてのインスタンスで共有される1つの変数です。
したがって、グローバル変数はほとんど静的フィールド(したがってフィールド)です。
グローバル変数は、あなたが言うようにスコープ全体でアクセスされる変数であり、通常、これはstatic
クラスで行われます。コード例:
public class Demo {
public static string ThisIsGlobal = "Global";
private string _field = "this is a field in the class";
public void DoSomething()
{
string localVariable = "Local";
string localVariable2 = ThisIsGlobal; // VALID
}
public static void GlobalMethod()
{
string localVariable = _field; // THIS IS NOT VALID!
}
}
多くの人がグローバル変数と状態は悪いと言いますが、あなたがそれを使うべきである限り、私はそうは思いません。上記の例では、はキーワードThisIsGlobal
を持っているため、グローバル変数です。static
例でわかるように、インスタンスメソッドから静的変数にアクセスできますが、静的メソッドからインスタンス変数にアクセスすることはできません。
多くの変数はクラスの特定のインスタンスの外にありますが、それらはすべて「いくつかの」クラス内に含まれています。基本的に、グローバル変数は、オブジェクトグラフの上部近くにあり、オブジェクトグラフの後半のすべてのクラス/メンバーが表示/参照できる場所です。
しかし、グローバル変数はまだいくつかのクラス/モジュールのフィールドにすぎません。