[英]Generic Type contraints with Or
public T CreateForm<T>() where T: BaseForm, BaseMainForm
我知道上面的意思是 T 是BaseForm
和BaseMainForm
。 但是是否也可以限制 T 必须是BaseForm
或BaseMainForm
?
不,这在 C# 中是不允许的。 编译器使用泛型约束来确定泛型方法中T
上可用的操作 - 因此允许or表达式不是类型安全的。
如果需要,请考虑添加一个涵盖BaseForm
和BaseMainForm
的公共部分的接口,并将其应用为通用约束。 这样,接口定义了CreateForm<T>
方法所需的契约——您必须简单地确保传入的表单实现接口。
就像是:
public interface IBaseForm
{
Foo();
}
class BaseForm : IBaseForm {}
class BaseMainForm : IBaseForm {}
public T CreateForm<T>() where T : IBaseForm
这是不可能的。
考虑添加接口或基础 class,让这两个类都实现它,并将其用作类型约束。
不,您需要将 BaseForm 和 BaseMainForm 的 CreateForm 感兴趣的属性提取到它们都继承自的新接口中,然后您的方法将引用该接口
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.