2012-05-10 94 views
1

我可以避免初始化嗎?無構造函數的類可以在沒有實例化的情況下調用它們的方法嗎?

我有一個簡單的工廠沒有構造函數。我用這樣的:

var slf = new GenericSelectListFactory(); 
vm.Works = slf.getWorkgsl(0); 
vm.Cars = slf.getCargsl(0); 

我也可以用這樣的:

vm.Cars = new GenericSelectListFactory().getCargsl(0); 

有什麼辦法來使用它沒有新的關鍵字?

vm.Cars = GenericSelectListFactory.getCargsl(0); 
+13

如果你不想/需要一個實例,爲什麼不使用方法'static'? – dtb

+3

如果你只計劃使用靜態成員,那麼使類爲'static'也是有意義的。 –

+1

另請注意,「構造函數」類和「無狀態」類有區別。只有靜態類沒有構造函數,非靜態類具有由編譯器生成的隱式構造函數。 – zneak

回答

8

使您的類的方法爲靜態。

class GenericSelectListFactory 
{ 
    public static List<Cars> getCargsl() 
    { 
     // your logic here 
    } 

} 
+0

這允許調用:'var cars = GenericSelectListFactory.getCargsl();'。謝謝 :) –

4

不「新」,你應該標記方法靜態

2

可以使功能是靜態的。

3

沒有構造函數的類是由編譯器分配一個默認的構造,主要是爲了消除空的構造函數需要:

除非類是靜態的,類沒有構造函數給出一個公共的默認構造函數由C#編譯器爲了啓用類實例化。

如果您想要在不初始化類的情況下訪問方法,請使用方法static。儘管如此,你應該確保這些方法是線程安全的。

相關問題