C#如何将多个文件编译在一起?

时间:2020-12-28 17:45:33

标签: c# compilation

我最近一直在用 C# 编写脚本来进行统一的模拟,我发现在 C# 中我们可以引用来自不同文件的类而不导入它们有点奇怪。

例如。在python中,如果我们必须在同一个目录中放置文件,我们会做这样的事情

from OtherFile import className
instance = className()

或者如果一切都是一个包,我们可以像这样从父目录导入

from ..utils.mathFunctions import NoiseFunction

在 C# 中,我在不同位置有多个文件,所有文件都在一个父目录下,并且在任何文件中,我可以在任何其他文件中使用任何其他(公共)类,而无需导入或确保它们在同一个目录。

这是怎么发生的?

2 个答案:

答案 0 :(得分:4)

调用编译器时,多个源文件(或包含它们的目录)作为命令行参数提供。您可以手动执行此操作,也可以提供包含源文件名称的项目文件。

所以编译器知道源文件。在谈论“导入”文件时,我们谈论的是在 C# 中引用命名空间。但是命名空间甚至类可以跨越多个源文件,您在代码中引用的内容与包含更多代码的文件之间没有 1:1 的关系。

如果您想在项目中包含库(第 3 方代码),则必须在项目文件中引用它们,然后才能使用它们。此外,您还必须在代码中引用它们的命名空间。两者也适用于 Microsoft 提供的一些程序集,即使在众所周知的 System[...] 命名空间中。

引用命名空间通常通过在代码文件的开头放置 using 语句来完成。另一种方法是在您使用它的地方引用命名空间。

// Option 1, using the using statement:
using System;
namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}
// Option 2, without using statement:
namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Console.WriteLine("Hello World!");
        }
    }
}

答案 1 :(得分:0)

您想知道的文件可能在同一个 namespace 中。许多面向对象的语言使用命名空间来控制类声明的范围。

需要注意的是,文件夹结构并不是您可以“仅使用它们”的真正原因。它们恰好具有相同的命名空间。在 C# 中,实际上没有要求类需要像它们的文件夹结构一样命名空间。