参考
https://blog.csdn.net/susan19890313/article/details/7575204
1. 举例
新建一个Windows Form时,后台会自动添加如下代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
为什么新建立的 Winows Form 的类定义成了一个部分类?当打开Form1.Designer.cs 文件,可以看到,原来 Form1 的另一部分类是在这个文件中设计的。这个部分类中定义了我们使用的控件、事件委托以及如 Dispose 方法等。因为这里面的代码都是自动生成的,因此设计成了一个部分类。
2. 局部类型的适用情况与限制
局部类型适用于以下情况
① 类型特别大,不宜放在一个文件中实现;
② 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起;
③ 需要多人合作编写一个类。
局部类型的限制
① 局部类型只适用于类、接口、结构,不支持委托和枚举。
② 同一个类型的各个部分必须都有修饰符 partial。
③ 使用局部类型时,一个类型的各个部分必须位于相同的命名空间中。
④ 一个类型的各个部分必须被同时编译。
3. 局部类型的注意点
① 关键字 partial 是一个上下文关键字,只有和 class、struct、interface 放在一起时才有关键字的含义,因此 partial 的引入不会影响现有代码中名称为partial的变量。
② 局部类型的各个部分一般是分开放在几个不同的 *.cs 文件中,但 C# 编译器允许我们将他们放在同一文件中。
4. 局部类型的修饰符
① 一个类型的各个部分上的访问修饰符必须维持一致性;
② 如果一个类型有一个部分使用了abstract修饰符,那么整个类都将被视为抽象类;
③ 如果一个类型有一个部分使用了 sealed 修饰符,那么整个类都将被视为密封类;
④ 一个类的各个部分不能使用相互矛盾的修饰符,比如不能在一个部分上使用abstract,又在另一个部分上使用sealed。
5. 局部类型的基类和接口
① 一个类型的各个部分上指定的基类必须一致,某个部分可以不指定基类,但如果指定,则必须相同。
(2) 局部类型上的接口具有“累加”效应。
partial class Class2: Iinterface1, Iinterface2 {}
partial class Class2: Iinterface3 {}
partial class Class2: Iinterface2 {}
相当于
class Class2: Iinterface1, Iinterface2, Iinterface3 {}