2010-05-27 32 views
8

因此,現在我們在C#中的接口和代理上有了泛型協變和逆變,我只是好奇,如果給定Type,您可以找出其泛型參數的協方差/對立。我開始嘗試編寫自己的實現,它將查看給定類型的所有方法,並查看返回類型和/或參數是否匹配泛型參數中的類型。問題是,即使我有這樣的:用我的邏輯有沒有辦法在C#4.0中確定接口/委託的差異?

public interface IFoo<T> 
{ 
    void DoSomething(T item); 
} 

,它看起來像它應該是逆變,但由於我們實際上並沒有具體說明:

public interface IFoo<in T> 
{ 
    void DoSomething(T item); 
} 

(IN參數)它並不是真正的逆變。這導致我的問題:有沒有辦法確定通用參數的方差?

+0

你爲什麼需要這個? – 2010-05-27 04:20:39

+0

@米奇我會讓你知道,當我知道了:)我只是出於好奇... – BFree 2010-05-27 04:26:14

回答

5

我不知道你爲什麼要這樣做,但是你可以用類型外的反射來看它。下面是關於使用反射的泛型參數的類型前瞻性信息:

http://msdn.microsoft.com/en-us/library/b8ytshk6.aspx

具體來說,在你到Type.GetGenericParameters將揭示的鈷/逆變性呼叫取回型物業Type.GenericParameterAttributes一般的說法......這是一個按位枚舉,這將揭示這些信息的組合:

http://msdn.microsoft.com/en-us/library/system.reflection.genericparameterattributes.aspx

真的很有趣...感謝您問這個,讓我看看它。

+1

正是我在找什麼。另一個有趣的事情是,如果你看看第二個鏈接,它說自從.Net 2.0以後它就受到支持。我想它一直在那裏,因爲其他語言一直支持協變/反變換(我認爲...)。從未注意到...... – BFree 2010-05-27 04:49:37

+0

@BFree:有趣的觀察。我將不得不離開,稍後再研究。 – 2010-05-27 04:50:25

相關問題