使用Or的泛型类型约束
本文关键字:约束 泛型类型 Or 使用 | 更新日期: 2023-09-27 18:02:17
public T CreateForm<T>() where T: BaseForm, BaseMainForm
我知道上面的意思是T是一个BaseForm
和一个BaseMainForm
。但是,是否也有可能使T必须是BaseForm
或 BaseMainForm
的约束呢?
不,c#中不允许这样做。编译器使用泛型约束来确定在泛型方法中T
上可用的操作-因此允许或表达式将不是类型安全的。
如果需要,可以考虑添加一个接口,覆盖BaseForm
和BaseMainForm
的公共部分,并将其应用为通用约束。这样,接口定义了方法CreateForm<T>
需要的契约——你必须确保你传入的Form实现了这个接口。
类似:
public interface IBaseForm
{
Foo();
}
class BaseForm : IBaseForm {}
class BaseMainForm : IBaseForm {}
public T CreateForm<T>() where T : IBaseForm
这是不可能的。
考虑添加接口或基类,让这两个类都实现它,并将其用作类型约束。
不,你需要提取的属性,CreateForm感兴趣的BaseForm和BaseMainForm到一个新的接口,他们都继承,然后你的方法将引用该接口