与Or的通用类型约束

Ber*_* IT 4 c# generics constraints

public T CreateForm<T>() where T: BaseForm, BaseMainForm
Run Code Online (Sandbox Code Playgroud)

我知道上面的意思是T是a BaseForm a BaseMainForm.但也有可能制定T必须是a BaseForm a 的约束BaseMainForm吗?

dri*_*iis 5

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

如果你需要这个,考虑增加涉及的公用部分的接口BaseFormBaseMainForm,并应用作为通用约束.这样,接口定义了方法CreateForm<T>所需内容的契约- 您必须简单地确保传入的Form实现接口.

就像是:

public interface IBaseForm 
{
    Foo();
}

class BaseForm : IBaseForm {}
class BaseMainForm : IBaseForm {}

public T CreateForm<T>() where T : IBaseForm
Run Code Online (Sandbox Code Playgroud)