[英]What are static C# class variables for in ASP.NET?
我知道静态类变量在C ++类中做了什么,我不太清楚的是用于ASP.NET Web应用程序的C#类中的静态类变量的生命周期。 这是一个代码示例:
namespace MyWebApp
{
public static class MyFunctions
{
private static string _cachedID;
public static string getID(string strValue)
{
if(_cachedID == null)
_cachedID = strValue;
return _cachedID;
}
}
}
有人可以用简单的英语为我解释一下吗?
我在某处读过。
静态变量/字段在执行其包含类型的静态构造函数之前就已存在,并且在关联的应用程序域不再存在时不再存在。
由于您在多线程ASP.NET应用程序的上下文中提出此问题,因此您应该非常小心。 签出以下场景:
2个用户Bob和Alice在传递不同参数的同时调用getID
方法。 Bob通过Foo
,Alice通过了Bar
。 由于这是第一次调用, _cachedID
变量尚未初始化,因此两者都进入if
条件,Bob稍有延迟。 所以Alice将the _cachedID
静态变量设置为Bar
然后将其设置为微秒, Bob
将其设置为Foo
。 现在代码继续,函数返回两个用户的Foo
。 鲍勃当然很高兴,因为那是他想要的,但爱丽丝想要Bar
。
例如,如果要在多线程环境中执行一次初始化,可以考虑使用Singleton Pattern的线程安全版本。
这样做的道理是,在ASP.NET应用程序中处理共享/静态数据时应该非常小心。 如果您需要使用它,您需要正确地同步对它的访问,否则可能会发生非常糟糕的事情。 当您的应用程序被多个用户同时访问时,它们通常会在生产中发生。 在您的本地PC上一切正常。
回到关于静态字段生命周期的原始问题:它与应用程序域的生命周期相关联。
您不能也不必创建对象的类,但您只能从静态上下文访问它。
你会像这样使用你的例子:
MyFunctions.getID("bla");
http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.