C# 将类型变量的值强制为特殊基类型
我通过强制模块实现一个抽象类来实现我的模块系统,该抽象类包含基础应用程序将调用的强制方法。现在我想为每个模块实现一个配置表单。我考虑将表单类型作为模块骨架类的属性返回:C# 将类型变量的值强制为特殊基类型,c#,.net,reflection,module,C#,.net,Reflection,Module,我通过强制模块实现一个抽象类来实现我的模块系统,该抽象类包含基础应用程序将调用的强制方法。现在我想为每个模块实现一个配置表单。我考虑将表单类型作为模块骨架类的属性返回: public abstract class Module { public abstract Type ConfigurationForm { get; } } 显示配置表单时,我只需实例化这种类型的表单并调用Show()方法 问题是,我想强制模块返回一个类型,该类型是System.Windows.Forms.Form
public abstract class Module
{
public abstract Type ConfigurationForm { get; }
}
显示配置表单时,我只需实例化这种类型的表单并调用Show()
方法
问题是,我想强制模块返回一个类型,该类型是System.Windows.Forms.Form
的子类,否则调用将失败。实施这一点的正确方法是什么
我曾考虑将ConfigurationForm属性封装在另一个属性中,该属性检查它是否继承自
表单
,但我认为这不是一种干净的方法来实现这一点。您可以使用泛型类型参数来实现这一点
public abstract class Module<F> where F : Form
{
public Type ConfigurationForm { get { return typeof(F); } }
}
编辑:使用第二个选项的优点是,您可以编写代码来处理模块类,而无需知道您正在处理的是哪种类型的模块
public abstract class Module<F> where F : Form
{
public Type ConfigurationForm { get { return typeof(F); } }
}
编辑:使用第二个选项的优点是,您可以编写代码来处理模块类,而无需具体知道您要处理的是哪种类型的模块无法限制函数返回
类型
,它表示从表单
继承的类型。您可以做什么来直接返回表单:
public abstract Form CreateConfigurationForm();
或工厂方法(或工厂类):
公共抽象函数ConfigurationFormCreator();
另一种选择是使用泛型,正如erash所建议的。没有办法限制函数返回
类型,它表示从表单继承的类型。您可以做什么来直接返回表单:
public abstract Form CreateConfigurationForm();
或工厂方法(或工厂类):
公共抽象函数ConfigurationFormCreator();
另一种选择是使用泛型,正如erash所建议的。是否有任何原因导致ConfigurationForm
属性不能使用表单的返回类型
?配置表单的类型因模块而异,因为它是从表单
继承的。或者您的意思是我应该在模块代码中实例化表单本身吗?ConfigurationForm
属性是否有任何原因不能使用form
的返回类型?配置表单的类型因模块而异,因为它继承自form
。或者你的意思是我应该在模块代码中实例化表单本身吗?是的,当然!不知道为什么我想在模块外创建表单的实例。。。谢谢你!是的,当然!不知道为什么我想在模块外创建表单的实例。。。谢谢你!