0
私のフォーム1には、このメソッドがあります。パラメータを持つ汎用クラス呼び出し
public void ChangeView<T>() where T : Control, new()
{
if (transitionManager1.IsTransition)
{
transitionManager1.EndTransition();
}
transitionManager1.StartTransition(BasePanel);
try
{
T find = Find<T>(BasePanel);
if (find != null)
{
find.BringToFront();
}
else
{
find = new T();
find.Parent = BasePanel;
find.Dock = DockStyle.Fill;
find.BringToFront();
}
}
finally
{
transitionManager1.EndTransition();
}
}
問題は、私は、フォームで次のように私は、メソッドを呼び出す
Form1 f;
public UserC1(Form1 f)
{
InitializeComponent();
this.f = f;
}
の下のようにコンストラクタでいくつかのパラメータを持っているユーザーコントロールの名前userC1からこのメソッドを呼び出すしようとしているときである1
ChangeView<UserC1>();
上記のコードはエラーです。 は、パブリックパラメータの少ないコンストラクタを持つ非抽象型で、ジェネリックのパラメータを使用する必要がありますタイプまたは方法。
この問題はどのように解決できますか。 私はuserC1コンストラクタでそのパラメータが必要です。
'T 'が' UserC1'ならば、 'Change = new T()'は 'ChangeView'でどうするのですか? –
シグネチャに 'new()'を使用して、パラメータのないコンストラクタが明示的に必要です。しかし、それを削除すると、異なる署名を持つコンストラクタをどのように呼び出すと思いますか?あなたはそれをどのように知っていますか? 'Foo'にはパラメータのないコンストラクタがありますが、' Bar'にはparamsが必要ですか?あなたはすることはできません、そして、今あなたは一般的な機能を持っていません。親フォームへの参照が必要な場合はなぜ 'Control.Parent'を使用しないのですか? –