.NET代码规范学习
- 格式:docx
- 大小:111.20 KB
- 文档页数:20
基于.NET项目的代码书写规范要求书第一章主体命名规范外挂服务命名规范服务项目命名所有服务项目名使用ESrv(注意大小写)开头,第五位字母开始自订义,但是第五位字母必须大写。
比如ESrvDemo1,其中Demo1为自定义名称。
二、类成员访问权限规范所有类成员要严格的按照成员的使用性质,设置它们的访问修饰符,修饰符的意义如下:声明的可访问性意义l public //访问不l 受限制。
l protected //访问仅限于包含类或从包含类派生的类型。
l internal //访问仅限于当前程序集。
l protected internal //访问仅限于从包含类派生的当前程序集或类型。
l private //访问仅限于包含类型。
第二章代码书写规范一、代码注释规范1) .cs文件的注释所有.cs文件开头都要加上注释,写明文件创建时间、作者、用途概述等格式如下://********************************************************////创建日期: 2004.7.19//作者: XXX//功能说明:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX////********************************************************函数参数命名及过程注释参数一定要能说明要传递的意思,用对应的英文或相近的英文单词表示均小写开头。
所有的函数体开头都要加上注释,所以注释使用.NET注释规范,如下格式:/// <summary>/// 构造函数/// </summary>/// <param name="netPath">示例参数1</param>/// <param name="myPath">示例参数2</param>public UpgradeThread(string netPath, string myPath){程序语句。
代码规范一、命名习惯(1)包名一般用小写字母和少量的数字组成。
(2)类名和接口名一般由一个或几个单词组成,遵循“驼峰规则”。
(3)方法名除了第一个单子首字母小写外,其他单词都是首字母大写,与类名取名类似(4)属性名如果是基本数据类型的变量一般小写,引用数据类型的变量一般与类名取名类似。
局部变量可以简写.命名规范1.公共包:mon.层次名;例如:mon.model;mon.dao;mon.service;mon.action;2.基本包:com.litsoft.模块名.层次名;例如:com.litsoft.teacher.model;com.litsoft.teacher.dao;com.litsoft.teacher.service;com.litsoft.teacher.view;com.litsoft.teacher.view.action;3.类名:每个层次相对应的Java类都以层次名称结尾.例如:model层:TeacherDao层:TeacherDaoService层:TeacherService;Action层:TeacherAction;4.方法名:1.每个层次之间主要调用的方法名必须相同:例如:Action层:getById;Service 层:getById;Dao 层:getById2.方法前缀规定:1.保存方法必须以save/insert/add开头2.删除方法必须以delete开头3.更新方法必须以update方法4.查询方法必须以get开头3.执行条件规定:<1>方法执行时,如果有条件限定以By+条件;如果限定条件有多个,则用And连接例如:1.通过Id查询:getById2.通过Id删除:deleteById3.通过类型和状态查询:getByTypeAndStatus()<2>方法执行后影响对象如果只有一个:a〉对象属性操作(主要针对更新操作):方法名定义:update+属性名+限定条件例如:updatePasswordById()b>对象操作:可以省略对象名称方法名定义:直接方法前缀+限定条件<3> 方法执行后影响多行数据,方法定义:方法前缀+List+限定条件例:getListByid()二、类中的代码规范1.类之前加文档注释/***** Description :知识点Action <br />* 定义知识点相关操作的Action** <pre>* +----------------------------------------------------- * 更改历史* 更改时间更改人目标版本更改内容*+-------------------------------------------------------- * July,6 2012 吕悦 1.00 创建** </pre>** @author吕悦 <a href="mailto:lvyuely@">E-mail:lvyuely@ </a><ahref="tencent://message/?uin=596688499"> QQ:596688499</a> */2.方法前的注释:(1)注释方法名称及方法用途。
代码规范及编码原则代码规范及编码原则1.1代码风格的原则是:简明,已读,⽆⼆义性。
每⼀个优秀的程序员都应该遵循代码规范及编码原则。
读了《构建之法》第四章后,我们组进⾏简洁总结。
1.2程序风格:1、缩进:4个空格2、⾏宽:限制⾏宽3、括号:在复杂的条件表达式中,⽤括号清楚地表⽰逻辑优先级4、{}号:每个{}号独占⼀⾏5、分⾏:不要把多条语句放在⼀⾏变量命名规则(1) 变量名的命名规则;分析:变量名的命名规则遵循⽤户⾃定义标识符命名规则(1)只能由字母、数字、下划线组成;(2)第⼀个字符必须是英⽂字母;(3)有效长度为255个字符;(4)不可以包含标点符号和类型说明符%,&,!,# ,@,$;(5)不可以是系统的关键词⽐如else注释1、多余的注释要舍弃2、复杂的注释放在函数头函数,过程1.函数的规模尽量限制在200⾏以内。
2.⼀个函数最好仅完成⼀件功能。
3.为简单功能编写函数。
4.函数的功能应该是可以预测的,也就是只要输⼊数据相同就应产⽣同样的输出。
5.函数的命名法应使⽤驼峰命名法或者下划线命名法,驼峰和下划线不能同时使⽤。
除了此书外,《Clean Code》也可以帮助程序员学习代码规范。
下⾯是Clean Code读书笔记⼀、整洁代码1. 概念代码正确简洁明了清晰易读短⼩精确⼆、命名1.准确:名字与意义匹配易于区别2.实⽤使⽤读的出来的名称使⽤可搜索的名称3.明确⼀个概念对应⼀个词不⽤双关语使⽤有意义的语境三、函数1.短⼩2.职责单⼀3.⼀块代码中,函数的抽象层级需⼀致4.函数命名规范(参照⼆)5.参数尽可能少6.如果函数需要的参数要求数量有多种,应考虑将其封装成类7.实⽤异常类代替返回错误码,抽离try/catch代码块,使代码更加简洁四、注释1.少⽤注释,尽可能通过规范的代码来表达2.不使⽤⽆意义的注释3.必要的注释:法律信息提供信息的注释对代码意图进⾏解释的注释警⽰信息,防⽌踩坑TODO注释:未来得及完成的部分4. 对于⽆⽤的代码应直接删除⽽不是注释五、格式1.为什么需要规范格式易维护易拓展2.垂直格式⾏数少,短⼩精悍概念隔离,不同的的概念/逻辑代码实⽤空⾏隔离相关靠近:对于关系紧密的代码,尽量写在⼀起3.⽔平格式缩进、对齐六、对象与数据结构1.区别:过程式代码便于在不改动既有数据结构的前提下添加新函数⾯向对象代码便于在不改动既有函数的前提下添加新类亦即:过程式代码难以添加新数据结构,因为必须修改所有函数⾯向对象代码难以添加新函数,因为必须修改所有类七、错误处理1.使⽤异常⽽⾮返回码:更加美观、整洁2.使⽤不可控异常可控异常的代价是违反开放/闭合原则,因为你需要在使⽤的地⽅捕获异常3.在异常发⽣的地⽅添加环境说明:这样当异常发⽣的时候就可以根据这些信息定位异常原因4.不返回null 也不传递null这样在接收的时候不需要进⾏空值检查⼋、边界翻了下原书,边界是Boundaries 对于这个名字,开始不是⼤理解,就算现在看来也还是觉得不直观标题略晦涩:作者的意思应该是让我们让⾃⼰的代码和第三⽅库代码不要耦合太紧密,需有清新的边界对于第三⽅类库给的学习建议是:探索性地学习测试,以此熟悉类库,写出良好的代码来源:https:///mummyding/article/details/51326238。
.NET开发规范编写:审核:批准:目录1.概述 (4)2.命名规范 (4)2.1.类、参数和方法的命名规范 (4)2.2.接口命名规范 (4)2.3.动态语言文件命名规则 (5)2.3.1.格式:性质_描述 (5)2.4.客户端JavaScript规范 (5)2.4.1.变量命名规范 (5)2.4.2.对象命名规范 (5)2.5.控件命名规范 (5)2.6.图片的命名原则 (6)2.7.数据库命名规范 (7)2.7.1.命名规范原则 (7)2.7.2.数据库规范 (7)2.7.3.表命名规范 (7)2.7.4.字段规范 (8)2.7.5.视图规范 (8)2.7.6.存储过程规范 (8)2.7.7.函数规范 (8)2.7.8.索引命名规范 (8)2.7.9.关联命名 (8)2.7.10.设计规范 (8)3.编码规范 (8)3.1.C#代码编写 (8)3.2.Request、Session、Application使用规范 (12)3.3.HTML标记语言编码规范 (12)3.4.注释规范 (12)3.5.异常规范 (15)1.概述为了保持应用程序、组件、文件的一致性,便于阅读和管理代码和结构,提高开发效率和产品的标准化,特制订一套开发规范和标准(包括命名规范和编码规范)。
命名规范将包括:类和参数的命名规范、接口命名规范、数据库命名规范、ASP命名规范、JavaScript命名规范、控件命名规范等。
编码规范将包括:C#编码规范、注释规范、HTML编码规范、编码规范、异常规范等。
2.命名规范2.1.类、参数和方法的命名规范2.1.1.用名词或名词短语命名类。
2.1.2.使用Pascal大写注记:Pascal 大小写形式-所有单词第一个字母大写,其他字母小写。
2.1.3.不要使用匈牙利命名法2.1.4.用有意义的,描述性的词语来命名变量- 别用缩写。
用name, address, salary等代替nam, addr, sal 。
作者简介丁士锋 毕业于国防科技大学计算机学院。
有多年的大型软件系统开发经验,有近8年的.NET软件项目研发经验,擅长C#语言,对.NET框架及其底层机制有深入的理解。
曾经任职于三星电子、诺基亚等公司,从事软件项目开发。
对企业软件的设计与架构有深入的研究和大量经验,主导过多个大型的企业分布式项目的开发。
朱毅 毕业于上海交通大学,获信息工程、计算机科学双学士学位。
之后又获得了复旦大学软件工程硕士学位。
有6年多的.NET研发经验,涉及分布式系统、B/S体系结构系统、C/S体系结构系统的架构和开发。
曾任职于西门子移动通信有限公司,担任项目经理,致力于企业ERP系统的架构。
现任职于惠普有限公司ISEE项目组进行项目开发。
长期活跃于各大技术社区,曾著有《.NET程序员面试指南》一书。
业余时间喜欢阅读和旅游。
杨明羽 毕业于浙江大学计算机科学与技术专业,高级软件工程师。
多年来一直从事软件开发和项目管理类工作,有近10年的软件开发经验。
擅长C#语言,深入理解.NET框架底层机制,长期追踪.NET框架的最新技术。
曾任职于263在线、阿里巴巴等网络公司。
现任职于上海某大型网络科技公司,担任技术总监一职。
编辑推荐随书附赠微软Visual Studio 2008学习版安装光盘 6小时多媒体视频讲解 资深.NET程序员,全新视角,解读.NET 3.5框架的最新技术趋势 深入剖析.NET 3.5框架的四大开发技术及.NET 3.5框架的底层机制本书简介本丛书5种荣获“全国优秀畅销书奖”(科技类),本丛书累计销售超过100万册,本丛书先后被400余所培训机构选作参考书。
C#是微软推出的一种面向对象开发语言,其能让已有经验的开发人员轻松上手,并在很短的时间内就可以使用C#高效地进行工作。
这是读者选择C#的原因。
目前最新的C#版本就是.NET 3.5框架上的C# 3.0。
本书借助Visual Studio 2008开发工具,详细介绍了.NET框架中的4大开发利器:LINQ、WPF、WF和WCF。
代码质量管理规范与工具代码质量是保证软件项目成功的关键因素之一。
良好的代码质量可以提高软件系统的可维护性、可扩展性和可靠性,同时也可以提高开发人员的生产力和工作效率。
为了确保代码质量,需要制定一套规范和采用相应的工具来进行管理和评估。
本文将介绍代码质量管理的规范和相关工具。
一、代码规范良好的代码规范对于保证代码质量至关重要。
代码规范通常包括以下几个方面:1. 命名规范:变量、函数、类等的命名应具有一定的规范性,可以包括使用有意义的名称、遵循命名约定、避免使用缩写等。
2. 代码结构规范:代码应具有良好的结构,包括适当的缩进、空行的使用、注释的添加等。
3. 代码风格规范:代码的风格应一致,例如使用一种缩进风格、括号的使用方式等。
4. 错误处理规范:代码应具备良好的错误处理机制,包括异常处理、错误提示等。
5. 注释规范:代码中应添加适当的注释,包括模块、函数、算法等的解释。
以上只是代码规范的一部分,每个团队或项目可以根据自身的需求和约定制定相应的规范。
对于代码规范的遵循,可以使用代码审查等方式进行监督。
二、静态代码分析工具静态代码分析是通过分析代码本身的结构、规则、约定等来评估代码质量的一种方法。
以下是一些常用的静态代码分析工具:1. SonarQube:SonarQube是一个开源的代码质量管理平台,提供了丰富的代码分析功能,可以检测代码中的潜在问题、漏洞、重复代码等,还支持自定义规则和报告生成。
2. PMD:PMD是一个Java静态代码分析工具,可以检测代码中的潜在问题、性能问题等,并提供相应的修复建议。
3. ESLint:ESLint是一个JavaScript静态代码分析工具,可用于检测代码中的语法错误、代码风格问题等,并提供相应的修复建议。
4. FindBugs:FindBugs是一个Java静态代码分析工具,可以检测代码中的潜在问题、空指针异常等,并提供相应的修复建议。
以上只是一些常用的静态代码分析工具,根据开发语言的不同,可以选择适合的工具进行使用。
什么是.Net以及.Net的基本语法什么是.Net?1. 通常意义所说的.net有5个组成部分,但最主要的部分是.NET Framework, .NET Framework实际上是运⾏在Windows操作系统的⼀个应⽤程序,⼀个可供⼆次开发的类库。
.NET Framework包括以下组件:公共语⾔运⾏库(CLR) 基础类库(BCL)数据库访问组件(和XML)基于编程框架的⽹络服务(Web Service)和⽹络表单(WebForms)Windows桌⾯应⽤界⾯编程组件(WinForm).2..NET是微软公司和sum公司的结果3. 狭义的.net是指.net Framework,。
.net Framework核⼼是CLR(公共语⾔运⾏时)可以使⽤多种语⾔来开发应⽤系统.Net的运⾏机制?.net源代码中间语⾔IL(Intermediate Language)CLR(Common Language Runtime)公共语⾔运⾏库第⼆次编译机器码(可执⾏的最终代码)在.net中,编译分为两个阶段:1.把原代码编译为中间语⾔(IL)2.CLR把IL编译为平台专⽤代码..Net常见的术语?Mircorsoft中间语⾔(Microsoft Intermediate Languane)MSIL通⽤类型系统(Common Type System) CTS公共语⾔规范(Common Language Specification ) CLS公共语⾔运⾏库(Common language Runtime) CLR托管代码(Manged Code)即时编译(JIT).Net能够使⽤多语⾔开发的原因(语⾔互操作的原因)?1. 所使⽤的语⾔必须遵守公共语⾔规范。
2. 进⾏第⼀编译后,在中间语⾔⾥,类型都变成了统⼀的(通⽤类型系统)。
3. CLR进⾏⼆次编译,编译成机器码。
c#基本语法?变量1.〉在C#中声明变量⽤如下语法:datatype identifier 即:数据类型变量名注意:在C#中变量必须先声明后使⽤(强类型语⾔)C#严格区分⼤⼩写变量必须以字母或者下划线开头,但变量名中可以包含数字Int num 对Int _num 对Int 2num 错不能把C#关键字作为变量名2.〉变量的作⽤域变量的作⽤域就是变量在代码当中能起作⽤的范围。
.NET 代码规范学习下边我谈谈.NET代码规范的学习:一、注释规范1,自建代码文件注释:对于自己创建的代码文件(如函数、脚本),在文件开头,一般编写如下注释:/************************************************ *作者:小组:说明:创建日期:版本号:**********************************************/ 2,标准注释:在模块、类、属性、方法前一行添加注释,以便调用的时候提示用户下以方法声明做例子:///<summary>///depiction:<对该方法的说明>///</summary>///<paramname="<参数名称>"><参数说明></param>///<returns>///<对方法返回值的说明,该说明必须明确说明返回的值代表什么含义>///</returns>如果模块只进行部分少量代码的修改时,则每次修改须添加以下注释:///修改人:///修改日期:< YYYY-MM-DD >///备份:/* 原代码内容*/将原代码内容注释掉,然后添加新代码使用以下注释:///添加人:///添加日期:<YYYY-MM-DD>代码内容///结束:对于重构的类文件,需要对原来的类文件做备份,然后放在同级目录下,在原有文件名后面添加后缀"_BAK",以便日后版本升级时整理源码。
3.代码中的注释:代码间注释分为单行注释和多行注释:单行注释://<单行注释>多行注释:/*多行注释1多行注释2多行注释3*/代码中遇到语句块时必须添加注释(if,for,foreach,……),添加的注释必须能够说明此语句块的作用和实现手段(所用算法、循环条件、不同分支的意义等等)。
这是添加注释的学习,添加适当的注释,会使你的代码就像课文一样容易读懂。
下边看第二部分。
二,命名规范:总体来说需要做到这几点:a,名字应该能够标识事物的特性,并且与业务挂钩。
b,名字一律使用英文单词,而不能为拼音。
c,名字可以有两个或三个单词组成,但不应多于4个,控制在3至30个字母以内。
d,在名字中,多个单词用大写第一个字母(其它字母小写)来分隔。
例如:IsSuperUser。
在具体任务开发中,如果有特定的命名约定,则在相应的软件开发计划中予以明确定义及上报质量管理部审计组。
分点来说具体的:1,命名概括:Pascal命名法:所有单词的首字母都大写,其他字母小写Camel命名法:除首字母外,其他单词的首字母大写,其他字母小写o在类属性的名称中包含类名是多余的,如Book.BookTitle。
而是应该使用Book.Title。
o在变量名中使用互补对,如min/max、begin/end 和open/close。
o布尔变量名应该包含Is,这意味着Yes/No 或True/False 值,如fileIsFound。
o即使对于可能仅出现在几个代码行中的生存期很短的变量,仍然使用有意义的名称。
仅对于短循环索引使用单字母变量名,如i 或j。
文件名要和类名相同,一般情况下一个类一个文件,文件名遵从Pascal 命名法,无特殊情况,扩展名小写,使用统一而又通用的文件扩展名:C# 类 .cs。
2,缩写:为了避免混淆和保证跨语言交互操作:o不要将缩写或缩略形式用作标识符名称的组成部分。
例如,使用GetWindow,而不要使用GetWin。
o不要使用计算机领域中未被普遍接受的缩写。
o在适当的时候,使用众所周知的缩写替换冗长的词组名称。
例如,用UI 作为User Interface 缩写,用OLAP 作为On-lineAnalytical Processing 的缩写。
o在使用缩写时,对于超过两个字符长度的缩写请使用Pascal 大小写或Camel 大小写。
但是,应当大写仅有两个字符的缩写,如,System.IO,而不是System.Io。
o对于某些名字中单词都比较长的情况,可以自行写一个缩写名字(名字中的关键字不能缩写),将所有的缩写做一个说明文件,放在同级目录下的开头。
3,命名空间:o命名命名空间时的一般性规则是使用公司名称,后跟技术名称和可选的功能与设计,如下所示:CompanyName.TechnologyName[.Feature][.Design] o命名空间使用Pascal大小写,用逗号分隔开。
o TechnologyName 指的是该项目的英文缩写,或软件名。
o命名空间和类不能使用同样的名字4,类o使用Pascal 大小写。
o使用全称避免缩写,除非缩写已是一种公认的约定,如URL、HTML。
对于某个命名空间、文件夹下类名中单词都比较长的情况,可以缩写(名字中的关键字不能缩写,其他单词只取首字母),将所有的缩写做一个说明文件,放在同级目录下的开头。
o不使用下划线( _ )。
o类的命名要见名知意。
o数据访问层:类名后加DAL(Data Access Layer)。
注意:在.NET 中没有DAO的概念,DAO是在Java中出现的,表示一种数据访问方式。
o业务逻辑层:类名后加BLL(Business Logic Layer),如果类名特长可以使用缩写,但在文档中要注明。
缩写的全称和意义。
o界面层:asp中针对页面的类,不用添加UI前缀或后缀。
o实体层:实体类后加Entity做结尾,如果其他方法中,调用实体类作为参数,参数前面加小写en,如果参数过长,使用缩写,但在文档中也要注明。
o如果系统规模比较大,应该考虑,对类进行分组放到不同的文件夹中,便于维护,把握粒度。
5,接口:o使用Pascal 大小写。
o在原有类名基础上加“I”,如:IUserDaoo不使用下划线(_)。
o当类是接口的标准执行时,定义这一对类/接口组合就要使用相似的名称。
两个名称的不同之处只是接口名前有一个I前缀。
或者在实现类名后加“Impl”后缀。
public interface IComponent{}public class Component : IComponent{}public class ComponentImpl : IComponent{}6,枚举(Enum)o对于Enum 类型和值名称使用Pascal 大小写。
o命名不能缩写,枚举内的内容可以缩写。
o命名禁止加Enum 后缀。
7,参数o参数名称使用Camel大小写o参数名称可缩写8,方法o以动词开头。
o使用Pascal 大小写。
o禁止缩写,除非名词本身含有缩写。
如:AddStudentMgr () 9.属性(property)o以名词或形容词命名。
o使用Pascal 大小写。
o禁止缩写。
10,委托o以名词或形容词命名。
o使用Pascal 大小写。
o禁止缩写。
o如果与事件(event)关联,则名称命名使用EventHandler后缀,否则其他名称均以Delegate后缀结尾。
如// 普通委托定义public delegate void SetMethodDelegate(string name);//委托与事件关联public delegate void MouseEventHandler(object sender, MouseEventArgs e);11,事件o使用Pascal 大小写。
o禁止缩写。
o名称命名使用Event后缀。
o用动词或名词命名,带有时间意义,如:MouseMove事件、Closing 事件、Closed 事件。
o指定两个名为sender 和e 的参数。
sender 参数表示引发事件的对象。
e为事件类的实例。
e参数类型使用适当而特定的事件类。
o用EventArgs 后缀命名事件参数类。
示例:public delegate void MouseEventHandler(object sender, MouseEventArgs e);public event MouseEventHandlerMouseEvent; //事件定义12,常量(const)o全部大写,单词间以“_”分隔。
o禁止缩写。
o13,字段o private、protected 使用Camel 大小写。
o禁止使用public。
14,静态字段o使用名词、名词短语或者名词的缩写命名静态字段。
o使用Pascal 大小写。
15,集合o命名使用复数。
16,范型o以一个大写字母(建议优先使用T)表示类的类型,以一个小写字母(如:t)表示类名。
三,编码规则a.大括号规则o书写规则:if (expression) (推荐){}或:if (expression) {}b.缩进规则使用一个“Tab”为每层次缩进(默认4个空格,有的规范也要求2个空格,依要求而定,所有IDE都可以设置)。
c.小括号规则o不要把小括号和关键词(if 、while等)紧贴在一起,要用空格隔开它们。
如:if (true){}o不要把小括号和函数名紧贴在一起。
o除非必要,不要在Return返回语句中使用小括号。
因为关键字不是函数,如果小括号紧贴着函数名和关键字,二者很容易被看成是一体的。
d.单语句规则除非这些语句有很密切的联系,否则每行只写一个语句。
e.模块化规则某一功能,如果重复实现一遍以上,即应考虑模块化,将它写成通用函数。
并向小组成员发布。
同时要尽可能利用其它人的现成模块。
f.函数复杂度规则单个函数的功能不能过于复杂,不能超过以下限定:o单一功能子函数代码不得超过50行、形参个数不得超过7个、程序嵌套深度不得超过7层。
o圈复杂度必须在15以内,对程序的修改或扩展不得增加其原有圈复杂度。
g.编码风格规则编码过程中需遵循以下风格习惯:o代码未写,文档先行,注释必须按照固定统一范式撰写。
o关系运算必须常量在左、变量在右。
o不许使用复杂的运算表达式,必要时添加括号而不依赖于优先级。
o魔鬼数字需用宏定义替代。
o局部变量必须初定义、避免不必要的内存操作、内存操作必须考虑异常处理。
h.版本管理规则本项目中,每个任务在完成一个稳定的版本后,都应打包并且归档。
源码包的版本号由圆点隔开的两个数字组成,第一个数字表示发行号,第二个数字表示该版的修改号。
具体用法如下:o当源码包初版时,版本号为V1.00;o当源码包被局部修改或bug修正时,发行号不变,修改号第二个数字增1。
例如,对初版源码包作了第一次修订,则版本号为V1.01;o当源码包在原有的基础上增加部分功能,发行号不变,修改号第一个数字增1,例如,对V1.12版的基础上增加部分功能,则新版本号为V1.20;o当源码包有重要修改或局部修订累积较多导致源码包发生全局变化时,发行号增1。