仅在构造函数中设置类通用值

时间:2012-07-04 12:36:55

标签: c# .net generics

有什么方法可以在构造函数中设置类的泛型类型(T),但不能在声明中设置?

public class Gen<T>
{
}

public class Da
{
}

public class Program
{
    public static Gen<?> gen;

    public static void Main(string[] args)
    {
        gen = new Gen<Da>();
    }
}

2 个答案:

答案 0 :(得分:7)

如果我正确理解您的要求,最简单的方法是使用非通用接口:

interface IGen { }

然后您的通用类可以是:

class Gen<T> : IGen { }

用法是:

IGen objectGen = new Gen<object>();
IGen intGent = new Gen<int>();

答案 1 :(得分:3)

是的,但只能使用非泛型变量,例如object,任何非泛型基类或泛型类实现的任何接口。

public interface Intf {
  void DoSomething();
}

public class Gen<T>: Intf {
  public void DoSomething() {
    // can use the generic stuff here
  }
}

public class Da {

}

public class Program {
    public static Intf gen;
    public static void Main(string[] args) {
        gen = new Gen<Da>();
        gen.DoSomething();
    }
}