Man*_*aux 1 .net c# reflection module
我通过强制模块实现一个抽象类来实现我的模块系统,该抽象类包含将由基础应用程序调用的必需方法.现在我想实现每个模块的配置表单.我想过将表单的类型作为模块框架类的属性返回:
public abstract class Module
{
public abstract Type ConfigurationForm { get; }
}
Run Code Online (Sandbox Code Playgroud)
在显示配置表单时,我只是实例化一个这种类型的Form并调用该Show()
方法.
问题是,我想强制模块返回一个类型,它是一个子类System.Windows.Forms.Form
,否则调用会失败.执行此操作的正确方法是什么?
我想过将ConfigurationForm属性封装在另一个属性中,该属性检查它是否继承Form
,但我不认为这是一种干净的方法来实现这一点.
您可以使用泛型类型参数来完成此操作
public abstract class Module<F> where F : Form
{
public Type ConfigurationForm { get { return typeof(F); } }
}
Run Code Online (Sandbox Code Playgroud)
但实际上这可能更有意义:
public abstract class Module
{
public abstract Form CreateConfigurationForm();
}
Run Code Online (Sandbox Code Playgroud)
编辑:使用第二个选项的优点是您可以编写代码来使用Module类,而无需具体了解您正在处理哪种模块