簡體   English   中英

ASP.Net普通類內的靜態類

[英]Static Class inside Normal class for ASP.Net

我知道在ASP.Net項目中將類靜態化將導致該類的運行時屬性可用於Web服務器上的所有會話。

我的問題是:如果我聲明嵌套類是靜態的,但容器不是靜態的,跨會話共享類是否仍然適用?

例:

 public class FooContainer 
    {

        public static class Bar
        {
        }

        public static class dog
        {
        }
    }

是; 靜態嵌套類的行為與任何其他靜態類相同。 嵌套類的唯一不同之處是外部類是泛型類型(然后嵌套類型通過父類隱式泛型,因此FooContainer<X>.Bar將獨立於FooContainer<Y>.Bar )。

並且要小心:在會話之間共享數據的靜態過程充滿了危險。 像一個偏執的事情一樣同步。 就我個人而言,我將需要一個很好的理由來執行此操作……並且它需要仔細執行。 我只將這種方法用於諸如配置緩存之類的事情,即使如此,我還是對此非常謹慎。

最終,是的。

嵌套的靜態類的編譯方式與根級別的靜態類相同(Marc明智地指出了涉及泛型的細微差異)–唯一的差異是類型路徑的限定,但這僅在任何環境中都是自然的,完全沒有副作用。

當我看到有人在同一句話中說“靜態數據”和“ ASP.NET”時,所有警報都會響起。

是的,正如Marc所說,靜態類即使嵌套也將是靜態的,您只需要通過包含類調用它們即可

MyStaticClass.StaticField = 3; ///wont work
MyInstanceClass.MyStaticClass.StaticField = 3; // works

任何可實例化的類都可以具有靜態方法/屬性/構造函數,使一個類顯式靜態化只是具有一個額外的好處,即您不能使非靜態化成為我的錯誤,從而闡明了類的目的和意圖。

但是請注意,ASP.net中的靜態類在應用程序級別上確實是靜態的,因此,如果您有多個用戶,則無論授權如何,他們都將看到相同的靜態數據,並且更改這些數據將影響使用它的所有用戶。 。
因此,靜態變量可能是放置從db中讀取一次然后顯示的東西的正確位置,例如,應用程序的當前版本或應用程序的啟動時間, 但這是放置用戶特定的錯誤位置數據,如語言偏好設置,用戶名等,等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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