解析C#中的分部类和分部方法

2019-12-26 17:27:27王振洲
易采站长站为您分析C#中的分部类和分部方法,讲解了类的拆分和方法的定义的拆分,需要的朋友可以参考下  

可以将类或结构、接口或方法的定义拆分到两个或多个源文件中。每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来。
分部类
在以下几种情况下需要拆分类定义:
处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理。
使用自动生成的源时,无需重新创建源文件便可将代码添加到类中。Visual Studio 在创建 Windows 窗体、Web 服务包装代码等时都使用此方法。无需修改 Visual Studio 创建的文件,就可创建使用这些类的代码。
若要拆分类定义,请使用 partial 关键字修饰符,如下所示:


public partial class Employee
{
  public void DoWork()
  {
  }
}

public partial class Employee
{
  public void GoToLunch()
  {
  }
}

partial 关键字指示可在命名空间中定义该类、结构或接口的其他部分。所有部分都必须使用 partial 关键字。在编译时,各个部分都必须可用来形成最终的类型。各个部分必须具有相同的可访问性,如 public、private 等。
如果将任意部分声明为抽象的,则整个类型都被视为抽象的。如果将任意部分声明为密封的,则整个类型都被视为密封的。如果任意部分声明基类型,则整个类型都将继承该类。
指定基类的所有部分必须一致,但忽略基类的部分仍继承该基类型。各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口。在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用。最终类型是所有部分在编译时的组合。

注意:partial 修饰符不可用于委托或枚举声明中。

下面的示例演示嵌套类型可以是分部的,即使它们所嵌套于的类型本身并不是分部的也如此。


class Container
{
  partial class Nested
  {
    void Test() { }
  }
  partial class Nested
  {
    void Test2() { }
  }
}

编译时将对分部类型定义的特性进行合并。例如,请考虑下列声明:


[SerializableAttribute]
partial class Moon { }

[ObsoleteAttribute]
partial class Moon { }

它们等效于以下声明:


[SerializableAttribute]
[ObsoleteAttribute]
class Moon { }

将从所有分部类型定义中对以下内容进行合并: