public T CreateForm<T>() where T: BaseForm, BaseMainForm
我知道以上意味着T是BaseForm
和 a BaseMainForm
。但是,是否也可以制定T必须是BaseForm
或 a BaseMainForm
的约束?
答案 0 :(得分:5)
不,C#中不允许这样做。编译器使用泛型约束来确定泛型方法中T
上可用的操作 - 因此允许或表达式不是类型安全的。
如果您需要此功能,请考虑添加涵盖BaseForm
和BaseMainForm
公共部分的界面,并将其应用为通用约束。这样,接口定义了方法CreateForm<T>
所需内容的契约 - 您必须确保传入的Form实现接口。
类似的东西:
public interface IBaseForm
{
Foo();
}
class BaseForm : IBaseForm {}
class BaseMainForm : IBaseForm {}
public T CreateForm<T>() where T : IBaseForm
答案 1 :(得分:0)
这是不可能的。
考虑添加接口或基类,让这两个类实现它,并将其用作类型约束。
答案 2 :(得分:0)
不,您需要将BaseForm和BaseMainForm中的CreateForm感兴趣的属性提取到它们都继承的新接口中,然后您的方法将引用该接口