我有一个抽象类,用于派生许多其他类,每个类都做类似但略有不同的事情。这些类由反射加载并暴露给用户,以选择他需要运行的类。
这是因为基类有一个名为 Run 的抽象方法,它被每个派生类覆盖。因此,在代码中我需要任何这些类型的变量的任何地方,我都将它们声明为基类。然后当我调用 Run 方法时,它会从真实类型执行该方法(即使我将它声明为基类)。
我的问题是我需要为每个派生类显示一个定制的 UI。我想为每个自定义 UserControl。这些控件将有一个 puclic 方法,该方法根据用户对其所做的操作返回一个值。然后我在运行时创建这个控件,用户设置需要什么,我从这个控件调用 return 方法,最后我可以从用户选择的类中将 i 传递给 Run Run 方法并执行它。
我不知道我有多少或哪些派生类,因为用户可以创建从该基类派生的 dll 并将其作为插件附加。
因此,我认为我必须在表单上创建这些自定义控件作为通用 UserControl 类,然后将它们转换为真实类型。但是只有知道控件是从 UserControl 派生的,有没有办法做到这一点?
我可以在基类上创建一个公共属性来存储其自定义控件,但是回到主代码中,我可以将通用用户控件转换为存储在此属性中的类型吗?
另外,这里会是设计问题吗?我可以使用其他方法来做到这一点吗?
我希望这听起来不会很混乱:(