繁体   English   中英

非静态类中私有静态变量的范围

[英]Scope of private static variable in non static class

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

public class A
{
   private static int B;

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

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

由于Bstatic它将在所有会话之间共享 线程安全的(如果两个会话试图访问/ 同步增加吗?)实施

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

是的,它将提供调用GetSession()方法的次数。

这将是A 所有实例的总数。

请注意,它不是线程安全的,因此,如果您的应用程序有多个线程可能同时调用GetSession() ,则计数可能是错误的。 参见德米特里·拜琴科的答案。 如果您的A所有实例都在同一线程中调用,这没有问题。

还要注意,如果您的应用程序具有多个AppDomain,则每个AppDomain将具有一个单独的静态字段。 因此,无论调用经过哪个实例,它仅计入同一AppDomain中的调用。

是的,它仍将返回访问B的次数。 它仍然是static 添加私有不会更改此设置。 将类设为static意味着无法为该类实例化对象,因此,该类中的所有内容都必须为static 但是该变量的行为仍然相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM