小编典典

如何将接口用作 C# 泛型类型约束?

all

有没有办法获得以下函数声明?

public bool Foo<T>() where T : interface;

IE。其中 T 是接口类型(类似于where T : class, 和struct)。

目前我已经解决了:

public bool Foo<T>() where T : IBase;

其中 IBase 被定义为一个空接口,它被我的所有自定义接口继承......不理想,但它应该可以工作......为什么不能定义泛型类型必须是接口?

对于它的价值,我想要这个,因为Foo在需要接口类型的地方进行反射......我可以将它作为普通参数传入并在函数本身中进行必要的检查,但这似乎更安全(而且我假设性能更高一点,因为所有检查都是在编译时完成的)。


阅读 173

收藏
2022-07-28

共1个答案

小编典典

你能做的最接近的(除了你的基本接口方法)是“ where T : class”,意思是引用类型。没有语法来表示“任何接口”。

例如,在 WCF 中,此 (” where T : class”) 用于将客户端限制为服务合同(接口)。

2022-07-28