2012-11-17 40 views
3

我有一些困惑與此,從與MEF是一種通用類型MyType <,>實際上是一種類型?

出口泛型類型亂搞出現我注意到:

new Dictionary<string,bool>().GetType() == typeof(Dictionary<,>) 
false 
new Dictionary<string,bool>().GetType().GetGenericTypeDefinition() == typeof(Dictionary<,>) 
true 

然而詞典<,>本身不被認爲是「類型」,因爲這實際上會生成編譯錯誤:

new Dictionary<string,bool> as Dictionary<,> 
Type expected 
new Dictionary<string,bool> is Dictionary<,> 
Type expected 

所以我的問題是,是字典<,>實際上是一個類型? .NET處理泛型類型與非泛型類型不同?

現在在MEF我可以一個通用類導出爲

[Export(typeof(MyGenericClass<,>))] 

,這將滿足喜歡

[Import] 
public MyGenericClass<string, long> Instance { get; set; } 

我感到困惑的類型系統的規則在這裏

回答

5

請參閱What exactly is an 「open generic type」。你所指的是所謂的未綁定的泛型類型,並在同一post中進行了解釋。一個未綁定的泛型類型實際上是一種類型,但它只能在typeof()表達式中使用。注意:與C#不同,Java允許表達式如List<?>

相關問題