如何在C#3.5中对泛型方法设置接口约束?

and*_*cci 6 c# generics interface constraints

我希望在C#3.5中实现这样的目标:

public void Register<T>() : where T : interface {}
Run Code Online (Sandbox Code Playgroud)

我可以用类或结构来做,但是如何使用接口呢?

LBu*_*kin 11

如果您要求向特定接口添加约束,那么这很简单:

public void Register<T>( T data ) where T : ISomeInterface
Run Code Online (Sandbox Code Playgroud)

如果您询问某个关键字是否像类或结构一样存在,以限制T的可能类型范围,那么这是不可用的.

虽然你可以写:

public void Register<T>( T data ) where T : class // (or struct)
Run Code Online (Sandbox Code Playgroud)

你不能写:

public void Register<T>( T data ) where T : interface
Run Code Online (Sandbox Code Playgroud)


the*_*oop 5

C# 和 CLR 不支持整体接口约束,尽管您可以将其约束到特定接口(请参阅其他答案)。你能得到的最接近的是“类”,恐怕在运行时使用反射检查类型。为什么首先需要接口约束?