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吗?
不,C#中不允许这样做.编译器使用泛型约束来确定T泛型方法中可用的操作- 因此允许或表达式不是类型安全的.
如果你需要这个,考虑增加涉及的公用部分的接口BaseForm和BaseMainForm,并应用作为通用约束.这样,接口定义了方法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)