C#学习教程:C#基础知识之Partial的使用分享

C#2.0可以将类、结构或接口的定义拆分到两个或多个源文件中,在类声明前添加partial关键字即可。

例如:下面的PartialTest类

classPartialTest {   stringStr_FieldTest;   intInt_FieldTest;   publicvoidDoTest()   {     Debug.Print("Test");   } }

 可在不同源文件中写成下面形式:

一个文件中写:

partialclassPartialTest { stringStr_FieldTest; intInt_FieldTest; }

另一个文件中写:

partialclassPartialTest { publicvoidDoTest() { Debug.Print("Test"); } } 一、什么情况下使用分部类?
处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理(相当于支持并行处理,很实用); 使用自动生成的源时,无需重新创建源文件便可将代码添加到类中。VisualStudio在创建Windows窗体、Web窗体时都使用此方法。你不用编辑VisualStudio所创建的文件,便可创建使用这些类的代码。换句话说:系统会自动创建一个文件(一般记录的是窗体及窗体中的控件的属性),另一个或几个文件记录的是用户自己编写的代码。这两部分分开可以使结构显得非常清晰,用户只需关注自己负责的那部分就行了(需要的话,这两部分可以互相调用)。等到了编辑运行的时候,系统会自动将这两部分合成一个文件。
二、使用Partial需要注意以下一些情况
使用partial关键字表明可在命名空间内定义该类、结构或接口的其他部分 所有部分都必须使用partial关键字 各个部分必须具有相同的可访问性,如public、private等 如果将任意部分声明为抽象的,则整个类型都被视为抽象的 如果将任意部分声明为密封的,则整个类型都被视为密封的 如果任意部分声明继承基类时,则整个类型都将继承该类 各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口 在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用 嵌套类型可以是分部的,即使它们所嵌套于的类型本身并不是分部的也如此。如下所示: classContainer { partialclassNested { voidTest1(); } partialclassNested { voidTest2(); } } 三、使用分布类的一些限制

1、要作为同一类型的各个部分的所有分部类型定义都必须使用partial进行修饰。如下所示:

publicpartialclassA{} publicclassA{}//Error,mustalsobemarkedpartial

2、partial修饰符只能出现在紧靠关键字class、struct或interface前面的位置(枚举或其它类型都不能使用partial);

3、要成为同一类型的各个部分的所有分部类型定义都必须在同一程序集和同一模块(.exe或.dll文件)中进行定义。分部定义不能跨越多个模块;

4、类名和泛型类型参数在所有的分部类型定义中都必须匹配。泛型类型可以是分部的。每个分部声明都必须以相同的顺序使用相同的参数名。

四、应用场景

可以使用partialclass的场景很多。这里分析一个ORM的例子。系统中有一个Cat类,属性ID、Age、Weight都需要存储到数据库中,一个信息系统中常见的需求。通过读取数据库的结构,可以用工具生成Cat类的代码。并且ORM框架支持了从数据库信息生成Cat对象。

现在的Cat什么动作都没有,客户说,我们需要一个Miaow()的函数。这时就需要对ORM生成的Cat类进行扩展了。可以肯定地一点是,我们不能修改自动生成的代码,因为这会牵涉到数据库结构与代码同步的问题。解决这个需求有两种方法:继承方式扩展,partialclass扩展。

1、继承方式扩展

工具自动生成一个CatBase类,这个类只有属性,嵌入到ORM框架中。既然需要扩展功能,很容易想到对这个基类继承,于是有了Cat类。Cat类如愿以偿地有了Miaow()函数。以前系统中用的是CatBase的实例,现在创建CatBase实例的地方需要改为创建Cat的实例。这个问题让ORM框架解决吧。客户的需求实现了,我们自己的代码生成也没有遭到破坏,任务完成。

2、partialclass扩展

partialclass简单地说就是可以将一个类的代码写到两个或多个代码文件中。编译器在编译的过程中将这几个文件组合起来一起编译。一个很酷的技术。工具生成的Cat类仍然不变。既然需要增加函数,那么在新建一个代码文件,将Miaow()函数写出来就可以。需要做的仅仅是将类的声明由class改为partialclass,任务完成。

3、对比分析

两种思路都可以实现需求。孰优孰劣需要仔细分析一下。

实例创建:partialclass更加简洁。 系统复杂度:对于系统来说,partialclass方式下只存在一个类,而继承方式有两个类。 继承逻辑:从逻辑上讲,Cat并不需要一个基类CatBase,这样做仅仅是因为在代码构建过程中的一个限制。 维护性:两种方式下都会存在两个代码文件,维护成本并没有区别。 可读性:两个Cat文件确实让人费解。

4、上述就是C#学习教程:C#基础知识之Partial的使用分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/903526.html

发表评论

邮箱地址不会被公开。 必填项已用*标注