是否可以定义默认的泛型类型?

时间:2009-11-12 10:53:26

标签: .net generics

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

我希望这总是字符串类型,所以不要这样做:

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

我希望能够做到这一点:

StuffDoer stuffer = new StuffDoer();

如果我需要一个int类型的StuffDoer,只需用泛型定义它。

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

这可能吗?

3 个答案:

答案 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() - 但我认为这是一个更清洁的解决方案。创建一个非泛型派生类就像一种“类型别名”一样,对我来说就像滥用继承一样。