静态变量和静态方法之间的区别

Tho*_*and 3 c# asp.net webforms

我知道当你使用静态变量时,它的值会在所有用户之间共享.

static string testValue = "";
protected void SomeMethod(object sender, EventArgs e)
{
    testValue = TextBox1.Text;        
    string value = TestClass.returnString(TextBox1.Text); // <-- return from a static method
}
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下,如果一个用户访问网站并将值放入文本框,则testValue当另一个用户在文本框中输入内容时,该字符串将被另一个值覆盖.(我认为?)

我现在有这个班:

public class TestClass
{
  public static string returnString(string msg)
  {
    return msg;
  }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:如果我使用静态方法,那么该方法的返回值是否也为所有用户共享?或者每个用户总是一个"独特"的价值?

假设这个方法被五个不同的用户调用五次,这个静态方法会返回特定用户输入的值,还是一个用户可能获得另一个用户输入的值?

use*_*080 5

你的问题是:

我现在的问题是,如果我使用静态方法,那么该方法的返回值是否也为所有用户共享?或者每个用户总是一个"独特"的价值?

答案是,这取决于.使用你的例子:

public class TestClass 
{ 
  public static string returnString(string msg) 
  { 
    return msg; 
  } 
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,5个不同的用户(很可能)将5个不同的字符串传递给静态方法.因此他们会找回五个不同的字符串.所以对于这种情况:

string value = TestClass.returnString(TextBox1.Text);
Run Code Online (Sandbox Code Playgroud)

每个用户都会收到他们在自己的TextBox中输入的内容.另一方面,如果代码是这样的:

string value = TestClass.returnString(testValue);
Run Code Online (Sandbox Code Playgroud)

他们都会回来在返回时发生在静态字符串中的事情.

所以要记住的规则是:

  • 如果该方法使用静态成员变量,则存在不同用户影响彼此结果的风险.无论方法是否静态,这都是无关紧要的.
  • 如果该方法仅使用调用参数和局部变量,并且调用参数本身不指向statisc成员变量,则来自不同用户的调用不会相互影响.