小天:分部类,是不是指同一个类的代码分布在多个类文件中呢?和继承是不是一回事?
老田:你说的这个不是一回事。继承那是多个类之间的玩法,这个和文件之间是没有关系的。还记得前面我们说到过,类名字和文件名字不必相同(但最好是相同的)。其实前面的实例中也多次看到,在一个文件中是可以放多个类的。
至于你说让多个文件共同完成一个类。我想你要表述的应该是一个类的代码分布在多个文件中吧?
这个需要使用partial关键字来完成。partial关键字允许把类、结构或接口放在多个文件中。一般情况下,一个类存储在单个文件中。但有时,多个开发人员需要访问同一个类,或者某种类型的代码生成器生成了一个类的某部分,所以把类放在多个文件中是有益的。
partial关键字的用法是:把partial放在class、struct或interface(接口,后面讨论)关键字的前面。在下面的例子中,ParClass类位于两个不同的源文件ParClass1.cs和ParClass2.cs中:
//ParClass1.cs 文件中的类 partial class ParClass //类名ParClass { /// <summary> /// ClassA中的方法,这种情况下,练习的时候一定要加注释效果才明显 /// </summary> public void MethodOne() { //方法体 } }
//ParClass2.cs 文件中的类 partial class ParClass //类名ParClass { /// <summary> /// ClassB中的方法 /// </summary> public void MethodTwo() { //方法体 } } |
编译包含这两个源文件的项目时,会创建一个ParClass类,它有两个方法MethodOne() 和MethodTwo()。使用效果如图4-23:
图4-23
小天:我想到一个很严重的问题,按照你上面的例题来看,其实所谓的分部类,其实就是在多个文件中创建同名的类,而类前面增加了关键字partial。但是这个过程中,如果使用了封装中讲到的访问修饰符,那怎么算?
老田:如果声明类时使用了下面的关键字,这些关键字将应用于同一个类的所有部分:
● public
● private
● protected
● internal
● abstract
● sealed
● new
● 一般约束
在嵌套的类型中,只要partial关键字位于class关键字的前面,就可以嵌套部分类。在把分部类编译到类型中时,会合并属性、XML注释、接口、泛型类型的参数属性和成员。
小提示:其实最典型的分部类,就是Windows桌面应用程序中的窗体,在资源管理器中随便找到一个窗体文件,点开前面的 + 号,可以看见都有一个 “窗体名.Designer.cs”,点开他可以看见它的类定义的代码。然后在窗体上右键,查看代码,看这个类的定义部分。 |
本文章为天轰穿原创作品,转载请注明出处及作者。