Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET中静态C#类变量的用途是什么? 我知道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; } } }_C#_Asp.net_Static_Static Members - Fatal编程技术网

ASP.NET中静态C#类变量的用途是什么? 我知道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中静态C#类变量的用途是什么? 我知道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; } } },c#,asp.net,static,static-members,C#,Asp.net,Static,Static Members,有人能用简单的英语给我解释一下吗?我在什么地方读过 静态变量/字段在执行其包含类型的静态构造函数之前存在,并且在关联的应用程序域停止存在时停止存在。不能且不必创建对象的类,但只能从静态上下文访问它 您可以这样使用您的示例: MyFunctions.getID("bla"); 既然您是在多线程ASP.NET应用程序的上下文中提出这个问题,那么您应该非常小心。签出以下场景: 2个用户Bob和Alice同时调用getID方法并传递不同的参数。鲍勃通过Foo,爱丽丝通过Bar。由于这是第一次调用,\u

有人能用简单的英语给我解释一下吗?

我在什么地方读过


静态变量/字段在执行其包含类型的静态构造函数之前存在,并且在关联的应用程序域停止存在时停止存在。

不能且不必创建对象的类,但只能从静态上下文访问它

您可以这样使用您的示例:

MyFunctions.getID("bla");

既然您是在多线程ASP.NET应用程序的上下文中提出这个问题,那么您应该非常小心。签出以下场景:

2个用户Bob和Alice同时调用
getID
方法并传递不同的参数。鲍勃通过
Foo
,爱丽丝通过
Bar
。由于这是第一次调用,
\u cachedID
变量尚未初始化,因此两者都会进入
if
条件,并稍微延迟。因此Alice将_cachedID静态变量设置为
Bar
,一微秒后,
Bob
将其设置为
Foo
。现在代码继续,函数为两个用户返回
Foo
。鲍勃当然很高兴,因为那正是他想要的,但爱丽丝想要的是
Bar

例如,如果您希望在多线程环境中执行一次初始化,您可以考虑使用.< /p>的线程安全版本。 这一点的寓意是,在ASP.NET应用程序中处理共享/静态数据时,应该非常小心。如果您需要使用它,您需要正确地同步对它的访问,否则可能会发生非常糟糕的事情。当应用程序被多个用户并发访问时,它们通常发生在生产环境中。在您的本地PC上,一切正常


回到您最初关于静态字段生存期的问题:它与应用程序域的生存期有关。

谢谢。比如说,如果我的web应用发布在www.mydomain.com的URL上,并且第一个用户通过web浏览器登录到它。将设置cachedID变量。但是,如果另一台计算机的完全不同的用户登录到同一URL,则cachedID将已设置为第一个值。这就是你说的吗?@ahmd0,是的。整个AppDomain只有一个静态成员实例。@AlexeiLevenkov,singleton模式之间存在差异(在AppDomain的生存期内,只有一个实例可能分配给静态字段)和一个静态字段,在AppDomain的生存期内,您可以在其中分配任意多的实例。@DarinDimitrov,hmmm。。。我不确定人们会如何表达这样一个事实:静态字段精确地分配了个,并在整个AppDomain中共享。我的尝试是“静态成员的实例”,正如我现在所看到的,它可以被解读为对单例模式的引用。
静态字段精确地分配了一个,并在整个AppDomain中共享。
->这样很完美。没有更多的混乱。谢谢你的链接。我不清楚的是ASP.NET环境中这些静态变量的生命周期?谢谢,达林。这解释得很好。我会记住这一点。还有一个问题——当我们谈论访问我的web应用程序的web浏览器时,IIS服务器如何记住该变量?IIS什么都不记得。ASP.NET应用程序在其中执行的应用程序域将其存储在内存中。