[英]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.