在处理生成的代码文件时,使用partial关键字的重要性是什么?



微软的文档说明了使用partial是一个好主意的一些原因,其中一个处理生成的代码文件。

当使用自动生成的源代码时,可以将代码添加到类中,而不必重新创建源文件。Visual Studio在创建Windows窗体、Web服务包装器代码等时使用这种方法。您可以创建使用这些类的代码,而不必修改由Visual Studio创建的文件。

我理解partial的一般概念,但为什么在生成的文件中包含关键字?

以WinForms为例。

Visual Studio有一个制作表单的GUI编辑器。您可以将工具箱中的东西拖放到网格上。你可以制作按钮、标签和其他东西等等。很时髦的。

现在,在幕后,Visual Studio需要获取GUI信息并将其转换为代码。它生成一个代码文件(如Form1.Designer.cs),这是使您创建的表单可视化所需的代码。

这个代码文件是一个。它有partial关键字。这是关键。这就是要点的意思。

假设这个类没有partial关键字。如何将自定义逻辑添加到表单中?好吧,你不能。您可以用自己的继承类,但这不是一回事。您必须手动修改生成的代码文件,您猜怎么着,每次在GUI表单设计器中进行更改时,该代码文件都会被覆盖。这可一点也不时髦。

所以,这就是为什么你有一个Form1.csForm1.Designer.cs文件。第二个是使用partial关键字生成的文件,第一个是您可以用自己的自定义逻辑扩展文件的地方。

一个文件存放你的材料,一个文件存放VS的材料。您可以编写您的自定义逻辑在一个文件,而不必担心这些变化时,将删除Visual Studio再生时其文件表单布局修改。它们在编译时被合并,因为partial关键字表明它们应该被视为一个大的类,只是来自两个(或更多)文件。

在c#中,您可以将类的定义拆分为多个部分定义。它们可以放在单独的文件中。不像在Java中,每个类都在单个文件中。这个partial也可以在单个文件中工作,所以你可以说:

public partial class Employee
{
public void DoWork()
{
}
}
public partial class Employee
{
public void GoToLunch()
{
}
}

我从来没有这样做过,因为大的类通常是可怕的,所以没有必要把它们分成文件,但是文档提到了一些例子,他们有理由:

拆分类定义有几种情况可取:

  • 在处理大型项目时,将类分散到单独的文件中允许多个程序员同时工作。
  • 当使用自动生成的源代码工作,可以将代码添加到类,而不必重新创建源文件。Visual Studio使用在创建Windows窗体、Web服务包装器代码、等等......您可以创建使用这些类的代码,而无需使用修改Visual Studio创建的文件。
  • 当使用源生成器在类中生成附加功能时。

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/partial-classes-and-methods

最新更新