![](/img/trans.png)
[英]Are private static variable inside non-static class available to the entire application?
[英]Scope of private static variable in non static class
我知道,只要應用程序保持運行狀態,靜態屬性就可以保留其值。 非靜態類中的私有靜態字段是否相同
public class A
{
private static int B;
public int GetSession()
{
return B++;
}
}
在上述類中,我有一個私有靜態字段。 調用GetSession()
方法將提供訪問GetSession()
的次數嗎?
由於B
是static
它將在所有會話之間共享 ; 線程安全的(如果兩個會話試圖訪問/ 同步增加嗎?)實施
public int GetSession()
{
return Interlocked.Increment(ref B);
}
編輯:如果我們要模擬B++
,而不是++B
(並在遞增之前返回B
請參見Jeppe Stig Nielsen的評論),我們可以簡單地算出1
:
public int GetSession()
{
// - 1 Since we want to emulate B++ (value before incrementing), not ++B
return Interlocked.Increment(ref B) - 1;
}
是的,它將提供調用GetSession()
方法的次數。
這將是A
所有實例的總數。
請注意,它不是線程安全的,因此,如果您的應用程序有多個線程可能同時調用GetSession()
,則計數可能是錯誤的。 參見德米特里·拜琴科的答案。 如果您的A
所有實例都在同一線程中調用,這沒有問題。
還要注意,如果您的應用程序具有多個AppDomain,則每個AppDomain將具有一個單獨的靜態字段。 因此,無論調用經過哪個實例,它僅計入同一AppDomain中的調用。
是的,它仍將返回訪問B的次數。 它仍然是static
。 添加私有不會更改此設置。 將類設為static
意味着無法為該類實例化對象,因此,該類中的所有內容都必須為static
。 但是該變量的行為仍然相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.