簡體   English   中英

asp.net/C#中的靜態變量

[英]static variables in asp.net/C#

我在我的Web應用程序項目中使用了大量的靜態變量。 現在我從一些文章中讀到它是整個項目的全局變量,靜態變量中的數據可以被其他用戶共享或覆蓋(我的意思是它不是用戶特定的或特定於會話的)。

那么通常的編程習慣是不在常規Web應用程序開發中使用靜態變量嗎?

是否完全沒有使用靜態變量,就像GOTO語句/關鍵字一樣,這意味着使用它們有很多限制,最好不要使用它們? 那么在什么情況下我們使用靜態關鍵字?

那么我有這個要求,特定變量必須在特定的webform.aspx.cs中初始化一次,並且范圍必須僅限於那個特定的.aspx.cs和已經登錄的特定用戶? 我如何滿足這一要求? 如果可能,任何人都可以用代碼說明這一點嗎

我個人盡量避免使用靜態變量。 它們使代碼難以進行單元測試,並且由於並發訪問和競爭條件而導致細微錯誤。

就您的要求而言,您可以使用將變量存儲為ViewState中控件的屬性。 如果它是您嘗試存儲的用戶特定數據,則可以使用會話狀態

我相信你對靜態的解釋是錯誤的。

使用static修飾符聲明一個靜態成員,該成員屬於該類型本身而不是特定對象。

換句話說,對於該類的所有特定實例,此成員只有一個實例。

只要正確使用靜態變量,靜態變量就沒有任何問題。 我相信你將靜態與全局變量混合在一起。 可以從任何地方訪問全局變量。 這是不可取的,因為知道設置該變量的狀態的時間和地點是復雜的。 此外,這使得單元測試更加困難。


這個Programmers.SE問題可能對你很感興趣。

在靜態上,盡管它們具有特定的用途,但是為什么它們應該在一般情況下被避免有各種原因。

那么我有這個要求,特定變量必須在特定的webform.aspx.cs中初始化一次,並且范圍必須僅限於那個特定的.aspx.cs和已經登錄的特定用戶? 我如何滿足這一要求? 如果可能,任何人都可以用代碼說明這一點嗎

對於這個要求,我建議你看看澄清要求:

我個人更喜歡使用Session - 使用ViewState它很容易出錯,當它們出錯時,調試起來非常困難!


解釋:“當它們出錯時,它可能很難調試” - ViewState可以配置為多種方式,但通常它設置為通過將對象序列化為客戶端頁面作為隱藏表單字段然后反序列化這些發生頁面PostBack時的對象。 我花了很多天時間調試某個基於DNN的網站,該網站僅在某些瀏覽器上出現“無效ViewState”問題,僅在某些頁面上,而且僅在某些時間。 是什么造成的? 幾天后我仍然不知道...因此,如果可以的話,為什么我要遠離ViewState。 但是,我承認這可能是一個不公平的決定 - 在我的情況下,我正在使用大量第三方代碼生成動態頁面並創建了大量ViewState(ViewState的大小和復雜性實際上是我的原因之一)如果可以的話,根本不使用WebForms)。

例如,如果你有一些服務,那么你可以將它用作靜態,因為不需要IIS為服務創建重復的對象,因為它們都是相同的:)

怎么樣使用會話..

暫無
暫無

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

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