C # hace referencia a una variable de otro método

Soy nuevo en C # y realmente necesito saber cómo llamar / usar una cadena de otro método.

Por ejemplo:

public void button1_Click(object sender, EventArgs e) { string a = "help"; } public void button2_Click(object sender, EventArgs e) { //this is where I need to call the string "a" value from button1_click string b = "I need "; string c = b + a; } 

Entonces en este ejemplo necesito llamar a la cadena ” a ” definida en la función button1_Click() desde la función button2_Click()

¡¡Gracias!!

Usualmente lo pasarías como argumento, así:

 void Method1() { var myString = "help"; Method2(myString); } void Method2(string aString) { var myString = "I need "; var anotherString = myString + aString; } 

Sin embargo , los métodos en su ejemplo son escuchas de eventos. Generalmente no los llamas directamente. (Supongo que puede , pero nunca encontré una instancia en la que debería ). Por lo tanto, en este caso particular sería más prudente almacenar el valor en una ubicación común dentro de la clase para que los dos métodos lo utilicen. Algo como esto:

 string StringA { get; set; } public void button1_Click(object sender, EventArgs e) { StringA = "help"; } public void button2_Click(object sender, EventArgs e) { string b = "I need "; string c = b + StringA; } 

Tenga en cuenta, sin embargo, que esto se comportará de manera muy diferente en ASP.NET. Entonces, si eso es lo que estás usando, probablemente quieras dar un paso más. La razón por la que se comporta de manera diferente es porque el lado del servidor es “sin estado”. Por lo tanto, cada clic de botón proveniente del cliente dará como resultado una instancia completamente nueva de la clase. Por lo tanto, al establecer ese miembro de nivel de clase en el primer controlador de evento click click no se reflejará cuando lo use en el segundo botón haga clic en controlador de eventos.

En ese caso, querrá examinar el estado persistente dentro de una aplicación web. Las opciones incluyen:

  1. Valores de página (campos ocultos, por ejemplo)
  2. Galletas
  3. Variables de sesión
  4. Variables de aplicación
  5. Una base de datos
  6. Un archivo del lado del servidor
  7. Algunos otros medios de datos persistentes en el lado del servidor, etc.

Necesita declarar la string a en el ámbito de la class , no el método, en el momento en que es una “variable local”.

Ejemplo:

 private string a = string.Empty; public void button1_Click(object sender, EventArgs e) { a = "help"; } public void button2_Click(object sender, EventArgs e) { //this is where I need to call the string "a" value from button1_click string b = "I need"; string c = b + a; } 

Ahora puede acceder al valor de su “campo privado” desde cualquier lugar dentro de su class que en su ejemplo será un Form .

Refactorice eso en una llamada a método (o propiedad) para que pueda acceder al valor de otro en su aplicación:

 public String GetStringAValue() { return "help"; } public void button1_Click(object sender, EventArgs e) { string a = GetStringAValue(); } public void button2_Click(object sender, EventArgs e) { string a = GetStringAValue(); string b = "I need"; string c = b + a; } 

También tenga en cuenta que podría estar utilizando declaraciones de tipos implícitos. En efecto, estas son declaraciones equivalentes:

 string a = GetStringAValue(); var a = GetStringAValue(); 

make es una variable de nivel de clase (variable global) o crea un getter y setter para String a, para nombrar un par de opciones.

No puedes hacer eso. string a es una statement de variable local. Se llama “local” porque solo se puede acceder “localmente” al bloque en el que se produce.

Para que la variable sea visible para ambos métodos, puede crear un campo en la clase que contiene los métodos. Sin embargo, si los métodos están en diferentes clases, la solución se vuelve más complicada.

No puede hacer esto porque esas variables están en diferentes ámbitos (piense que está oculto). La única forma de lograr esto es mover a en la clase de formulario principal:

 public partial class Form1 : Form { string a; // etc ... } 
 class SomeClass { //Fields (Or Properties) string a; public void button1_Click(object sender, EventArgs e) { a = "help"; //Or however you assign it } public void button2_Click(object sender, EventArgs e) { string b = "I need"; string c = b + (a ?? String.Empty); //'a' should be null checked somehow. } } 

Puede guardar la variable en un archivo, luego acceder al archivo más tarde, de esta manera:

 public void button1_Click(object sender, EventArgs e) { string a = "help"; File.WriteAllText(@"C:\myfolder\myfile.txt", a); //Change this to your real file location } public void button2_Click(object sender, EventArgs e) { string d = File.ReadAllText(@"C:\myfolder\myfile.txt"); //this is where I need to call the string "a" value from button1_click string b = "I need"; string c = b + d; //Instead of a, put the variable name (d in this case) } 

Si haces eso, solo asegúrate de poner esto en tu código: using System.IO;