C#中的泛型构造函数

时间:2010-12-08 17:42:14

标签: c# .net

我有以下内容:

GenericClass<T> : Class
{
  T Results {get; protected set;}
  public GenericClass<T> (T results, Int32 id) : base (id)
  {
    Results=results;
  }
  public static GenericClass<T> Something (Int32 id)
  {
   return new GenericClass<T> (i need to pass something like new T?, id); 
  }
}

更新T可以是类型也可以是值,因此对某些类型使用new()是可以的,但是对于值不是。我想这意味着会重新设计一些课程。

这个想法是如何使用构造函数的?例如,是否可以传递类似于新T的东西(虽然它不应该,因为当时不知道T)或者什么是扭曲以避免传递null?

3 个答案:

答案 0 :(得分:3)

这应该有效:

GenericClass<T> : Class where T : new()
{
  T Results {get; protected set;}
  public GenericClass<T> (T results, Int32 id)
  {
    Results=results;
  }
  public GenericClass<T> Something (Int32 id) : this(new T(), id)
  { }
}

答案 1 :(得分:1)

class GenericClass<T> : Class where T : new()
{
  public T Results {get; protected set;}
  public GenericClass (T results, Int32 id) : base (id)
  {
    Results=results;
  }
  public static GenericClass<T> Something (Int32 id)
  {
   return new GenericClass<T> (new T(), id); 
  }
}

答案 2 :(得分:0)

如何使用反射?

public static GenericClass<T> Something (Int32 id)
  {
   return new GenericClass<T> ((T)Activator.CreateInstance(typeof(T)), id); 
  }