2

Managed Extensibility Framework(MEF)を使用して.Netでプラグイン可能なアーキテクチャを学習しています。ネット上でサンプルコードを見ましたが、それを実装しようとすると、ある時点で行き詰まりました。

コードは以下を使用していました:

 var catalog = new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
 var container = new CompositionContainer(catalog.CreateResolver());

これvarはC#3.0で利用できますが、私はC#2.0でコーディングしています。

上記の2つのステートメントの代替は何ですか?VS 2005を使用してC#2.0でそれらを機能させるにはどうすればよいですか?


私は今このbtを言ってみました

エラー1タイプまたは名前空間名'AttributedAssemblyPartCatalog'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?) C:\ Documents and Settings \ test \ Desktop \ MEFDemo \ MEFDemo \ Program.cs 31 13 MEFDemo

ここで、SystemComponentModel.Compositionへの参照を追加しました

4

6 に答える 6

11

基本的にvar、コンパイラに、変数の「初期化子」に基づいて変数のコンパイル時=の型を決定(推測)させます。事実上、符号から右の式です。ここでタイプは明らかです:

AttributedAssemblyPartCatalog catalog = 
    new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
CompositionContainer container = 
    new CompositionContainer(catalog.CreateResolver());

そして、必ずusing System.ComponentModel.Composition;ステートメントを追加してください。さらに、AttributedAssemblyPartCatalog名前がに変更されたことに注意してAssemblyCatalogください。

于 2009-05-13T08:38:12.703 に答える
1

C#の変数は、依然として強く型付けされています。var暗黙の入力です-MSDNを参照してください

ほとんどの場合、入力する必要が少ないことを意味しますが、必要な場合もあります。リンク先のページの2番目の例では次のようになります。

var結果は匿名型のコレクションであり、その型の名前にはコンパイラ自体以外はアクセスできないため、使用する必要があります。

于 2009-05-13T08:43:03.413 に答える
1

これは、C#3.0での型推論の使用です。

キーワードを使用する場合

var

C#3.0では、コンパイラは型を推測します。スコットガスリーの説明を参照してください

c#2.0では、変数の型をc#1.1と同じように宣言する必要があります。

例えば

Type variableName = new Type();

上記のコード例を作成します

AttributedAssemblyPartCatalog catalog = new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());

CompositionContainer container = new CompositionContainer(catalog.CreateResolver());

HTH

于 2009-05-13T08:47:26.587 に答える
1
AttributedAssemblyPartCatalog catalog = new 
    AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());

CompositionContainer container = new 
    CompositionContainer(catalog.CreateResolver());
于 2009-05-13T08:36:20.723 に答える
0

varはC#3.0キーワードであり、初期化値から強い型を推測する以外に何もしません。

varがない場合は、コンパイラがバックグラウンドで実行していることを手動で実行します。宣言で変数のタイプを指定します。

したがって、

AttributedAssemblyPartCatalog catalog = new 
    AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());

CompositionContainer container = new 
    CompositionContainer(catalog.CreateResolver());
于 2009-05-13T08:41:43.883 に答える
0

MEFはLINQを使用するため、.NET3.5が必要です。.NET2.0で使用しようとしても運がありません。

于 2009-05-13T18:23:32.793 に答える