一尘不染

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

c#

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

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

即。其中T是接口类型(类似于where T : classstruct)。

目前,我已经满足:

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

IBase被定义为一个空接口,所有我的自定义接口都继承了该接口。。。不是很理想,但是应该可以使用。。。为什么不能定义泛型类型必须是接口?

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


阅读 299

收藏
2020-05-19

共1个答案

一尘不染

您可以执行的最接近的操作(基本接口方法除外)是“ where T : class”,表示引用类型。没有语法表示“任何接口”。

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

2020-05-19