2011-09-29 134 views
1

例子:具有靜態方法的靜態類和具有靜態方法的常規類之間有什麼不同?

public class person 
{ 
    public String Name {get;set;} 
} 

public static class FactoryStatic 
{ 
    public static person Create(string name) 
    { 
     return new person() {Name =name}; 
    } 
} 

public class FactoryNoneStatic 
{ 
    public static person Create(string name) 
    { 
     return new person() {Name =name}; 
    } 
} 

我的問題是就是這兩個工廠類之間的差異,以及何時使用它們?

回答

3

對於直接使用,一個Person對象的創建,是沒有區別的。然而

它可以創建的FactoryNoneStatic一個實例,這可能是不可取的。

通過將該類標記爲static,您明確瞭解了您的意圖,並且防止錯誤使用該類。

所以在這種情況下,使用static class FactoryStatic

3

靜態類只能包含靜態成員。所以你不能創建一個靜態類的實例。

+0

剛要清楚,這與Java中的相同聲明有很大不同,對嗎? – corsiKa

+0

我明白那個部分,但是當我們使用第一個而不是第二個時,反之亦然。 – retide

+0

在你的例子中,它沒有區別。 –

1

一個類可以聲明爲靜態,表明它只包含 靜態成員。無法使用new關鍵字創建類的靜態 實例。當程序 或包含該類的名稱空間被加載時,靜態類將被.NET框架公共語言運行時(CLR)自動加載 。

使用靜態類來包含不與 特定對象關聯的方法。例如,創建一組不會影響實例數據的方法並且不會將 關聯到代碼中的特定對象,這是常見的要求。你可以使用一個靜態類 保存這些方法。

靜態類的主要特點是:

它們只包含靜態成員。

它們不能被實例化。

它們被密封。

它們不能包含實例構造函數。

靜態方法,字段,屬性或事件可在類上調用,即使在沒有創建類的實例時也可調用 。如果創建該類的任何實例爲 ,則不能用它們訪問靜態的 成員。只有一個靜態字段和事件副本存在,而靜態方法和屬性只能訪問靜態字段和靜態的事件。靜態成員通常用於表示不響應對象狀態而改變的數據或計算結果;對於 實例,數學庫可能包含計算 正弦和餘弦的靜態方法。

我可能會指出這個錯誤,但如果你有一個靜態類,它通常是因爲一切都在這個類可以是靜態的,而且也從來沒有一個理由來維持它的一個實例。

如果你有一個非靜態類的靜態成員,你仍然要保持該對象的狀態(或至少攜帶它的一個實例),但一些方法,涉及到它可以在不實例化類被稱爲。

1

一般來說不多。將class標記爲static使其顯而易見,它只能有static成員。如果某個班級未被標記爲static,那麼假設存在非靜態成員。

還有一個情況,我所知道的,你必須使用一個static類是擴展方法在static

至於何時使用它們,只允許如果類僅包含靜態成員,然後將class標記爲static以使其明顯。可能會有一些非常小的性能差異,但我認爲它們可以忽略不計。

0

靜態類只能包含靜態成員。另外,使用new關鍵字不可能創建靜態類的實例。

另一方面,即使沒有創建類的實例,靜態方法也可以在類上調用。如果創建了該類的任何實例,則不能使用它們來訪問靜態成員。

0

只是一個靜態類不能被instansiated例如:

public static class StaticClass 
{ 
    public static void Function() 
    { /* */ } 
} 

你不能這樣做:

StaticClass sc = new StaticClass(); 

你會做這樣的:

StaticClass.Function(); 
相關問題