web-dev-qa-db-ja.com

C#ライブラリでグローバルオブジェクトを作成する方法

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

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

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

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つの場所を用意する方が優れた設計だと思います。

19
Hogan

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

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

7
Ergwun

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

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

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

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

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

4
Tilak