2009-11-12 140 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 
}