39 lines
2.5 KiB
Markdown
39 lines
2.5 KiB
Markdown
![]() |
#unity/日常积累
|
|||
|
|
|||
|
拆分一个[类](https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/class)、一个[结构](https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/struct)、一个[接口](https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/interface)或一个方法的定义到两个或更多的文件中是可能的。 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来。
|
|||
|
|
|||
|
[](https://learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/partial-classes-and-methods#partial-classes)
|
|||
|
|
|||
|
## 分部类
|
|||
|
|
|||
|
在以下几种情况下需要拆分类定义:
|
|||
|
|
|||
|
- 处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理。
|
|||
|
- 当使用自动生成的源文件时,你可以添加代码而不需要重新创建源文件。 Visual Studio 在创建Windows 窗体、Web 服务包装器代码等时会使用这种方法。 你可以创建使用这些类的代码,这样就不需要修改由Visual Studio生成的文件。
|
|||
|
- 使用[源生成器](https://learn.microsoft.com/zh-cn/dotnet/csharp/roslyn-sdk/source-generators-overview)在类中生成附加功能时。
|
|||
|
|
|||
|
若要拆分类定义,请使用 [partial](https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/partial-type) 关键字修饰符,如下所示:
|
|||
|
|
|||
|
``` cs
|
|||
|
public partial class Employee
|
|||
|
{
|
|||
|
public void DoWork()
|
|||
|
{
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public partial class Employee
|
|||
|
{
|
|||
|
public void GoToLunch()
|
|||
|
{
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
`partial` 关键字指示可在命名空间中定义该类、结构或接口的其他部分。 所有部分都必须使用 `partial` 关键字。 在编译时,各个部分都必须可用来形成最终的类型。 各个部分必须具有相同的可访问性,如 `public`、`private` 等。
|
|||
|
|
|||
|
如果将任意部分声明为抽象的,则整个类型都被视为抽象的。 如果将任意部分声明为密封的,则整个类型都被视为密封的。 如果任意部分声明基类型,则整个类型都将继承该类。
|
|||
|
|
|||
|
指定基类的所有部分必须一致,但忽略基类的部分仍继承该基类型。 各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口。 在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用。 最终类型是所有部分在编译时的组合。
|
|||
|
|
|||
|
`partial` 修饰符不可用于委托或枚举声明中。
|