通用构造函数:T entity = new T();

时间:2012-01-09 09:41:03

标签: c# generics constructor constraints

我有以下winforms类:

class EntityEditorForm<T>: System.Windows.Forms.Form 
                              where T: ICloneable<T> {}

class EntityCollectionEditorForm<T> : System.Windows.Forms.Form 
                                      where T: ICloneable<T> {}

第一个表单类是<T>的编辑器,它根据T的类型在运行时创建控件。

第二个是<T>集合的经理,并具有添加,编辑和删除功能。该集合显示在listview控件中,其中使用自定义属性通过反射填充字段。

“添加”和“编辑”按钮的代码如下所示:

private void buttonEdit_Click (object sender, System.EventArgs e)  
{  
   T entity = default(T);  
   entity = (T) this.listView.SelectedItems[0].Tag;  
   new EntityEditor<T>(entity).ShowDialog(this);  
}

private void buttonEdit_Click (object sender, System.EventArgs e)  
{  
   T entity = new T();   //This is the code which is causing issues 
   entity = (T) this.listView.SelectedItems[0].Tag;  
   new EntityEditor<T>(entity).ShowDialog(this);  
}

default(T)适用于编辑,但我遇到了添加方案的问题。 T entity = new T();似乎不合法。

1 个答案:

答案 0 :(得分:6)

如果您的类型包含无参数构造函数,则可以在泛型类型T上添加约束,以允许通过此无参数构造函数进行实例化。为此,请添加约束:

where T : new()

关于Constraints on Type Parameters的MSDN文章。