[英]Static variable Behaviour in Asp.Net
我有一个OperationHelper类,如下所示:
public class OperationHelper
{
/// <summary>
/// Gets or sets the Add Operation value
/// </summary>
public static bool AddOperation { get; set; }
/// <summary>
/// Gets or sets the Edit Operation value
/// </summary>
public static bool EditOperation { get; set; }
/// <summary>
/// Gets or sets the Delete Operation value
/// </summary>
public static bool DeleteOperation { get; set; }
/// <summary>
/// Gets or sets the Select Operation value
/// </summary>
public static bool SelectOperation { get; set; }
}
在每个请求中,将重新分配该值。 当我在本地运行时,它可以正常工作。 但是,当我发布代码时,某些值未分配或不起作用,因为它应该起作用。
所以想知道C#中Asp.Net中静态变量的行为。
静态变量等于所有用户都可以访问的全局变量吗? 如果用户A将其设置为true,则用户B可以将该值获取为True还是具有不同的变量实例。
static
变量的行为是,一旦到达它们所属的代码,就会立即创建它们。 要解决您的问题,请为您的类考虑一个static constructor
,以根据需要正确初始化所有值
public class OperationHelper
{
/// <summary>
/// Gets or sets the Add Operation value
/// </summary>
public static bool AddOperation { get; set; }
/// <summary>
/// Gets or sets the Edit Operation value
/// </summary>
public static bool EditOperation { get; set; }
/// <summary>
/// Gets or sets the Delete Operation value
/// </summary>
public static bool DeleteOperation { get; set; }
/// <summary>
/// Gets or sets the Select Operation value
/// </summary>
public static bool SelectOperation { get; set; }
static OperationHelper() {
//initialize your static variables here
}
}
有关static
构造函数的参考,请参见此处 。
所以想知道C#中Asp.Net中静态变量的行为。
静态变量等于所有用户都可以访问的全局变量吗? 如果用户A将其设置为true,则用户B可以将该值获取为True还是具有不同的变量实例。
仅当您在池中的一个工作进程下运行站点时 ,此行为才是这样。
如果您的池有多个工作进程,则每个进程都具有其静态值 ,并且您不知道为每个请求,每个用户指定了哪个进程。 和他们在一起处理不交流。
因此,假设您有一个包含4个工作流程的池。
UserA请求一个页面,正在重播进程1,并将静态值设置为A。
UserB请求一个页面,进程1正在重播,静态值为A。
UserA请求页面,正在重播进程2,并且未设置静态值。
等等。 有关此主题的更多信息: ASP.NET静态变量的生命周期
静态变量存储在asp.net aspx页中的哪里
在ASP.NET中使用静态变量代替应用程序状态
ASP.NET网站上的静态方法
Asp.net静态对象有时显示为非全局对象
静态变量仅创建一次。 因此userB
将获得该变量的相同实例来回答您的问题。
这里已经讨论了更多。
您需要考虑使用会话,以便为每个访问该网站的用户提供不同的价值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.