泛型构造函数:T实体=new T();

本文关键字:new 实体 构造函数 泛型 | 更新日期: 2023-09-27 18:19:51

我有以下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>集合的管理器,具有Add、Edit和Delete功能。集合显示在列表视图控件中,其中的字段通过使用自定义属性的反射填充。

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

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();似乎不合法。

泛型构造函数:T实体=new T();

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

where T : new()

MSDN关于类型参数约束的文章。