2010-04-14 42 views
1

场景:我需要将HttpUtility添加到我的项目中,并开始在我的使用指令集中添加“using System.Web”。然而HttpUtility类仍然不能解决,我发现(通过this问题)我需要添加一个对我的项目的引用。Visual Studio C#:为什么某个库的“using”指令不足?

问题:为什么我需要为大多数其他类使用“using”指令就可以添加对该库的引用?

回答

26

问题:为什么我需要为大多数其他类使用“using”语句就可以添加对此库的引用?

using从未就足够了,你总是需要的引用添加到包含类相关的DLL。

但是有些库默认引用了你的项目 - 其中最重要的是mscorlib.dll。显然你到目前为止所用的所有课程都在这个图书馆中。

+0

这很清楚地解释了,谢谢。 – JYelton 2010-04-14 16:47:52

+0

我应该注意到,我已经添加了一些第三方类,我已经参考过,然后添加了前面的语句。当我去使用HttpUtility并且假定它已经可用时,或者单独使用“以某种方式使它解决”时,我总是有一种心理障碍。 – JYelton 2010-04-14 16:55:21

2

因为有些名称空间遍布在程序集中。

.NET中最常用的名称空间的程序集会自动添加到项目中,但如果您的项目尚未引用程序集,则必须添加程序集引用。

+0

感谢您的贡献。 – JYelton 2010-04-14 16:51:57

9

由于Visual Studio在创建新项目时添加了许多常见dll的引用。

编辑:澄清,这里有两个问题 - 名称空间和程序集。名称空间表示类的逻辑层次结构,程序集是类集合的物理“容器”。一个程序集可以包含多个名称空间,并且名称空间可以跨多个程序集传播(尽管这很少见)。使用指令意味着您不必完全限定类型名称,例如您可以声明List<T>而不是System.Collections.Generic.List<T>

Visual Studio在创建包含许多常用名称空间(如System)的新项目时,会添加对各种程序集的引用。如果为这些程序集中包含的名称空间添加using指令,那么它将起作用,但是如果您需要使用包含在不同程序集(如System.Web)中的名称空间,则需要在名称空间可以解决。

+0

因此,一个新的项目将有少数常用的类,其他任何需要您在using语句变得有用之前添加引用? – JYelton 2010-04-14 15:36:17

+1

@JYelton正确。这里有两个概念,命名空间和程序集。一个程序集包含该类,并且该类用名称空间标记。将引用添加到程序集中,其中一些已默认添加,您可以访问该类,例如System.IO.TextWriter。但是,您必须完全限定名称为System.IO.TextWriter的名称空间。为了缩短这个,你添加using语句。所以,使用语句只需要在每次要使用该名称空间中的类时输入“System.IO”即可节省您的时间。 – AaronLS 2010-04-14 15:39:35

+0

@JYelton - 它将有一些常用的* dll *(程序集)。每个dll可以包含大量的类。 – 2010-04-14 15:39:40

2

您在应用程序中使用的任何类型都位于某个组件中的某个名称空间中。使用语句只允许使用类型而不指定它所属的名称空间。如果尚未向项目添加组装引用,则不能使用其类型。默认情况下,每个项目中都包含几个程序集引用中使用某些名称空间的原因。

2

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

命名空间在许多图书馆

2

using System.Web传播是使用指令,而不是使用声明。但是你需要添加一个引用,因为System.Web.dll不是包含在winform/wpf等项目中的标准dll。部分原因是因为不太可能您将需要它,部分原因是它不支持“客户端配置文件”。

这实际上只是一个图书馆管理问题; CLR是巨大的;它并不假定你想要的一切。

+0

这很好,我不想在一些小的实用程序中包含大量的库。这很有道理,谢谢! – JYelton 2010-04-14 16:51:27

1

从根本上说,“使用”可以帮助编译器知道在编译文件之前需要将所有东西拉进来。一旦知道什么需要拉出,就必须找到它,以便拉入。这就是参考文献很重要的原因。

7

using指令仅用于语法简单。即,不必编写System.Web.HttpUtility,您可以将using System.Web;放在模块的顶部,只需编写HttpUtility.MethodName即可。但是,对库的引用实际上允许您调用该库中的类和方法。

+0

+1伟大的探索托马斯! – 2010-04-14 15:41:20

+0

+1借调,这使得这个概念非常清晰。 – JYelton 2010-04-14 16:52:31

1

Reference意味着您要添加一个库作为依赖项到您的项目。 System.Web它是自己的DLL文件。

Using表示您在本地从引用中导入名称空间或类。

相关问题