C # referenciando uma variável de outro método

Eu sou novo em c # e eu realmente preciso saber como chamar / usar uma seqüência de outro método.

Por exemplo:

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

Então neste exemplo eu preciso chamar a string ” a ” definida na function button1_Click() da function button2_Click()

Obrigado!!

Normalmente você passaria isso como um argumento, assim:

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

No entanto , os methods no seu exemplo são ouvintes de events. Você geralmente não os chama diretamente. (Eu suponho que você pode , mas eu nunca encontrei uma instância onde se deve .) Portanto, neste caso em particular, seria mais prudente armazenar o valor em um local comum dentro da class para os dois methods a serem usados. Algo assim:

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

Observe, no entanto, que isso se comportará de maneira muito diferente no ASP.NET. Então, se é isso que você está usando, então você provavelmente vai querer dar um passo adiante. A razão pela qual se comporta de maneira diferente é porque o lado do servidor é “sem estado”. Portanto, cada clique de botão proveniente do cliente resultará em uma instância inteiramente nova da class. Portanto, definir esse membro de nível de class no primeiro manipulador de events de clique de botão não será refletido ao usá-lo no segundo manipulador de events de clique de botão.

Nesse caso, você vai querer olhar para o estado persistente dentro de um aplicativo da web. Opções incluem:

  1. Valores da Página (campos ocultos, por exemplo)
  2. Biscoitos
  3. Variáveis ​​de Sessão
  4. Variáveis ​​de Aplicação
  5. Um database
  6. Um arquivo do lado do servidor
  7. Alguns outros meios de persistir dados no lado do servidor, etc.

Você precisa declarar string a no escopo da class , não no método, no momento em que é uma “variável local”.

Exemplo:

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

Agora você pode acessar o valor do seu “campo particular” a de qualquer lugar dentro de sua class que no seu exemplo será um Form .

Refatore isso em uma chamada de método (ou propriedade) para que você possa acessar o valor de a outro local em seu aplicativo:

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

Observe também que você pode estar usando declarações de tipo implícitas. Na verdade, estas são declarações equivalentes:

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

make é uma variável de nível de class (variável global) ou cria um getter e setter para String a, para nomear algumas opções.

Você não pode fazer isso. string a é uma declaração de variável local. É chamado de “local” porque só é acessível “localmente” ao bloco em que ocorre.

Para tornar a variável visível para os dois methods, você pode criar um campo na class que contém os methods. Se os methods estiverem em classs diferentes, a solução fica mais complicada.

Você não pode fazer isso porque essas variables ​​estão em escopos diferentes (pense que está oculto). A única maneira de conseguir isso é mover um na class de formulário 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. } } 

Você poderia salvar a variável em um arquivo e depois acessar o arquivo mais tarde, assim:

 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) } 

Se você fizer isso, apenas certifique-se de colocar isso em seu código: using System.IO;