C#引用另一个方法的变量

我是C#的新手,我真的需要知道如何从另一个方法调用/使用字符串。

例如:

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

所以在这个例子中,我需要从函数button2_Click()调用函数button1_Click()定义的字符串“ a

谢谢!!

通常你会将它作为参数传递,如下所示:

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

但是 ,示例中的方法是事件侦听器。 您通常不直接打电话给他们。 (我想你可以 ,但我从来没有找到一个应该的实例。)因此在这种特殊情况下,将值存储在类中的公共位置以供两种方法使用会更为谨慎。 像这样的东西:

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

但请注意,这在ASP.NET中的表现会有很大差异。 所以,如果你正在使用它,那么你可能想要更进一步。 它表现不同的原因是因为服务器端是“无状态的”。 因此,来自客户端的每个按钮单击将导致该类的全新实例。 因此,在第二个按钮单击事件处理程序中使用它时,不会反映在第一个按钮单击事件处理程序中设置该类级别成员。

在这种情况下,您需要查看Web应用程序中的持久状态。 选项包括:

  1. 页面值(例如隐藏字段)
  2. cookies
  3. 会话变量
  4. 应用程序变量
  5. 数据库
  6. 服务器端文件
  7. 在服务器端保留数据的其他一些方法等。

您需要在class的范围内声明string a ,而不是方法,此时它是“局部变量”。

例:

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

您现在可以从class中的任何位置访问“私有字段” a的值,在您的示例中,这将是一个Form

将其重构为方法调用(或属性),以便您可以访问应用程序中其他位置的值:

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

另请注意,您可能正在使用隐式类型声明。 实际上,这些是等效的声明:

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

make是类级变量(全局变量)或为String a创建getter和setter,以命名几个选项。

你不能这样做。 string a局部变量声明。 它被称为“本地”,因为它只能在“本地”访问它发生的块。

要使变量对两个方法都可见,可以在包含方法的类中创建一个字段。 但是,如果方法属于不同的类,则解决方案会变得更加复杂。

你不能这样做,因为这些变量在不同的范围内 (认为​​它是隐藏的)。 实现此目的的唯一方法是在主窗体类中移动:

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

您可以将变量保存到文件中,然后稍后访问该文件,如下所示:

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

如果你这样做,只需确保将其放在你的代码中: using System.IO;