partial关键字在项目中的应用

2022-12-05 版权声明 我要投稿

在面向对象系统中我们通常是用类的继承方式来实现类的扩展, 而在.net环境中的partial关键字给类的扩展提供了的新思路。partial关键字允许把类、结构或接口放在多个文件中, 包含partial关键字的类叫partial类 (部分类或分布类) , 就是将一个类分成多个部分, 然后存放在多个不同的文件中。在项目类中使用partial关键字会给我们带来很多的好处, 如:

(1) 在大型项目中, 同一个项目类可分成几块交给不同的开发人员撰写, 保证项目的开发进度。 (2) 在大型项目中, 很多代码都由代码生成器自动生成, 程序员可在自己编写的类中加上partial关键字实现类的功能扩展, 而又不影响到代码工具生成的类, 便于系统的维护。 (3) 当项目中某些类很大时, 类的代码可读性差而且也不利于维护, 此时可用partial关键字实现partial类做功能性划分, 如Microsoft Visual Studio (VS) 中将Web页面文件分为.aspx和.aspx.cs两个文件, 前者负责Html展示, 后者负责页面数据的处理, 此方法将功能分开在两个不同的文件中, 有效实现的功能的划分和维护。

应用实例:

我们先看一个ORM系统的例子, 在ORM中, O是对象, 代表着系统的领域模型, 它拥有类对象的属性和方法。假如系统中有一个Drivers类, 属性UserName、Account、BasicSalary都需要存储到数据库中, 在软件开发过程中的常见做法是, 借助代码生成工具, 通过读取数据库的结构生成Drivers类的代码。现在的Drivers类只有基本的属性, 不具备任何方法或事件, 但客户要求要实现驾驶员的驾驶操作, 即需要在类中增加一个Drivers () 的函数。这时就需要对ORM生成的Drivers类进行扩展。

可以肯定的一点是, 我们不能修改自动生成的代码, 因为这会牵涉到数据库结构与代码同步的问题。我们要尽量做到生成的代码与数据相对应, 就算以后数据结构发生了变化, 重新生成代码后也不能影响开发人员手动编写的Drivers () 方法。解决这个需求有两种方法:继承方式扩展, partial类扩展。本文以partial类扩展来说明如何扩展类, 其项目文件的存储结构如图1:

在图1中我们可以看到, 在ZDSoft.LMS.Domain项目中, 将Drivers类按照partial类方式分成了两个部分, Generated目录中存放的类文件Drivers.Genderated.cs为代码生成器自动生成的代码, 始终与数据结构保持一致, 如果数据库中的表结构发生了变化, 只需要重新生成Genderated目录中的代码即可, 而不会影响到扩展类的文件内容。Drivers.cs类文件存放开发人员扩展的属性和方法, 开发人员根据业务需求可以对扩展类做相应的功能变更, 但又不会修改其基础属性, 这样就有效保证了类的安全性和扩展性。此方法在实际的项目开发过程中非常有效, 维护成本低, 维护方式容易。

使用说明:

partial关键字的使用可以给我们在项目开发过程中带来很多好处, 但在使用的时候也要注意如下的限制和要求。

1、partial关键字适用情况

(1) 类型特别大, 不宜放在一个文件中实现。 (2) 一个类型中的一部分代码为自动化工具生成的代码, 不宜与我们自己编写的代码混合在一起。 (3) 需要多人合作编写一个类。

2、partial类的限制

(1) 关键字partial只适用于类、接口、结构, 不支持委托和枚举。 (2) 同一个类型的各个部分必须有修饰符partial。 (3) 使用partial类时, 一个类型的各个部分必须位于相同的命名空间。 (4) 一个类型的各个部分必须被同时编译。

3、partial类上的修饰符

(1) partial类各个部分的访问修饰符必须保持一致性。 (2) 如果partial类有一部分使用了abstract修饰符, 那么整个类都将被视为抽象类。 (3) 如果partial类有一部分使用了sealed修饰符, 那么整个类都将被视为密封类, 不可继承。 (4) 一个类中各partial类不能使用相互矛盾的修饰符, 比如不能在一个partial类上使用abstract, 又在另一个partial类上使用sealed.

4、partial类的基类和接口

(1) 一个类的各个partial类指定的基类必须保持一致, 某个partial类可以不指定基类, 但如果指定, 则必须相同。 (2) partial类上的接口具有“累加”效应, 即在各个partial类中实现的所有接口在编译后都会体现在类上, 如:

partial类classA:Interface1{}

partial类classA:interface2{}

等同于

class classA:interface1, interface2{}

结束语

本文讲解了partial关键字的作用, partial关键字在实际项目管理中对类的扩展运用, 并总结了partial关键字使用的注意事项。所以, 合理使用partial关键字, 不但可以实现类功能的扩展, 还可以对项目管理和维护起到更安全、更高效的作用。

摘要:在面向对象系统中我们通常是用类的继承方式来实现类的扩展, 而在.net环境中的partial关键字给类的扩展提供了的新思路。partial关键字允许把类、结构或接口放在多个文件中。如当多个开发人员需要访问同一个类, 或者由代码生成器生成了一个类的某部分, 所以把类放在多个文件中存放非常有利于项目的管理和维护。

关键词:类扩展,partial类,ORM

参考文献

[1] [美]艾维耶等著《ASP.NET4高级编程》清华大学出版社2010年09月 (第7版)

[2] [美]Mickey Williams著冉晓旻、罗邓、郭炎译《Visual C#.Net技术内幕》清华大学出版社2004年

上一篇:浅谈变电所电气安装工程的施工管理下一篇:浅议战略联盟与“白色豉油鸡现象”