gpt4 book ai didi

C# - 编译器如何找到部分类的另一部分?

转载 作者:太空狗 更新时间:2023-10-29 22:09:50 24 4
gpt4 key购买 nike

我正在使用 VS2010 SP1。

在为 C# Form 应用程序创建演示项目后,我的解决方案结构具有以下信息

Form1.cs
Form1.Designer.cs
Form1.resx

// File Form1.cs
namespace WinFormApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}

// File Form1.Designer.cs
namespace WinFormApp
{
partial class Form1
{

private void InitializeComponent()
{
...
}
...
}
}

问题来了我可以看到 Form1 是一个部分类。但是,编译器如何知道在哪里可以找到它的另一部分? *换句话说,文件 Form1.cs 和 Form1.Designer.cs 之间是否存在绑定(bind)? em>* 这里可以看到,另一部分是在Form1.Designer.cs里面定义的。我假设那里有提示,以便编译器可以快速找到部分类的所有实现代码。请指正。

谢谢

最佳答案

C# 编译器是一个“二次通过”编译器。项目系统为编译器提供了项目中所有文件的列表。编译器首先对所有文件进行“顶级”扫描,并建立一个表,其中包含哪些文件包含哪些 namespace 、类型、方法、属性、事件、字段等,但它不会查看方法体。

建立该表后,我们可以使用它对整个程序进行“顶级”检查。那时我们弄清楚哪些部分声明确实是“同一类”。在这个阶段,我们解决了部分性问题,我们解决了基本类型和泛型参数的约束,我们确保所有“重写”方法实际上重写了一个匹配的虚方法,等等。

“顶层”分析完成后,我们才分析方法体。

文件名无关;编译器仅将它们用于错误报告。拥有十几个类和一百个文件以及每个文件中每个类的部分声明是完全合法的。 (尽管实际上请不要这样做;当人们这样做时,它会极大地增加 IDE 的负担,因为我们很难在您输入更改时快速弄清楚一个类的所有成员是什么!)

关于C# - 编译器如何找到部分类的另一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6124798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com