2010-03-15 34 views
40

C# web uygulamasında global değişkeni nasıl ayarlayabilirim?Genel değişkenler C# .net

Yapmak istediğim, bir sayfada (ana sayfa) değişken ayarlamak ve bu değişkene herhangi bir sayfadan erişmek.

Ne önbellek ne de oturum açmak istemiyorum.

Global.asax'ı kullanmam gerektiğini düşünüyorum. Herhangi bir yardım?

+0

özel bir sebebi önbellek/oturum alışkanlık çalışmak var mı?Teknik olarak Uygulama bir Oturum/Önbellek nesnesidir ve bu nedenle (statik olmayan bir şekilde) kullanıyorsanız, zaten Oturumları kullanırsınız. Eğer oturuma özgü kısmı ise, bu, Uygulama seviyesi önbelleği ile adreslenebilir. – GrayWizardx

+0

evet çünkü büyük bir liste saklamak gerekiyor ve önbellek sadece 16MB olduğunu, bu yüzden cahe kaynak harcamak istemiyorum ... – scatman

+0

Bir singleton ister misin? * Tüm * iş parçacığı * tüm * istekleri tarafından paylaşılan tek bir nesne mi? Veya sadece bir MasterPage ile bir ContentPage arasında bir paylaşım yolu istiyor musunuz? Eğer daha geç ise, küresel değişkenler kesinlikle iyi bir çözüm değildir. – tarn

cevap

95

Genel statik bir sınıf kullanın ve her yerden erişin. her yerde ana sayfası veya gelen, bu nedenle gibi kullanılabilir

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

: Sen sınıfının bir örneğini yapmak gerekmez

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

; Aslında yapamazsın çünkü statik. new Sadece doğrudan kullanın. Statik sınıf içindeki tüm üyeler de statik olmalıdır. Önek dizesi statik olarak işaretlenmez, çünkü const, doğası gereği örtük olarak statiktir.

Statik sınıf projenizde herhangi bir yerde olabilir. Global.asax'ın ya da herhangi bir sayfanın bir parçası olmak zorunda değil çünkü "global" (ya da en azından nesneye yönelik terimlerle bu kavramı alabildiğimiz kadar yakın.)

İstediğiniz gibi statik sınıflar ve istediğiniz her şeyi adlandırın. Bazen, programcılar sabit iç içe statik sınıflar kullanarak sabitlerini gruplamak isterler. Örneğin,

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"; 
    } 
} 

için ve böylece gibi bunlara erişmek:

MyDbCommand proc = new MyDbCommand(Globals.DbProcedures.Sp_Get_Addresses); 
proc.Execute(); 
//or 
string strCommand = Globals.Commands.Go; 
+2

+ 1, hoşuma gitti. – SoftwareGeek

4

Ben ikinci JDK cevap: Başvurunuzun herhangi sınıfının hiçbir statik üyesi "küresel değişkeni" olarak kabul edilebilir. Ancak, bunun bir ASP.NET uygulaması olduğunu ve bu nedenle, global değişkenleriniz için bir çok iş parçacıklı bağlam olduğunu unutmayın. Üste | Bu nedenle, bu değişkenlere veriyi güncellediğinizde ve/veya okuduğunuzda bazı kilitleme mekanizmalarını kullanmalısınız. Aksi halde verilerinizi bozuk bir duruma getirebilirsiniz.

+0

bu sadece global değişkenler için bir dezavantaj mıdır? ya da önbellek için de? – scatman

+0

AFAIK, ASP.NET uygulamasıyla birlikte gelen önbellek nesnesinin genel yöntemleri, iş parçacığı güvenlidir. Ama belgelere bir bakın ... –

0

Sen System.Web.UI.Page devraldığı uygulamanızda bir temel sınıf oluşturabilir bir application scope

3

ile bir değişken oluşturabilirsiniz. Tüm sayfalarınızın yeni oluşturulan temel sınıftan miras kalmasına izin verin. Temel sınıfınıza, ilgili erişim değiştiricisiyle bir özellik veya değişken ekleyin. Böylece, uygulamadaki tüm sayfalarınızdan erişilebilir.

-3

Değişkeni bir sınıf başlangıcında bildirmeniz yeterlidir.

örn. dize değişkeni için:

public partial class Login : System.Web.UI.Page 
{ 
    public string sError; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     //Page Load Code 
    } 
0
/// <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; 
}