1

场景:我需要将 HttpUtility 添加到我的项目中,我首先将“using System.Web”添加到我的 using 指令集合中。但是 HttpUtility 类仍然无法解决,我发现(通过这个问题)我需要添加对我的项目的引用。

问题:对于大多数其他类来说,“使用”指令就足够了,为什么我需要添加对这个库的引用?

4

9 回答 9

26

问题:对于大多数其他类来说,“使用”语句就足够了,为什么我需要添加对这个库的引用?

using 永远不够,您总是需要添加对包含该类的相关 DLL 的引用。

但是默认情况下,您的项目中会引用一些库——其中最重要的是mscorlib.dll. 显然,到目前为止您使用的所有类都在这个库中。

于 2010-04-14T15:36:41.630 回答
9

因为 Visual Studio 在创建新项目时会添加对许多常见 dll 的引用。

编辑:为了澄清,这里有两个问题 - 命名空间和程序集。命名空间表示类的逻辑层次结构,程序集是类集合的物理“容器”。一个程序集可以包含多个命名空间,并且一个命名空间可以分布在多个程序集中(尽管这种情况相当少见)。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 with some namespaces,是因为默认情况下,每个项目中都包含多个程序集的引用。

于 2010-04-14T15:35:47.810 回答
2

using 语句只是消除在代码中定义完整命名空间的需要的快捷方式,您需要添加对实际包含要实例化的类的库的引用。

命名空间分布在许多库中

于 2010-04-14T15:36:16.623 回答
2

using System.Web是 using指令,而不是 using语句。但是您需要添加参考,因为System.Web.dll它不是 winform / wpf 等项目中包含的标准 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 回答