2014-06-13 28 views
0

在C#中我有兩個類具有一個靜態函數。第一類被定義爲靜態而另一類不是。靜態函數有什麼區別,一個屬於靜態類,另一個不是?

public static class TestClass1 
{ 
    public static string TestFunc() 
    { 
     .... 
    } 
} 

public class TestClass2 
{ 
    public static string TestFunc() 
    { 
     .... 
    } 
} 

我可以調用這些功能

TestClass1.TestFunc(); 
TestClass2.TestFunc(); 

是什麼這兩種類型的使用之間的差異,或者是還有什麼? (這個函數每天被稱爲超過百萬次,我首先關心的是內存和性能)

+1

問題是* not *語言不可知,因爲「靜態類」的概念在C#和Java中有完全不同的含義 - 更不用說其他語言了。 –

+0

使用java,不嵌套的類不能是靜態的,請參閱以下鏈接http://stackoverflow.com/questions/3584113/why-are-you-not-able-to-declare-a-class-as-static -in-java – shin

+0

由於OP使用C#,因此我刪除了Java和語言不可知的標記。 – slim

回答

2

在C#的情況下,沒有功能上的差異,除了只能將static類中的方法聲明爲擴展方法,即具有this SomeType name第一參數。這兩個例子都不試圖在這裏做。除此之外:它們是相同的。

如果您的不期望要創建的任何類型的實例(即它打算成爲工具類),那麼您應該使用static class。這樣做的主要的一點是,它可以防止創建,子類等此前static class,在舊的C#版本,你就必須做:

public abstract class MyType { 
    private MyType() {} 

    // ...methods... 
} 

得到的東西遠程媲美。

1

從靜態類或非靜態類使用靜態函數沒有區別。 (除了Marc Gravell提到的那個)

一個類的屬性'static'表示:'abstract sealed'。這表明這樣的類只包含靜態函數。 我認爲它被認爲是一種更好的編程風格,如果將靜態輔助函數寫入靜態類。

相關問題