![](/img/trans.png)
[英]Are private static variable inside non-static class available to the entire application?
[英]Scope of private static variable in non static class
我知道,只要应用程序保持运行状态,静态属性就可以保留其值。 非静态类中的私有静态字段是否相同
public class A
{
private static int B;
public int GetSession()
{
return B++;
}
}
在上述类中,我有一个私有静态字段。 调用GetSession()
方法将提供访问GetSession()
的次数吗?
由于B
是static
它将在所有会话之间共享 ; 线程安全的(如果两个会话试图访问/ 同步增加吗?)实施
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.