繁体   English   中英

带有 Or 的泛型类型约束

[英]Generic Type contraints with Or

public T CreateForm<T>() where T: BaseForm, BaseMainForm

我知道上面的意思是 T 是BaseFormBaseMainForm 但是是否也可以限制 T 必须是BaseFormBaseMainForm

不,这在 C# 中是不允许的。 编译器使用泛型约束来确定泛型方法中T上可用的操作 - 因此允许or表达式不是类型安全的。

如果需要,请考虑添加一个涵盖BaseFormBaseMainForm的公共部分的接口,并将其应用为通用约束。 这样,接口定义了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM