我最近一直在用 C# 编写脚本来进行统一的模拟,我发现在 C# 中我们可以引用来自不同文件的类而不导入它们有点奇怪。
例如。在python中,如果我们必须在同一个目录中放置文件,我们会做这样的事情
from OtherFile import className
instance = className()
或者如果一切都是一个包,我们可以像这样从父目录导入
from ..utils.mathFunctions import NoiseFunction
在 C# 中,我在不同位置有多个文件,所有文件都在一个父目录下,并且在任何文件中,我可以在任何其他文件中使用任何其他(公共)类,而无需导入或确保它们在同一个目录。
这是怎么发生的?
答案 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# 中,实际上没有要求类需要像它们的文件夹结构一样命名空间。