3

MEFでジェネリック型をエクスポートすることをいじり回したことから生じた、これにはいくつかの混乱があります

私は気づきました:

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

ただし、Dictionary<,> 自体は「型」とは見なされません。これは実際にコンパイル エラーを生成するためです。

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

私の質問は、Dictionary<,> は実際には型ですか? .NET はジェネリック型を非ジェネリック型とは異なる方法で扱いますか?

MEFでは、ジェネリッククラスを次のようにエクスポートできます

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

そして、これは次のようなインポート要件を満たします

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

ここで型システムのルールについて混乱しています

4

2 に答える 2

5

「オープンジェネリック型」とは正確には何ですか</a>を参照してください。あなたが参照しているのは、バインドされていないジェネリック型と呼ばれ、同じ投稿で説明されています。バインドされていないジェネリック型は実際には型ですが、typeof()式内でのみ使用できます。注: C# とは異なり、Java では のような式を使用できますList<?>

于 2012-11-17T18:52:03.510 に答える
0

はい、MyType<,> は型です。これは「オープン ジェネリック」型です。.NET の「オープン ジェネリック型」とは正確には何ですか?を参照してください。

于 2012-11-17T18:50:25.603 に答える