簡體   English   中英

Asp.Net中的靜態變量行為

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM