1

シナリオ:プロジェクトに HttpUtility を追加する必要があり、最初に using ディレクティブのコレクションに「using System.Web」を追加しました。ただし、 HttpUtility クラスはまだ解決されず、プロジェクトへの参照を追加する必要があることを (この質問を介して) 発見しました。

質問:他のほとんどのクラスでは "using" ディレクティブで十分なのに、なぜこのライブラリへの参照を追加する必要があるのですか?

4

9 に答える 9

26

質問: 他のほとんどのクラスでは "using" ステートメントで十分なのに、なぜこのライブラリへの参照を追加する必要があるのですか?

using クラスを含む関連する DLL への参照を常に追加する必要があります

ただし、一部のライブラリはデフォルトでプロジェクトで参照されます。その中で最も重要なのはmscorlib.dll. どうやら今まで使ってきたクラスはすべてこのライブラリにあったようです。

于 2010-04-14T15:36:41.630 に答える
9

Visual Studio は、新しいプロジェクトを作成するときに、多くの一般的な dll への参照を追加するためです。

編集: 明確にするために、ここには名前空間とアセンブリの 2 つの問題があります。名前空間はクラスの論理階層を表し、アセンブリはクラスのコレクションの物理的な「コンテナー」です。アセンブリには複数の名前空間を含めることができ、名前空間は複数のアセンブリにまたがることができます (これはかなり一般的ではありません)。using ディレクティブは、型名を完全に修飾する必要がないことを意味します。たとえば、.List<T>ではなく宣言できますSystem.Collections.Generic.List<T>

Visual Studio は、多くの一般的に使用される名前空間 (System. これらのアセンブリに含まれる名前空間に using ディレクティブを追加すると機能しますが、System.Web などの別のアセンブリに含まれる名前空間を使用する必要がある場合は、名前空間を使用する前に参照を追加する必要があります。解決しました。

于 2010-04-14T15:35:30.527 に答える
7

このusingディレクティブは、構文を単純にするためのものです。つまり、を書く代わりに、モジュールの一番上に をSystem.Web.HttpUtility置いて と書くことができます。ただし、ライブラリへの参照によって、実際にはそのライブラリ内のクラスとメソッドを呼び出すことができます。using System.Web;HttpUtility.MethodName

于 2010-04-14T15:37:27.417 に答える
2

一部の名前空間はアセンブリ全体に分散されているためです。

.NET で最も一般的に使用される名前空間のアセンブリはプロジェクトに自動的に追加されますが、プロジェクトにアセンブリへの参照がまだない場合は、アセンブリ参照を追加する必要があります。

于 2010-04-14T15:35:30.440 に答える
2

アプリケーションで使用するすべての型は、アセンブリにある名前空間にあります。Using ステートメントは、所属する名前空間を指定せずに型を使用することのみを許可します。プロジェクトにアセンブリ参照を追加していない場合、その型は使用できません。複数のアセンブリの参照がデフォルトで各プロジェクトに含まれているという点で、一部の名前空間で using を使用できる理由。

于 2010-04-14T15:35:47.810 に答える
2

using ステートメントは、コードで完全な名前空間を定義する必要をなくすための単なるショートカットです。インスタンス化するクラスを実際に含むライブラリへの参照を追加する必要があります。

名前空間は多くのライブラリに分散されています

于 2010-04-14T15:36:16.623 に答える
2

using System.Webusingステートメントではなく、usingディレクティブです。ただし、これは winform / wpf などのプロジェクトに含まれる標準の dll の 1 つではないため、参照を追加する必要があります。これは、一部には必要になる可能性が低いためであり、一部には「クライアント プロファイル」でサポートされていないためです。System.Web.dll

これは実際にはライブラリ管理の問題です。CLR は巨大です。すべてが欲しいとは限りません。

于 2010-04-14T15:36:23.923 に答える
1

簡単に言えば、「使用」することで、コンパイラは、ファイルをコンパイルする前に、何を取り込む必要があるかを知ることができます。何をプルする必要があるかがわかったら、プルできるようにそれを見つける必要があります。そのため、参照が重要です。

于 2010-04-14T15:36:45.047 に答える
1

Referenceプロジェクトにライブラリを依存関係として追加していることを意味します。System.Webそれは独自のDLLファイルです。

Using参照から名前空間またはクラスをローカルにインポートしていることを意味します。

于 2010-04-14T15:37:34.027 に答える