簡體   English   中英

非靜態類中私有靜態變量的范圍

[英]Scope of private static variable in non static class

我知道,只要應用程序保持運行狀態,靜態屬性就可以保留其值。 非靜態類中的私有靜態字段是否相同

public class A
{
   private static int B;

   public int GetSession()
   {
     return B++;
   }
}

在上述類中,我有一個私有靜態字段。 調用GetSession()方法將提供訪問GetSession()的次數嗎?

由於Bstatic它將在所有會話之間共享 線程安全的(如果兩個會話試圖訪問/ 同步增加嗎?)實施

   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.

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