Общий конструктор: T entity = new T (); - PullRequest
3 голосов
/ 09 января 2012

У меня есть следующие классы 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> и имеет функции Добавить, Редактировать и Удалить. Коллекция отображается в элементе управления списком с полями, заполненными посредством отражения с использованием пользовательских атрибутов.

Код для кнопок «Добавить» и «Редактировать» выглядит следующим образом:

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 Ответ

6 голосов
/ 09 января 2012

Если ваш тип содержит конструктор без параметров, вы можете добавить ограничение к универсальному типу T, чтобы разрешить создание экземпляров через этот конструктор без параметров. Для этого добавьте ограничение:

where T : new()

Статья MSDN о Ограничения на параметры типа .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...