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

com*_*cme 17 c# visual-studio

在Visual Studio中,何时需要添加对dll的引用?我总是尝试在我的项目中使用最少的引用,我尝试只包括那些非常必要的引用.

如果我using在源代码中有声明,我认为我只需要一个引用.但这并不总是足够的.

例如,我有一个非常简单的程序,即usingSystem和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));
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

"System.Data.Common.DbCommand"类型在未引用的程序集中定义.您必须添加对程序集'System.Data,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的引用.

当我必须添加对某些我不是的引用时,我怎么能事先知道using

Mic*_*edy 14

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

所以你可以输入

 using System.Text

 StringBuilder sb; 
 // ...
Run Code Online (Sandbox Code Playgroud)

要么

 System.Text.StringBuider sb;
 // ...
Run Code Online (Sandbox Code Playgroud)

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

  • 不,除了你实际使用的那个之外,还需要引用程序集. (2认同)
  • 好的,所以这就是为什么理解“使用”会为他回答这个问题的原因。如果这些类型又依赖于其他类型,则需要引用它们。using语句与查找类型无关。 (2认同)

Fem*_*ref 7

您必须添加对类所在的程序集的引用,以及包含的所有依赖项

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


小智 5

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

2)但是,导入程序集是可选的。(在 C# 中,这是通过“使用...”指令完成的)。这告诉编译器去哪里寻找使用的类型。如果未包含它,则无论何时从该程序集中引用该类型,都需要完全限定其命名空间及其名称。

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