¿Cómo crear una variable global en C #?

Necesito usar una variable global en mi proyecto .net. Sin embargo, no puedo manejarlo entre dos métodos.

mi código:

string str; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { str = "i am a string"; showString(); } } void showString() { aspLabel.Text = str; //error } 

Actualización de la pregunta:

No consideraré usar showString(str) porque esta variable usa muchos métodos. Por ejemplo, tengo un evento de clic que necesito usarlo.

 protected void Btn_Click(object sender, EventArgs e) { exportToExcel(str); } 

Por lo tanto, necesito crearlo en global!

La respuesta es no hacer variables globales (usted tampoco puede).

Lo más cercano a lo Global es tenerlo en una clase que es static y tiene un miembro static , pero realmente creo que sería el enfoque equivocado para la mayoría de los casos. Static clases / miembros Static usualmente hacen que el código esté más acoplado y reduce la capacidad de prueba, así que escoja con cuidado cuando decida hacerlo.

Hacer en su lugar: (pasar el parámetro)

 protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { string str = "i am a string"; showString(str); } } void showString(string str) { aspLabel.Text = str; } 

O:

 public class SomeClass { private string str; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { str = "i am a string"; showString(); } } protected void Btn_Click(object sender, EventArgs e) { exportToExcel(str); } void showString() { aspLabel.Text = str; } } 

Aquí puede cambiar el str para que sea una propiedad o un modificador de acceso diferente como desee, pero esta es la idea general.

Si lo tiene como público en lugar de privado, podrá acceder a él desde diferentes clases que tienen una instancia en esta clase. Me gusta esto:

 public class SomeClass { public string Str { get; private set; } protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { Str = "i am a string"; showString(); } } protected void Btn_Click(object sender, EventArgs e) { exportToExcel(Str); } void showString() { aspLabel.Text = Str; } } public class SomeOtherClass { public SomeOtherClass() { SomeClass someClass = new SomeClass(); var otherStr = someClass.Str; } } 

Como se ha dicho, no hagas variables globales. En lugar de pasar un parámetro en el método.

Para que sea un poco más obvio lo que está sucediendo:

 protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { string str = "i am a string"; showString(str); } } void showString(string nowthis) // nowthis == str, value is copied in { aspLabel.Text = nowthis; } 

No hay noción de una variable global en C #.

Puedes tener miembros estáticos como este

 public static class MyClassWithStatics { public static string MyString {get;set;} } 

Luego, en otra clase, puedes referenciarlo:

 public class MyOtherClass { public void MyMethod() { var str = MyClassWithStatics.MyString; } }