C# partial 关键字详解
2026/6/4 11:29:09 网站建设 项目流程

partial关键字允许将类、结构、接口或方法的定义分散在多个文件中。编译器会在编译时将所有部分合并为一个完整的定义。

主要用途

1.分离关注点(最常见)

Windows Forms、WPF、ASP.NET Core 等框架自动生成代码与用户代码分离:

// Form1.cs - 用户代码 public partial class Form1 : Form { public Form1() { InitializeComponent(); // 调用设计器文件中的方法 } private void button1_Click(object sender, EventArgs e) { MessageBox.Show("Hello"); } } // Form1.Designer.cs - 设计器自动生成代码 partial class Form1 { private Button button1; private void InitializeComponent() { button1 = new Button(); // 初始化代码... } }

2.多开发者协作

不同开发者可以同时修改同一个类的不同部分:

// File1.cs partial class Employee { public string Name { get; set; } public int Age { get; set; } } // File2.cs partial class Employee { public decimal Salary { get; set; } public void DisplayInfo() { Console.WriteLine($"{Name}, {Age}, {Salary}"); } }

3.代码生成器

工具生成的代码不会覆盖手动编写的代码:

// Generated.cs - 自动生成 partial class Customer { public int Id { get; set; } public string Name { get; set; } } // Custom.cs - 手动扩展 partial class Customer { public void Validate() { if (string.IsNullOrEmpty(Name)) throw new Exception("Name required"); } }

实际应用场景

1.扩展自动生成的实体类

// EF Core 生成的实体 public partial class Order { public int OrderId { get; set; } public DateTime OrderDate { get; set; } } // 手动添加业务逻辑 public partial class Order { public bool IsDelivered => OrderDate < DateTime.Now.AddDays(-7); public partial decimal CalculateTax(); // 部分方法声明 } // 在另一个文件中实现 public partial class Order { public partial decimal CalculateTax() { return TotalAmount * 0.1m; } }

2.配合源生成器(Source Generators)

// 标记部分类供源生成器使用 [GenerateRepository] public partial class UserRepository { // 源生成器会自动添加 CRUD 方法 } // 手动添加自定义查询 public partial class UserRepository { public async Task<User> FindByEmailAsync(string email) { // 自定义实现 } }

3.嵌套部分类

partial class OuterClass { partial class InnerClass { public void Method1() { } } } partial class OuterClass { partial class InnerClass { public void Method2() { } } }

对比其他技术

特性partial 类继承扩展方法
访问私有成员
添加新字段
修改现有方法✓(重写)✓(重写)
多文件协作N/A
适用场景代码分离多态扩展添加静态方法

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询