使用语句和添加引用有什么区别?
在Visual Studio中,何时需要添加对dll的引用? 我总是尝试在我的项目中使用最少的引用,我尝试只包括那些非常必要的引用。
如果我在源代码中有一个using
语句,我认为我只需要一个引用。 但这并不总是足够的。
例如,我有一个非常简单的程序,它using
System和Microsoft.Practices.EnterpriseLibrary.Data:
using System; using Microsoft.Practices.EnterpriseLibrary.Data; public class SimpleConnection { private static void Main() { var database = DatabaseFactory.CreateDatabase(); var command = database.GetSqlStringCommand( "select table_name from information_schema.tables"); using (var reader = database.ExecuteReader(command)) { while (reader.Read()) { Console.WriteLine(reader.GetString(0)); } } } }
我想我只需要引用System和Microsoft.Practices.EnterpriseLibrary.Data。 但事实并非如此。 如果我不引用System.Data,代码将无法编译。
“System.Data.Common.DbCommand”类型在未引用的程序集中定义。 您必须添加对程序集’System.Data,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089’的引用。
当我必须添加对我不using
的引用时,我怎么能事先知道?
您必须添加对类所在的程序集的引用,以及包含的所有依赖项
- 从其他程序集返回类型(即一个方法返回一个
DbCommand
) - 基类或来自其他程序集的接口(即,一个类派生自
DbCommand
或实现一个接口)
引用告诉编译器在哪里查找要导入的类型。 使用语句告诉编译器在哪里查找“全名”
所以你可以输入
using System.Text StringBuilder sb; // ...
要么
System.Text.StringBuider sb; // ...
但无论哪种方式,您必须具有对System.dll的引用(或者是StringBuilder的mscorlib?)。 如果没有ref,编译器就不知道可用的类型。
using
指示您直接引用的命名空间。 通常情况下,您需要包含该程序集引用的其他引用。
唯一的方法是执行操作并在发生错误时修复错误,或检查文档以查看是否列出了程序集所依赖的内容。
我不担心未使用的引用。 如果他们没有使用,那么他们就不包括在内。
我认为在这种情况下的答案是代码使用System.data命名空间中的对象。 在您的示例中,var命令是DBCommand。 它是System.Data引用,不是System或Microsoft.Practices.EnterpriseLibary.Data。 所以看起来代码也需要命令引用。 什么是GetSqlStringCommand返回? System.Data.DBCommand。 看看这个链接。 [链接] http://msdn.microsoft.com/en-us/library/microsoft.practices.enterpriselibrary.data.database.getsqlstringcommand(v = pandp.31).aspx这就是你需要对System.Data的引用的原因。
有时,您添加的引用依赖于另一个库,因此您必须在引用中包含该库。
添加引用允许用户使用该DLL中包含的任何对象或function。
添加引用后,即可使用该function。
using子句有助于缩短代码:您可以节省输入。
例如:
使用System.IO;
我可以写
目录d = [代码在这里]
如果我有参考但没有使用,那么我会写
System.IO.Directory d = [代码在这里]
但是您需要引用才能定义using语句或使用DLL中的该function。
现在,如果您添加对代码的引用,并且该引用需要另一个DLL,那么在编译时,您将收到有关缺少引用的错误。 在设计时它也标记出来。 某些DLL是独立的(不需要其他引用),而其他DLL则需要多个引用,具体取决于您使用的function。
1)为了从外部程序集访问类型,您必须在项目中添加对它的引用 。 此引用告诉编译器要在项目中包含哪些程序集。
2)然而, 导入组件是可选的 。 (在C#中,这是通过“using …”指令完成的)。 这告诉编译器在哪里查找使用的类型。 如果未包含它,则无论何时引用该程序集中的类型,都需要完全限定其名称空间及其名称。
示例:要在控制台程序中使用MessageBox类( Show()方法),您必须添加对System.Windows.Forms程序集的引用,然后将其引用为…
如果不导入程序集:
System.Windows.Forms.MessageBox.Show( “你好”);
如果导入程序集:
的MessageBox.show( “你好”);