C # che fa riferimento a una variabile da un altro metodo

Sono nuovo di C # e ho davvero bisogno di sapere come chiamare / utilizzare una stringa da un altro metodo.

Per esempio:

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

Quindi in questo esempio ho bisogno di chiamare la stringa ” a ” definita nella funzione button1_Click() dalla funzione button2_Click()

Grazie!!

Di solito lo si passa come argomento, in questo modo:

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

Tuttavia , i metodi nell’esempio sono listener di eventi. In genere non li chiami direttamente. (Suppongo che si possa , ma non ho mai trovato un’istanza dove si dovrebbe .) Quindi in questo caso particolare sarebbe più prudente memorizzare il valore in una posizione comune all’interno della class per i due metodi da utilizzare. Qualcosa come questo:

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

Si noti, tuttavia, che ciò si comporterà in modo molto diverso in ASP.NET. Quindi, se è quello che stai usando, probabilmente vorrai fare un ulteriore passo avanti. La ragione per cui si comporta diversamente è perché il lato server è “senza stato”. Quindi ogni clic del pulsante proveniente dal client produrrà un’istanza completamente nuova della class. Quindi, impostando quel membro del livello di class nel primo gestore di eventi del clic del pulsante, non si rifletterà quando lo si utilizza nel secondo gestore di eventi del clic del pulsante.

In tal caso, ti consigliamo di esaminare lo stato persistente all’interno di un’applicazione web. Le opzioni includono:

  1. Valori di pagina (campi nascosti, ad esempio)
  2. Biscotti
  3. Variabili di sessione
  4. Variabili dell’applicazione
  5. Un database
  6. Un file lato server
  7. Alcuni altri mezzi per mantenere i dati sul lato server, ecc.

È necessario dichiarare la string a a nell’ambito della class , non del metodo, al momento è una “variabile locale”.

Esempio:

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

Ora puoi accedere al valore del tuo “campo privato” a da qualsiasi punto della tua class che nel tuo esempio sarà una Form .

Refactor in una call (o proprietà) del metodo in modo da poter accedere al valore di a altrove nella tua applicazione:

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

Si noti inoltre che è ansible utilizzare dichiarazioni di tipo implicito. In effetti, si tratta di dichiarazioni equivalenti:

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

make è una variabile di livello di class (variabile globale) o crea un getter e setter per String a, per nominare un paio di opzioni.

Non puoi farlo. string a è una dichiarazione di variabile locale. Si chiama “locale” perché è accessibile solo “localmente” al blocco in cui si verifica.

Per rendere la variabile visibile a entrambi i metodi, è ansible creare un campo nella class contenente i metodi. Se i metodi sono in classi diverse, tuttavia, la soluzione diventa più complicata.

Non puoi farlo perché quelle variabili sono in ambiti diversi ( pensalo come nascosto). L’unico modo per ottenere ciò è spostare una class nella forma principale:

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

È ansible salvare la variabile in un file, quindi accedere al file in un secondo momento, in questo modo:

 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 lo fai, assicurati di inserirlo nel tuo codice: using System.IO;