2011-08-22 54 views
1

我來自obj-c背景,看着一些C#代碼。在窗口中的部分子類,我認爲這在代碼的頂部:C#中的私有靜態成員變量

public partial class MyMessage : Window 
{ 
    private static object _messageLock = new object(); 
    private static MyMessage _f = new MyMessage(); 

在這些類型的成員變量的用途是什麼?我知道你可以爲一個類創建一個靜態變量,這樣它就可以用於整個類(典型的例子是一些int count變量,每次類實例化時都會增加,以便跟蹤該類的多少個對象被實例化)。在這種情況下,我不確定它是什麼意思。

謝謝。

+0

該類的構造函數是什麼樣的 - 這是一個單例實現嗎? – Dave

+0

你確定它有任何意義嗎?可能只是執行不力的代碼。不知道應用程序在做什麼的更多信息很難說,但我沒有看到爲什麼應該聲明這些應用程序是靜態的。 –

回答

2
private static object _messageLock = new object(); 
private static MyMessage _f = new MyMessage(); 

這看起來像類創建MyMessage類型的辛格爾頓,然後使用上messageLock變量的鎖控制訪問了 - 很難驗證,雖然沒有完整的代碼。

0

那麼我可以回答第一個成員的用途。這是用於創建線程lock。一個用於標記哪個線程當前持有鎖並可以開展業務的對象。我想第二個成員是用於線程,但沒有其他代碼很難回答。

所以這兩個成員是privat靜態的,這意味着只有這些變量的一個實例,不管有多少個MyMessage對象被創建,並且只能在MyMessage實例中訪問。

0

看來MyMessage是一個單獨的類,它在內部管理稱爲_f私有變量,它實際上是單實例

而且從名字上就猜測_messageLocklock語句中使用,以保護關鍵代碼段,(如在多線程應用程序),如:

lock(_messageLock) 
{ 
     //critical section 
} 

看一看:lock Statement (C# Reference) at MSDN

0

這些靜態成員變量存儲的範圍是可用於從該類創建的每個對象的東西 - 因此一個變量在0與多個對象之間共享。這些是私人的,所以他們只能在課堂上進行編碼。

的_messageLock看起來像它可能意在鎖定()語句中使用的對象,在類的地方有可能是:

lock(_messageLock) 
    { 
    // some code 
    } 

或者somethign使用線程安全鎖的一些其他形式。這是爲了創建某種形式的代碼的'單線程'部分。

結合靜態MyMessage - 我猜這是一種單身。在這裏討論了許多不同的C#單例模式MSDN article

0

我想你所要求的僅僅是'什麼是靜態字段',而不是像'其他人'似的,'在這裏做什麼特定的私有靜態字段'在回答。

一個私有靜態成員變量,例如你的例子中的變量是私有成員變量,可以被該類的ANY對象訪問。您創建的任何實例MyMessage將能夠訪問這些成員變量。