web-dev-qa-db-ja.com

c#.netのグローバル変数

C#Webアプリケーションでグローバル変数を設定するにはどうすればよいですか?

私がやりたいのは、ページ(おそらくマスターページ)に変数を設定し、任意のページからこの変数にアクセスすることです。

キャッシュもセッションも使用しません。

Global.asaxを使用する必要があると思います。何か助け?

44
scatman

Public staticクラスを使用して、どこからでもアクセスします。

public static class MyGlobals {
    public const string Prefix = "ID_"; // cannot change
    public static int Total = 5; // can change because not const
}

マスターページまたはどこからでも、次のように使用されます。

string strStuff = MyGlobals.Prefix + "something";
textBox1.Text = "total of " + MyGlobals.Total.ToString();

クラスのインスタンスを作成する必要はありません。実際、静的であるため、できません。 new 直接使用してください。静的クラス内のすべてのメンバーも静的でなければなりません。 constは本質的に暗黙的に静的であるため、ストリングPrefixは静的とマークされません。

静的クラスは、プロジェクト内の任意の場所に配置できます。 Global.asaxまたは特定のページの一部である必要はありません。「グローバル」であるためです(または、少なくとも、オブジェクト指向の用語でその概念に近づくことができます)。

静的クラスを好きなだけ作成し、好きな名前を付けることができます。


プログラマーは、ネストされた静的クラスを使用して定数をグループ化することを好む場合があります。例えば、

public static class Globals {
    public static class DbProcedures {
        public const string Sp_Get_Addresses = "dbo.[Get_Addresses]";
        public const string Sp_Get_Names = "dbo.[Get_First_Names]";
    }
    public static class Commands {
        public const string Go = "go";
        public const string SubmitPage = "submit_now";
    }
}

次のようにアクセスします。

MyDbCommand proc = new MyDbCommand( Globals.DbProcedures.Sp_Get_Addresses );
proc.Execute();
//or
string strCommand = Globals.Commands.Go;
102
John K

2番目のjdkの答え:アプリケーションのクラスのpublic staticメンバーは、「グローバル変数」と見なすことができます。

ただし、これはASP.NETアプリケーションであり、グローバル変数のマルチスレッドコンテキストであることに注意してください。したがって、これらの変数との間でデータを更新および/または読み取る場合は、何らかのロックメカニズムを使用する必要があります。そうしないと、データが破損した状態になる可能性があります。

6
Ron Klein

System.Web.UI.Pageを継承するアプリケーションで基本クラスを作成できます。すべてのページに、新しく作成された基本クラスを継承させます。アプリケーションのすべてのページからアクセスできるように、適切なアクセス修飾子を使用してプロパティまたは変数を基本クラスに追加します。

4
Ghyath Serhal

application scope で変数を作成できます

0
Ameer Deen
/// <summary>
/// Contains global variables for project.
/// </summary>
public static class GlobalVar
{
/// <summary>
/// Global variable that is constant.
/// </summary>
public const string GlobalString = "Important Text";

/// <summary>
/// Static value protected by access routine.
/// </summary>
static int _globalValue;

/// <summary>
/// Access routine for global variable.
/// </summary>
public static int GlobalValue
{
get
{
    return _globalValue;
}
set
{
    _globalValue = value;
}
}

/// <summary>
/// Global static field.
/// </summary>
public static bool GlobalBoolean;
}
0
Morteza