在java 中我可以创建一个带有以下签名的方法:
public <E extends Form> E makeForm(Class<E> formType) {
//return new instance of formType
}
将类传递给受约束的方法,并返回该泛型类型的实例。通过这种方式,您可以执行以下操作:
makeForm(SomeForm.class).specificSomeFormMethod();
如何在C#中执行?从我到目前为止发现的情况来看,这是不可能的? 我可以为表单实例创建类型参数的泛型类型,但不能同时为两者,我也不知道如何将Type参数约束为特定类。
我不太清楚如何标记这个,所以这也许是我的问题。也许我会过度思考它?我需要另一个人的观点!
答案 0 :(得分:4)
我认为你的意思是你想要泛型类型约束:
public E MakeForm<E>() where E : Form { }
where
表示类型约束的开始。这里它表示E
应该来自Form
。
你这样称呼它:
MyFormType form = MakeForm<MyFormType>();
如果你只有这种类型,那么你可以使用它:
public Form MakeForm(Type formType)
{
return Activator.CreateInstance(formType) as Form;
}
Form form = MakeForm(typeof(MyFormType));
答案 1 :(得分:2)
您可以使用允许调用泛型类型的默认构造函数的new() type constraint。
public class MakeForm<E> where E : FormType, new()
{
// Method which returns a new E
public E MakeForm()
{
return new E(); // this works because of the new() constraint
}
}