私は、数十の他のクラスを派生させるために使用される抽象クラスを持っています。各クラスは似ていますが、わずかに異なることを行います。これらのクラスは Reflection によってロードされ、実行する必要があるクラスを選択するためにユーザーに公開されます。
これが機能するのは、基本クラスに、各派生クラスによってオーバーライドされる Run という抽象メソッドがあるためです。したがって、これらの型の変数が必要なコード内のあらゆる場所で、それらを基本クラスとして宣言します。次に、Run メソッドを呼び出すと、実際の型からメソッドが実行されます (基本クラスとして宣言したにもかかわらず)。
私の問題は、これらの派生クラスごとにカスタマイズされた UI を表示する必要があることです。それぞれにカスタム UserControl を作成することを考えました。これらのコントロールには、ユーザーが行ったことに基づいて値を返すパブリック メソッドがあります。次に、実行時にこのコントロールを作成し、ユーザーが必要なものを設定し、このコントロールから return メソッドを呼び出します。最終的に、ユーザーが選択したクラスの Run Run メソッドに i を渡して実行します。
ユーザーはその基本クラスから派生した dll を作成し、それをプラグインとしてアタッチできるため、自分が持っている派生クラスの数や種類がわかりません。
このため、これらのカスタム コントロールをフォーム上にジェネリック UserControl クラスとして作成し、実際の型としてキャストする必要があると思います。しかし、コントロールが UserControl から派生したものであることだけを知る方法はありますか?
基本クラスにパブリック プロパティを作成してそのカスタム コントロールを格納することはできますが、メイン コードに戻ると、汎用ユーザー コントロールをこのプロパティに格納されている型としてキャストできますか?
また、ここで設計上の問題はありますか?それを行うために別のアプローチを使用できますか?
私はそれが非常に混乱しないように聞こえることを願っています:(