public class StuffDoer<T>
{
// do stuff
}
我希望这总是字符串类型,所以不要这样做:
StuffDoer<string> stuffer = new StuffDoer<string>();
我希望能够做到这一点:
StuffDoer stuffer = new StuffDoer();
如果我需要一个int类型的StuffDoer,只需用泛型定义它。
StuffDoer<int> stuffer = new StuffDoer<int>();
这可能吗?
答案 0 :(得分:3)
您可以设置一个继承自StuffDoer
的简单StuffDoer<T>
类:
public class StuffDoer : StuffDoer<string>
{
// ...
}
public class StuffDoer<T>
{
// ...
}
答案 1 :(得分:3)
public class StuffDoer<T>
{
// do stuff
}
public class StuffDoer : StuffDoer<string>
{
// do stuff
}
答案 2 :(得分: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()
- 但我认为这是一个更清洁的解决方案。创建一个非泛型派生类就像一种“类型别名”一样,对我来说就像滥用继承一样。