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

Zbo*_*one 9 c# methods call

我是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;          
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!!

Dav*_*vid 31

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

void Method1()
{
    var myString = "help";
    Method2(myString);
}

void Method2(string aString)
{
    var myString = "I need ";
    var anotherString = myString + aString;
}
Run Code Online (Sandbox Code Playgroud)

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

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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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


Dav*_*haw 8

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

例:

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;           
} 
Run Code Online (Sandbox Code Playgroud)

您现在可以aclass您的示例中的任何位置访问"私有字段"的值Form.


Shu*_*are 5

同意@Devid 的回答,但我更喜欢创建一类必需的实体,然后在整个解决方案中使用它们,而不将变量作为参数传递。

Classname.variableName;
Run Code Online (Sandbox Code Playgroud)

对于前-

 Class argumentData{
public static string firstArg= string.Empty;
public static string secArg= string.Empty;
}
Run Code Online (Sandbox Code Playgroud)

假设我在函数中分配数据

void assignData()
{
argumentData.firstArg="hey";
argumentData.secArg="hello";
}
Run Code Online (Sandbox Code Playgroud)

如果我想在另一种方法中使用它,那么

void showData()
{
Console.WriteLine("first argument"+argumentData.firstArg);
Console.WriteLine("sec argument"+ argumentData.secArg);
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!