2013-07-26 112 views
2

如果我創建一個靜態屬性MyLanguage和一個請求並將其值設爲1,而在同一時間的另一個線程將它設置爲2 - 會是怎樣的MyLanguage終值?靜態屬性要求

單個MyLanguge屬性是否在ASP.NET會話中共享?

+0

不只是一個簡單的asp.net網頁 –

+1

你可以請一些努力使你的問題更清晰嗎?這是一個語法噩夢。 :(我還沒有喝過早茶,所以也許只是我,但這個問題真的可以用一些工作。 – Shaamaan

+0

不,如果你把你的價值1或2存入會話中,那麼它對每個用戶都是唯一的..會議無法分享其獨特 –

回答

7

靜態屬性/字段在整個應用程序域中共享。所以你所有的會話都應該看到相同的值

唯一的例外是當您在靜態字段上使用ThreadStatic屬性時,在這種情況下每個線程都會看到自己的值。例如

[ThreadStatic] 
static int counter = 0; // each thread sees a different static counter. 
+0

Erosnmez所以它意味着每個會話都會有自己的靜態值 –

+1

否,除非你指定了[ThreadStatic],否則他們應該看到一個_shared_值,而不是他們自己的值。 –

+0

是的,我只是在說, –

2

這將是2.靜態字段,屬性在對象之間共享。所以最新的設置值將是所有實例的更新。

從MSDN

使用static修飾符來聲明靜態成員,屬於類型本身,而不是一個特定的對象。靜態修飾符可以與類,字段,方法,屬性,運算符,事件和構造函數一起使用,但不能與索引器,析構函數或類以外的類型一起使用。欲瞭解更多信息

+5

我不喜歡「在對象之間共享」的術語 - 這表明它們與對象本身*相關*,它們不是。它們與類型有關。該字段是否存在*任何*實例。 –

+0

這只是術語。實際上,它是由所有對象共享的。 –

+0

@Rajesh Subramanian你可能想要改變你的答案,你說靜態是在對象間共享的 - 這是誤導性的,這與'Environment.MachineName'在對象間共享 - 它們完全不相關。靜態屬於類型,而不屬於單個對象。 – andreister

0

靜態是唯一的應用程序域,該應用程序域的所有用戶將爲每個靜態屬性共享相同的值。

當您看到單詞static時,請考慮「將只有一個此實例。」實例持續多久是一個單獨的問題,但簡短的答案是它是可變的。

如果要存儲特定於用戶的值,請查看Session State