博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

小天:分部类,是不是指同一个类的代码分布在多个类文件中呢?和继承是不是一回事?

       老田:你说的这个不是一回事。继承那是多个类之间的玩法,这个和文件之间是没有关系的。还记得前面我们说到过,类名字和文件名字不必相同(但最好是相同的)。其实前面的实例中也多次看到,在一个文件中是可以放多个类的。

       至于你说让多个文件共同完成一个类。我想你要表述的应该是一个类的代码分布在多个文件中吧?

       这个需要使用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”,点开他可以看见它的类定义的代码。然后在窗体上右键,查看代码,看这个类的定义部分。

 本文章为天轰穿原创作品,转载请注明出处及作者。