2016-01-20 245 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