使用语句和添加引用有什么区别

本文关键字:什么 区别 引用 添加 语句 | 更新日期: 2023-09-27 17:58:01

在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));
            }
        }
    }
}

我想我只需要参考系统和Microsoft.Practices.EnterpriseLibrary.Data。但事实并非如此。如果我不引用 System.Data,代码将无法编译。

类型 "System.Data.Common.DbCommand" 是 在未定义的程序集中定义 引用。您必须添加引用 到汇编"系统数据, 版本=2.0.0.0,区域性=中性, 公钥令牌=b77a5c561934e089'。

当我必须添加对我不using的内容的引用时,我怎么能事先知道?

使用语句和添加引用有什么区别

引用告诉编译器在何处查找要导入的类型。使用语句告诉编译器在哪里查找"全名">

所以你可以输入

 using System.Text
 StringBuilder sb; 
 // ...

 System.Text.StringBuider sb;
 // ...

但无论哪种方式,您都必须引用System.dll(或者它是StringBuilder的mscorlib?(。如果没有 ref,编译器就不知道哪些类型可用。

必须添加对类所在的程序集的引用,以及任何依赖项,其中包括

  • 从其他程序集返回类型(即方法返回DbCommand(
  • 基类或接口来自其他程序集(即类派生自DbCommand或实现接口(

1(为了从外部程序集访问类型,您必须在项目中添加对它的引用。 此引用告诉编译器要包含在项目中的程序集。

2( 但是,导入程序集是可选的。(在 C# 中,这是通过"使用..."完成的。指令(。 这会告诉编译器在何处查找所使用的类型。 如果未包含它,则每当从该程序集引用类型时,都需要完全限定其命名空间及其名称。

示例:要在控制台程序中使用 MessageBox 类(Show(( 方法(,您必须添加对 System.Windows.Forms 程序集的引用,然后将其引用为...
如果未导入程序集:
System.Windows.Forms.MessageBox.Show("Hello"(;
如果导入程序集:
MessageBox.Show("Hello"(;

添加引用允许使用该 DLL 中包含的任何对象或功能。

添加引用后,即可使用该功能。

using 子句有助于缩短代码:您可以节省键入时间。

例如:

使用 System.IO;

然后我可以写

目录 d = [代码转到此处]

如果我有参考并且没有使用,那么我会写

System.IO.Directory d = [代码在这里]

但是,您需要引用才能定义 using 语句或从 DLL 使用该功能。

现在,如果添加对代码的引用,并且该引用需要另一个 DLL,则在编译时会收到有关缺少引用的错误。 在设计时,它也进行了标记。 某些 DLL 是独立的(不需要其他引用(,而其他 DLL 需要多个引用,具体取决于您使用的特性或功能。

有时,您添加的引用依赖于另一个库,因此您的引用中必须具有该库。

using指示您直接引用的命名空间。通常情况下,您需要包括程序集引用的其他引用。

唯一的方法是照您所做的操作并在错误发生时修复错误,或者检查文档以查看是否列出了程序集所依赖的内容。

我不会担心未使用的引用。如果它们未使用,则不包括在内。

我认为在这种情况下

的答案是代码正在使用来自 System.data 命名空间的对象。 在您的示例中,var 命令是一个 DBCommand。 它是一个系统.数据参考,不是系统或Microsoft.Practices.EnterpriseLibary.Data。 因此,看起来该代码也需要命令引用。 什么是 GetSqlStringCommand return? A System.Data.DBCommand. 看看这个链接。 [link]http://msdn.microsoft.com/en-us/library/microsoft.practices.enterpriselibrary.data.database.getsqlstringcommand(v=pandp.31(.aspx 这就是为什么您需要引用System.Data的原因。