15

重複の可能性:
データ (実行時に変更される可能性がある) にアプリケーション全体がアクセスできるようにする最善の方法は?

C# ライブラリがあります。

  1. ライブラリにグローバル オブジェクト/変数を含めることはできますか?
  2. これらのオブジェクトの初期化メソッドは、メイン プロジェクトの実行時にライブラリから自動的に実行できますか?それとも静的メソッドにしてメイン プロジェクトから実行する必要がありますか?
4

3 に答える 3

26

C# では、この機能を提供するために常に静的クラスを使用します。静的クラスについてはこちらで詳しく説明していますが、簡単に説明すると、静的メンバーのみが含まれ、インスタンス化されません。基本的に、それらはクラス名 (および名前空間) を介してアクセスされるグローバル関数と変数です。

簡単な例を次に示します。

public static class Globals
{
    public static string Name { get; set; }
    public static int aNumber {get; set; }
    public static List<string> onlineMembers = new List<string>();

     static Globals()
     {
        Name = "starting name";
        aNumber = 5;
     }
}

メンバーまたは関数が使用/呼び出される前のある時点で実行されることが保証されている静的初期化子も使用していることに注意してください。

プログラムの他の場所では、次のように簡単に言うことができます。

Console.WriteLine(Globals.Name);
Globals.onlineMemeber.Add("Hogan");

静的オブジェクトは一度だけ「作成」されます。したがって、アプリケーションがオブジェクトを使用する場所はどこでも同じ場所になります。それらは定義上グローバルです。このオブジェクトを複数の場所で使用するには、オブジェクト名とアクセスしたい要素を参照するだけです。


静的メンバーは任意のクラスに追加でき、それらはグローバルに使用できますが、グローバル用に 1 つの場所を用意する方が優れた設計だと思います。

于 2013-01-13T13:06:35.660 に答える
7

クラスのpublic static プロパティをグローバル オブジェクト/変数として使用できます。

クラスの静的コンストラクターで静的プロパティを初期化できます。これは、プロパティが最初にアクセスされる直前に呼び出されます。

于 2013-01-13T13:00:39.803 に答える
4

ライブラリにグローバル オブジェクト/変数を含めることはできますか?

はい、c# は静的クラス、静的メンバーを持つことができます。ただし、変数はクラス外に存在できません。

これらのオブジェクトの初期化メソッドは、メイン プロジェクトの実行時にライブラリから自動的に実行できますか?それとも静的メソッドにしてメイン プロジェクトから実行する必要がありますか?

インラインで初期化するか、静的コンストラクターで初期化を行うことができます。これらは、静的メンバーまたはインスタンス メンバーに最初にアクセスする前に呼び出されます。静的メンバーにアクセスせず、インスタンスを作成しないと、初期化が行われない可能性があります。

静的初期化子に関する興味深い記事

于 2013-01-13T13:03:43.350 に答える