聊到partial关键字大家可能会有点陌生,在经常写WPF的开发者中一定见过但是没有主动去使用过这个关键字。那么这里我们就来看看这个关键字除了在WPF的window里使用还有哪些地方可以主动去使用它。
//...using namespace
namespace WpfPartialDemo
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
}
}
该关键字可以拆分一个类、一个结构、一个接口或一个方法的定义到两个或更多的文件中是可能的。每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来。
这里主要讲解partial关键字在类、接口中的应用,在以下几种情况下需要拆分类定义:
处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理。
当使用自动生成的源文件时,你可以添加代码而不需要重新创建源文件。Visual Studio 在创建windows 窗体、Web 服务包装器代码等时会使用这种方法。你可以创建使用这些类的代码,这样就不需要修改由Visual Studio生成的文件。
使用源生成器在类中生成附加功能时。
使用场景:当我们在编码过程当中发现某一个类的实现需要写大量的代码,且因为业务或设计问题不可分割可预见性的知道该类的实现非常臃肿,那么这个时候partial关键字就能派上用场了。接下来我们来看一段代码直观的感受它的作用。
2.1假设需要实现很多内容
public interface IPacket
{
void Head();
void Body();
void Foot();
//...省略其他定义
}
2.2定义实现类
public partial class Packet : IPacket
{
}
2.3定义部分类实现
//Packet-Head.cs
public partial class Packet : IPacket
{
public void Head()
{
Console.WriteLine("Head");
}
}
//Packet-Body.cs
public partial class Packet : IPacket
{
public void Body()
{
Console.WriteLine("Body");
}
}
//Packet-Foot.cs
public partial class Packet : IPacket
{
public void Foot()
{
Console.WriteLine("Foot");
}
}
https://learn.microsoft.com/zh-cn/do.NET/csharp/programming-guide/classes-and-structs/partial-classes-and-methods