基于Arduino与超声波传感器的铁路信号灯仿真系统设计与实现
2026/6/4 12:27:57
partial关键字允许将类、结构、接口或方法的定义分散在多个文件中。编译器会在编译时将所有部分合并为一个完整的定义。
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(); // 初始化代码... } }不同开发者可以同时修改同一个类的不同部分:
// 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}"); } }工具生成的代码不会覆盖手动编写的代码:
// 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"); } }// 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; } }// 标记部分类供源生成器使用 [GenerateRepository] public partial class UserRepository { // 源生成器会自动添加 CRUD 方法 } // 手动添加自定义查询 public partial class UserRepository { public async Task<User> FindByEmailAsync(string email) { // 自定义实现 } }partial class OuterClass { partial class InnerClass { public void Method1() { } } } partial class OuterClass { partial class InnerClass { public void Method2() { } } }| 特性 | partial 类 | 继承 | 扩展方法 |
|---|---|---|---|
| 访问私有成员 | ✓ | ✗ | ✗ |
| 添加新字段 | ✓ | ✓ | ✗ |
| 修改现有方法 | ✓(重写) | ✓(重写) | ✗ |
| 多文件协作 | ✓ | N/A | ✓ |
| 适用场景 | 代码分离 | 多态扩展 | 添加静态方法 |