2016-01-20 210 views
1

我可以这样做:接口的泛型类型约束?

void MyMethod<T>() where T : class { } 

是否有这样的事?

void MyMethod<T>() where T : interface { } 

我不想明确指定接口名称。

另一种方法是,如果typeof(T).IsInterface返回false,我可以传入一个受class约束的参数,但不会像约束一样干净。

+1

这听起来像一个[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)的解决方案 - 你能展示更多关于你正在尝试的东西吗?要通过这样做来解决? –

+0

这种约束的目的是什么? –

+0

[我如何将接口用作C#泛型约束?](http://stackoverflow.com/questions/1096568/how-can-i-use-interface-as-ac-sharp-generic-type -constraint) –

回答

1

这没有意义,因为它不会导致任何限制。

约束class表示类型参数必须是引用类型。

那么什么interface没有明确的接口名称应该限制?

接口本身只是方法/属性的声明,所以约束“某些接口”的字面意思是“有一些声明” - 这是无用的。

+0

你知道吗,你是对的。不能有任何接口的实例,所以没有什么会被传入,只是一个接口。如果我只能删除这个问题。 – oscilatingcretin

+0

所有接口类型都必须是引用类型。 – Servy

+0

答案是错误的:它会将'T'限制为接口类型。因此'MyMethod ()'或'MyMethod >'可以正常工作,而'MyMethod ()'不起作用。 OP是正确的,这个约束在C#中现在不存在。但真正的问题是:这样的功能会非常有用吗?我想不出一个用例。 – Falanwe