2009-11-12 104 views
0
public class StuffDoer<T> 
{ 
    // do stuff 
} 

我想,這是字符串類型始終,所以不是這樣:是否可以定義默認泛型類型?

StuffDoer<string> stuffer = new StuffDoer<string>(); 

我希望能夠做到這一點:

StuffDoer stuffer = new StuffDoer(); 

,如果我需要一個StuffDoer int類型,只需用泛型來定義。

StuffDoer<int> stuffer = new StuffDoer<int>(); 

這可能嗎?

回答

3

而不是使用子那裏沒有真正的專業化的時候,我會建議使用一個單獨的靜態「工廠」類:

public static class StuffDoer 
{ 
    public static StuffDoer<string> Create() 
    { 
     return new StuffDoer<string>(); 
    } 

    public static StuffDoer<T> Create<T>() 
    { 
     return new StuffDoer<T>(); 
    } 


    public static StuffDoer<T> Create<T>(T item) 
    { 
     StuffDoer<T> ret = new StuffDoer<T>(); 
     ret.Add(item); // Or whatever 
     return ret; 
    } 
} 

最後一種方法讓你使用類型推斷,以及:

StuffDoer<int> doer = StuffDoer.Create(10); 

這不讓你寫new StuffDoer()誠然 - 但我認爲這是一個更乾淨的解決方案。創建一個非泛型派生類就像是一種「類型別名」,感覺就像是對我的繼承濫用。

+0

繼承的方法確實看起來不錯,但這可能確實更好,因爲它更傾向於隱藏而不是真正的繼承 – Natrium 2009-11-12 11:06:13

3

你可以設置一個普通StuffDoer類,從StuffDoer<T>繼承:

public class StuffDoer : StuffDoer<string> 
{ 
    // ... 
} 

public class StuffDoer<T> 
{ 
    // ... 
} 
+1

我覺得我的吸引力更強! – 2009-11-12 10:56:38

3
public class StuffDoer<T> 
{ 
    // do stuff 
} 

public class StuffDoer : StuffDoer<string> 
{ 
    // do stuff 
} 
相關問題