C#中部分类(partial)的使用
今天工作中看到公司框架生成的代码中有partial这个关键字,其实以前也接触过,但是没怎么注意去运用,今天遇到了,这个必须解决这个历史遗留问题才行。
C#中部分类用partial 关键字修饰,允许把类、结构或接口放在多个文件中。一般情况下,一个类存储在单个文件中。但有时,多个开发人员需要访问同一个类,或者某种类型的代码生成器生成了一个类的某部分,所以把类放在多个文件中是有益的。
那么什么情况下使用部分类呢?
从网上找到了以下情况:
1、处理大型项目的时候,使用一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理(相当于支持并行处理,很实用);
2、使用自动生成的源时,无需重新创建源文件便可将代码添加到类中,即,一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。Visual Studio 在创建Windows 窗体、Web 窗体时都使用此方法。你不用编辑Visual Studio 所创建的文件,便可创建使用这些类的代码。换句话说:系统会自动创建一个文件(一般记录的是窗体及窗体中的控件的属性),另一个或几个文件记录的是用户自己编写的代码。这两部分分开可以使结构显得非常清晰,用户只需关注自己负责的那部分就行了(需要的话,这两部分可以互相调用)。等到了编辑运行的时候,系统会自动将这两部分合成一个文件。再比如使用Entity Framework框架时,生成的Database.Designer.cs文件里的代码是一部分,自己也可以在自动生成的Database.Designer.cs文件之外再写关于Database.Designer.cs里类的部分类方法。(个人感觉这种情况下出现概念相对要高点)
3、需要多人合作编写一个类时;
部分类最常见的用途应是下面两种:
1, 区分自动生成的代码和手写的代码,像UI设计器生成的UI布局
2, 更清楚地在物理上分离类的公共部分和似有部分
在使用partial需要注意以下一些情况:
1、使用partial 关键字表明可在命名空间内定义该类、结构或接口的其他部分;
2、所有部分都必须使用partial 关键字;
3、各个部分必须具有相同的可访问性,如public、private 等;
4、如果将任意部分声明为抽象的,则整个类型都被视为抽象的;
5、如果将任意部分声明为密封(sealed修饰符)的,则整个类型都被视为密封的;
6、如果任意部分声明继承基类时,则整个类型都将继承该类;
7、各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口;
8、在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用;
9、嵌套类型可以是分部的,即使它们所嵌套于的类型本身并不是分部的也如此。如下所示:
01.public partial class Form1 : Form
02.
03.{
04.
05. public Form1()
06.
07. {
08.
09. InitializeComponent();
10.
11. }
12.
13.}
14.
15.
16.
17.
18.
19.partial class Form1
20.
21.{
22.
23. private void InitializeComponent()
24.
25.}
部分类型的限制:
1、局部类型只适用于类、接口、结构,不支持委托和枚举;
2、同一个类型的各个部分必须都有修饰符partial;
3、使用局部类型时,一个类型的各个部分必须位于相同的命名空间中;
4、一个类型的各个部分必须同时编译;