微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

| 我正在使用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之间是否存在绑定?*在这里,您可以看到,另一部分在Form1.Designer.cs中定义。我认为这里有一些提示,以便编译器可以快速找到部分类的所有实现代码。请纠正我。 谢谢     

解决方法

C#编译器是“两次通过”编译器。项目系统为编译器提供了项目中所有文件的列表。编译器首先对所有文件进行“顶级”扫描,并建立一个表,其中包含哪些名称空间,类型,方法,属性,事件,字段等文件,但不查看方法身体。 建立该表后,我们可以使用它对整个程序进行“顶层”检查。那时我们找出哪些部分声明确实是“同一类”。在此阶段,我们解决了部分性,解决了通用类型的基本类型和约束,并确保所有“覆盖”方法实际上覆盖了匹配的虚拟方法,依此类推。 一旦完成“最高层”分析,我们才分析方法主体。 文件名无关。编译器仅将它们用于错误报告。拥有十二个类和一百个文件以及每个文件中每个类的部分声明是完全合法的。 (尽管请不要实际这样做;当人们做这样的事情时,它会极大地增加IDE的负担,因为在您键入更改时,我们很难快速弄清类的所有成员是什么!)     ,所有文件都发送到编译器,这里没有魔术。     ,不需要文件名。您可能会有
Foo.cs
Bar.cs
。 (并且每个子程序都可以包含多个不同的子类。)编译器将一次性获得所有文件,可以为特定的程序集进行编译-并且仅浏览这些文件。它不会在文件系统中搜寻其他源文件或类似的文件。     ,C#编译器获取所有文件时,将扫描所有文件。如果发现具有相同名称且具有部分修饰符的类,则它将它们识别为同一类并进行汇编和编译。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。