public T CreateForm<T>() where T: BaseForm, BaseMainForm
我知道上面的方法,其中T是BaseForm
和一个BaseMainForm
。但是,是否也可以使T必须是BaseForm
或 a BaseMainForm
?泛型类型约束上还是
public T CreateForm<T>() where T: BaseForm, BaseMainForm
我知道上面的方法,其中T是BaseForm
和一个BaseMainForm
。但是,是否也可以使T必须是BaseForm
或 a BaseMainForm
?泛型类型约束上还是
不,这在C#中是不允许的。编译器使用通用约束来确定在通用方法内的T
上有哪些操作 - 因此允许或表达式不是类型安全的。
如果您需要此操作,请考虑添加一个涵盖公共部分BaseForm
和BaseMainForm
的接口,并将其应用为通用约束。这样,接口定义了方法CreateForm<T>
需要的合约 - 并且您必须确保您传递的表单实现接口。
喜欢的东西:
public interface IBaseForm
{
Foo();
}
class BaseForm : IBaseForm {}
class BaseMainForm : IBaseForm {}
public T CreateForm<T>() where T : IBaseForm
这是不可能的。
考虑添加一个接口或基类,让这两个类都实现它,并将其用作类型约束。
不,你将需要提取的属性,那就是的CreateForm感兴趣的,基本形式和BaseMainForm到一个新的接口,它们都继承,然后你的方法引用接口
清除和快速的答案!感谢名单! –
如果你不控制BaseForm或BaseMainForm,它会变得更加困难,所以不能让它们实现接口。 –