综述
partial关键字允许我们将一个类、结构体、接口或方法的定义分散到多个源文件中。
partial关键字允许创建的源文件数量没有硬性限制,只要它们:
- 在同一个程序集中
- 在同一个命名空间下
- 具有相同的可访问性
【注意事项】
1)如果是泛型分部类,必须具有相同的类型参数
2)分部方法必须返回void
3)分部方法不能有访问修饰符
Easy Example Code
类的分部定义如下
// File1.cs
public partial class Customer
{
public string Name { get; set; }
public string Email { get; set; }
public void SendEmail()
{
// 发送邮件逻辑
}
}
// File2.cs
public partial class Customer
{
public string Address { get; set; }
public string Phone { get; set; }
public void UpdateAddress()
{
// 更新地址逻辑
}
}
分部方法如下
public partial class Order
{
// 声明分部方法(只有声明,没有实现)
partial void OnOrderProcessing();
partial void ValidateOrder();
public void ProcessOrder()
{
ValidateOrder(); // 如果没有实现,这个调用会被编译器移除
OnOrderProcessing(); // 如果没有实现,这个调用会被编译器移除
// 处理订单
}
}
// 在另一个文件中实现分部方法
public partial class Order
{
// 实现分部方法
partial void OnOrderProcessing()
{
Console.WriteLine("订单正在处理中...");
}
partial void ValidateOrder()
{
// 验证订单逻辑
}
}
结构体的分部定义如下
// File1.cs
public partial struct Point
{
public int X { get; set; }
public void SetX(int x) { X = x; }
}
// File2.cs
public partial struct Point
{
public int Y { get; set; }
public void SetY(int y) { Y = y; }
}
接口的分部定义如下
// File1.cs
public partial interface IRepository
{
void Save();
void Delete();
}
// File2.cs
public partial interface IRepository
{
void Update();
void Select();
}
分部类的继承如下
- 只需在一个partial部分声明继承
- 通常在主要的partial文件中声明
- 其他partial部分会自动共享继承关系
// BaseClass.cs
public class BaseClass
{
public virtual void BaseMethod() { }
}
// DerivedClass_Part1.cs
public partial class DerivedClass : BaseClass
{
public override void BaseMethod()
{
// 重写基类方法
}
}
// DerivedClass_Part2.cs
public partial class DerivedClass
{
public void DerivedMethod()
{
// 派生类方法
}
}
泛型分部类如下
// Part1.cs
public partial class GenericClass<T>
{
public T Data { get; set; }
}
// Part2.cs
public partial class GenericClass<T>
{
public void ProcessData(T data)
{
Data = data;
}
}