C# 部分类 partial class

在 C# 中,您可以使用 partial 关键字在多个 .cs 文件中拆分类、结构、方法或接口的实现。 编译程序时,编译器将合并来自多个 .cs 文件的所有实现。

考虑以下包含 Employee 类的 EmployeeProps.cs 和 EmployeeMethods.cs 文件。

EmployeeProps.cs

public partial class Employee
{
    public int EmpId { get; set; }
    public string Name { get; set; }
}

EmployeeMethods.cs

public partial class Employee
{
    //constructor
    public Employee(int id, string name)
    {
        this.EmpId = id;
        this.Name = name;
    }

    public void DisplayEmpInfo()
    {
        Console.WriteLine(this.EmpId + " " this.Name);
    }
}

上面,EmployeeProps.cs 包含了 Employee 类的属性,EmployeeMethods.cs 包含了 Employee 类的所有方法。 这些将被编译为一个 Employee 类。

public class Employee
{
    public int EmpId { get; set; }
    public string Name { get; set; }

    public Employee(int id, string name)
    {
        this.EmpId = id;
        this.Name = name;
    }

    public void DisplayEmpInfo()
    {
        Console.WriteLine(this.EmpId + " " this.Name );
    }
}

部分类的规则

  • 所有部分类定义必须在相同的程序集和命名空间中。
  • 所有部分必须具有相同的可访问性,例如公共或私有等。
  • 如果任何部分声明为抽象、密封或基类型,则整个类声明为相同类型。
  • 不同的部分类必须有相同的基类型。
  • Partial 修饰符只能出现在关键字 class、struct 或 interface 之前。
  • 允许嵌套的部分类。

部分方法

分部类或结构可以包含一个方法,该方法拆分为分部类或结构的两个单独的 .cs 文件。 两个 .cs 文件之一必须包含方法的签名,另一个文件可以包含部分方法的可选实现。 方法的声明和实现都必须有 partial 关键字。

EmployeeProps.cs

public partial class Employee
{
    public Employee()
    { 
        GenerateEmpId();
    }
    public Guid EmpId { get; set; }
    public string Name { get; set; }

    partial void GenerateEmployeeId();

}

EmployeeMethods.cs

public partial class Employee
{
    partial void GenerateEmployeeId()
    {
        this.EmpId =  Guid.NewGuid();
    }
}

上面,EmployeeProps.cs 包含在构造函数中使用的部分方法 GenerateEmployeeId() 的声明。 EmployeeMethods.cs 包含 GenerateEmployeeId() 方法的实现。 下面演示了如何创建一个对象,即使用部分方法的 Employee 类。

class Program
{
    static void Main(string[] args)
    {
        var emp = new Employee();
        Console.WriteLine(emp.EmpId); // 输出一个随机的Guid

        Console.ReadLine();
    }
}

部分方法的规则

  • 部分方法必须使用 partial 关键字
  • 部分方法如果不是void的话,则必须加访问修饰符。
  • 部分方法可以使用 in, ref, out 来修饰参数。
  • 部分方法是隐式私有方法,因此不能是虚拟的。不支持virtual
  • 部分方法可以是静态方法。
  • 部分方法可以是泛型

什么时候我们会用到部分类。

通常是一个类太大 有一些类我们是用代码生成的, 我们自己的方法代码不希望影响到生成的代码 开源的软件,我们不希望影响到旧的代码。这样维护的时候很麻烦

最近更新的
...