C# 什么';使用语句和添加引用之间的区别是什么?
在VisualStudio中,何时必须添加对dll的引用?我总是尽量在我的项目中有最少的参考资料,我尽量只包括那些真正必要的参考资料 如果我的源代码中有C# 什么';使用语句和添加引用之间的区别是什么?,c#,visual-studio,C#,Visual Studio,在VisualStudio中,何时必须添加对dll的引用?我总是尽量在我的项目中有最少的参考资料,我尽量只包括那些真正必要的参考资料 如果我的源代码中有using语句,我会认为我只需要一个引用。但这并不总是足够的 例如,我有一个非常简单的程序,使用系统和Microsoft.Practices.EnterpriseLibrary.Data: using System; using Microsoft.Practices.EnterpriseLibrary.Data; public class S
using
语句,我会认为我只需要一个引用。但这并不总是足够的
例如,我有一个非常简单的程序,使用
系统和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));
}
}
}
}
我想我只需要参考系统和Microsoft.Practices.EnterpriseLibrary.Data。但事实并非如此。如果我不引用System.Data,代码将无法编译
类型
“System.Data.Common.DbCommand”是
在未定义的程序集中定义
参考。您必须添加一个引用
到程序集的System.Data,
版本=2.0.0.0,区域性=中性,
PublicKeyToken=b77a5c561934e089'
我如何事先知道何时必须添加对我未使用的东西的引用?引用告诉编译器在哪里查找要导入的类型。 使用语句告诉编译器在哪里查找“全名” 所以你可以选择任何一种
using System.Text
StringBuilder sb;
// ...
或
但无论哪种方式,您都必须有对System.dll的引用(或者它是StringBuilder的mscorlib?)。如果没有ref,编译器不知道可用的类型。有时您添加的引用依赖于另一个库,因此您必须在引用中包含该库 您必须添加对类所在的程序集的引用,以及任何依赖项,包括
- 来自其他程序集的返回类型(即方法返回
)DbCommand
- 基类或来自其他程序集的接口(即,类派生自
或实现接口)DbCommand
指示您直接引用的命名空间。通常情况下,您需要包含该程序集引用的其他引用
唯一的方法是按照您所做的去做并在错误发生时修复它们,或者检查文档以查看是否列出了程序集所依赖的内容
我不会担心未使用的参考资料。如果未使用它们,则不包括它们。添加引用允许使用该DLL中包含的任何对象或功能
添加引用后,即可使用该功能
using子句有助于缩短代码:您可以在键入时进行保存
例如:
使用System.IO
然后我就可以写了
目录d=[代码在这里]
如果我有参考资料,但没有使用说明,那么我会写
System.IO.Directory d=[代码在这里]
但是您需要引用来定义using语句或从DLL使用该功能
现在,如果您向代码添加一个引用,并且该引用需要另一个DLL,那么在编译时,您将得到一个关于缺少引用的错误。在设计时,它也进行了标记。一些DLL是独立的(不需要其他引用),而另一些DLL则需要多个引用,具体取决于您使用的功能或特性。我认为这种情况下的答案是代码使用的是System.data命名空间中的对象。在您的示例中,var命令是DBCommand。它是一个System.Data参考,而不是System或Microsoft.Practices.EnterpriseLibrary.Data。因此,代码似乎也需要一个命令引用。GetSqlStringCommand返回什么?一个System.Data.dbc命令。看看这个链接。[连结]http://msdn.microsoft.com/en-us/library/microsoft.practices.enterpriselibrary.data.database.getsqlstringcommand(v=pandp.31).aspx这就是为什么您需要对System.Data的引用。1)为了从外部程序集访问类型,您必须在项目中添加对该类型的引用。此引用告诉编译器要在项目中包含的程序集。
2) 但是,导入程序集是可选的。(在C#中,这是通过“使用…”指令完成的)。这告诉编译器在何处查找所使用的类型。如果未包含该名称,则无论何时引用该程序集中的类型,都需要完全限定其名称空间及其名称。
示例:要在控制台程序中使用MessageBox类(Show()方法),必须添加对System.Windows.Forms程序集的引用,然后将其引用为…
如果不导入程序集:
System.Windows.Forms.MessageBox.Show(“Hello”)
如果导入程序集:
MessageBox.Show(“你好”) 这不是问题所在,我不这么认为。他在问为什么“使用system.text”不足以让编译器找到类型。不,这是关于除了您实际使用的程序集之外,还需要引用程序集。好的,这就是为什么理解“使用”的作用可以回答这个问题。如果这些类型又依赖于其他类型,那么您需要引用它们。using语句与查找类型无关。我将您的答案标记为正确答案,因为您还列出了一些示例。我知道我必须引用我使用的DLL功能。问题是为什么有时我不得不添加对我不知道自己正在使用的dll的引用;您可以向Visual Studio项目添加任意多的程序集引用,而不会出现任何问题。我是否应该担心使用
语句会产生不必要的?它们是否会导致引用的dll被包含,即使它们根本不需要?@comecme-否。编译器和链接器应该忽略它们。或者,右键单击using语句并选择“删除未使用的语句”选项。
System.Text.StringBuider sb;
// ...