I以下リサイズクラス有する:ジェネリックコンストラクタ:T entity = new T();
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();
は合法ではないようです。
明らかに、同じwhere句内に複数の制約を追加する方法はわかりませんでした。宣言を 'クラスEntityCollectionEditorForm < T >に変更します。System.Windows.Forms.Form T:ICloneable < T >、new(){}'が動作しました。 –
私は記事を読んできましたが、制約を把握することはできません。どんなレイ・マンの説明も感謝されるだろう:)。 –