c# – 静态方法中的变量共享

我有一个关于静态方法中的变量的问题.
静态方法中的变量共享相同的内存位置,还是会有单独的内存?

这是一个例子.

public class XYZ
{
    Public Static int A(int value)
    {
      int b = value;
      return b;
    }
}

如果3个不同的用户调用执行方法A

XYZ.A(10);
XYZ.A(20);
XYZ.A(30);

与此同时.每个电话的返回值是多少?

XYZ.A(10)=?
XYZ.A(20)=?
XYZ.A(30)=?

解决方法

它们仍然是本地变量 – 它们不在线程之间共享.事实上,他们在一个静态方法没有什么区别.

如果你使用一个静态变量作为中间变量,那将是不安全的:

public class XYZ
{
    // Don't do this! Horribly unsafe!
    private static int b;
    public static int A(int value)
    {
        b = value;
        return b;
    }
}

在这里,所有的线程将真正使用相同的b变量,所以如果你同时从多个线程调用方法,线程X可以写入b,然后是线程Y,这样线程X最终返回由线程Y设置的值.

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString("x2"));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable<Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include "WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...