c# - 非静态类中私有(private)静态变量的范围

标签 c# asp.net static

我知道,只要应用程序保持运行,静态属性就可以保留其值。非静态类中的私有(private)静态字段是否相同

public class A
{
   private static int B;

   public int GetSession()
   {
     return B++;
   }
}

在上面的类中,我有一个私有(private)静态字段。调用 GetSession() 方法会提供 GetSession() 访问的次数吗?

最佳答案

由于 B静态,它将在所有 session 之间共享线程安全(如果两个 session 试图同时访问/增加它怎么办?)实现是

   public int GetSession()
   {
       return Interlocked.Increment(ref B);
   }

编辑:如果我们想要模拟 B++,而不是 ++B(并返回 B 在递增之前 - 请参阅 Jeppe Stig Nielsen 的评论)我们可以减去 1:

   public int GetSession()
   {
       // - 1 Since we want to emulate B++ (value before incrementing), not ++B
       return Interlocked.Increment(ref B) - 1;
   }

关于c# - 非静态类中私有(private)静态变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54180704/

相关文章:

asp.net - 从经典 ASP 迁移到 ASP.net

asp.net - EntityFramework 反向 POCO 代码先生成单独的文件夹

c# - html实体只编码文本,不编码html标签

python - 如何根据构造函数参数初始化静态成员?

c# - 从具有共享边的列表中获取行的特定值

c# - 使用 Task.WhenAll() 时如何让所有任务完成?

c# - 使用 ZXing.Net 生成 EAN 条码并获取 base64 字符串

c# - 如何简化单元测试 DDD Value objects Equality with AutoFixture

wpf - 单个值的 INotifyPropertyChanged 与 ObservableCollection

arrays - 静态 uint8_t 数组的输入过程和类型