C#partial关键字

发布于:2025-04-09 ⋅ 阅读:(34) ⋅ 点赞:(0)

综述

partial关键字允许我们将一个结构体接口方法的定义分散到多个源文件中。

partial关键字允许创建的源文件数量没有硬性限制,只要它们:

  1. 在同一个程序集中
  2. 在同一个命名空间下
  3. 具有相同的可访问性 

【注意事项】

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;  
    }  
}  


网站公告

今日签到

点亮在社区的每一天
去签到