【问题标题】:Why is the #include directive not necessary in C#?为什么 C# 中不需要#include 指令?
【发布时间】:2016-12-25 12:19:06
【问题描述】:

为什么 C# 中不需要 #include 指令?这是因为与 C/C++ 预处理器、编译器、链接器等的原始性质相比,C# 具有更发达/包容/限制性的编译过程吗? (即您正在 Visual Studio for C# 中进行开发)。

我只是好奇编译过程如何知道在哪里寻找其他类。

编辑:我意识到您不需要 C# 中的实际 #include 语句,因为那没有意义。但是,我更好奇您的 C# 程序如何在没有任何指示符的情况下知道其他类的存在。 谢谢,

【问题讨论】:

  • 因为您正在编译的所有.cs 文件都为编译器所知,因此它们不必相互包含。文件名直接传递给编译器。在 C++ 中,.cpp 文件实际上是相同的,只是在这种情况下,它是链接器负责将它们放在一起。
  • 直接回答 - C# 不是 C。在编写 C# 时忘记 C,不要问“为什么?” (简单地想象一下您可以问多少这样的问题)。更具体的答案 - C# 不使用 H 文件,不查找 #include 来查找文件等,而是使用项目文件和 using 定义在哪里查找类。更多信息请阅读this,可能会有用。
  • @Sinatr 所以我在 C++ 中使用“using”关键字的经验是它用于类型解析。它在 C# 中似乎很相似。但是,就实际引入代码以使其在您的类中可访问而言,“using”关键字没有任何作用。在 C++ 中,您将使用 #include 指令引入类定义、函数原型等,以通知编译器查找应在某处定义的内容。但是,在 C# 中,IDE 会为您执行此操作吗?因此您不需要#include 指令?
  • 老实说,我不知道 C++ 中的 类型解析 是什么。 using 在 C++ 中是什么并不重要。只有using directive 在 C# 中是什么才重要,对吧?至于using statement,它是另一个C# 的东西,不要试图在你知道的语言中寻找相似之处,只需阅读它是什么并使用它。而且..忘记#include

标签: c# include


【解决方案1】:

C# 也有类似的东西。要使用其他库等中的类,您需要添加对程序集的引用,然后使用 using 关键字后跟引用名称,如下所示:

using System.Collections.Generic

这个示例命名空间可以让我访问Dictionary<TKey, TValue> 等类。

有关参考的更多信息,请参阅here

【讨论】:

  • 您能否扩展“您需要添加对程序集的引用”部分?如果我错了,请纠正我,但您仍然可以在不使用“using”关键字的情况下访问所有这些类,只是您必须完全指定名称(即 System.Colelctions.Generic.Dicitionary) 但是,我对如何让源代码了解其他类感到困惑。您是否通过确保“添加对程序集的引用”来做到这一点?是什么让这个参考? IDE?
  • @Teague - 在 Visual Studio 中的项目下有一个名为“参考”的标题。右键单击它,然后单击“添加引用”。这使您可以添加对包含您要使用的类的程序集的引用。然后 IDE 会为您创建引用。添加后,您不需要添加 using 关键字,您可以使用完全指定的名称,但显然这样更麻烦。
  • 谢谢 sr28。这就是我试图达到的目的。您不需要在 C# 中使用 #include 指令的原因是因为它是由 IDE 中的设置处理的,而不是源文件本身。
  • @Teague - 它与 IDE 无关。如果您从命令行编译,同样适用。
  • @ChrisDunaway 编译器如何知道在哪里查找 .cs 文件?
猜你喜欢
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多