宝桥科技C#编程规范.docx
《宝桥科技C#编程规范.docx》由会员分享,可在线阅读,更多相关《宝桥科技C#编程规范.docx(17页珍藏版)》请在冰豆网上搜索。
宝桥科技C#编程规范
宝桥科技编程规范
[Version1.0.9.0225]
一、本规范版本变化1
二、概述1
三、版本号命名规则1
四、命名规范1
五、代码外观3
六、程序注释4
七、控件命名规则5
八、界面设计规范6
九、数据库命名规则(暂定)6
十、附录9
一、
本规范版本变化
Version1.0.9.0129yux完成
Version1.0.9.0130增加了数据库命名规则、界面设计规范。
Version1.0.9.0205数据库部分细节改动。
Version1.0.9.0225按钮命名细节改动。
二、概述
规范制定原则
1方便代码的交流和维护。
2不影响编码的效率,不与大众习惯冲突。
3使代码更美观、阅读更方便。
4使代码的逻辑更清晰、更易于理解。
术语定义
Pascal大小写
将标识符的首字母和后面连接的每个单词的首字母都大写。
可以对三字符或更多字符的标识符使用Pascal大小写。
例如:
BackColor
camel大小写
标识符的首字母小写,而每个后面连接的单词的首字母都大写。
例如:
backColor
三、版本号命名规则
版本号分为4段,前两段为主版本号和辅版本号,定义了软件的版本。
第3段为设定版本时的年份,2009年及以前为一位数字,2010年以后为两位数字。
第4段为设定版本时的日期,用4位数字表示,如0129表示1月29日
如1.0.9.0129,含义为版本1.0,2009-1-29最终发布。
四、命名规范
1、命名规则
命名时尽可能使用英文的全称,尤其是类名和接口名。
命名时尽可能不用下划线,除非全部大写。
命名时少用s,如使用user而不要用users,集合除外。
在面向对象的语言中,在类属性的名称中包含类名是多余的,如不应该使用Book.BookTitle。
而是应该使用Book.Title。
布尔变量名应该包含Is,这意味着Yes/No或True/False值,如fileIsFound
即使对于可能仅出现在几个代码行中的生存期很短的变量,仍然使用有意义的名称。
仅对于短循环索引使用单字母变量名,如i或j。
或者写清楚注释。
可能的情况下,尽量不要使用原义数字或原义字符串,如Fori=1To7。
而是使用命名常数,如Fori=1ToNUM_DAYS_IN_WEEK以便于维护和理解。
命名空间和类不能使用同样的名字。
例如,有一个类被命名为Debug后,就不要再使用Debug作为一个名称空间名。
在适当的地方,使用复合单词命名派生的类。
如ApplicationException是从名为Exception的类派生的类。
接口开始字母一定为大写的I,而后跟随Pascal方式的接口名,如IPersistable。
而IdentityStore也是合适的类名或其它名称,因为并不会混淆。
对于参数,不需要添加str或int等前缀后缀,而应该使用可以描述参数意义的名称。
例如:
stringFormat(stringformat,args()Asobject)
Public的字段用Pascal命名方式,而private,protect字段用camel命名。
属性的命名尽可能与对应的字段同名,用大小写来区分。
集合的命名时,尽可能使用复数。
2、大小写规则
基本原则:
内部封装起来的私有字段、参数、变量为camel命名方法,其它的为Pascal命名方法。
常数使用全部大写字母,单词之间使用下划线分隔。
常用计算机通用单词缩写可写成大写,如IO,UI,TCP,CRM等。
标识符
大小写
示例
常数
全部大写
NUM_DAYS_IN_WEEK可以使用下划线分隔
类
Pascal
AppDomain
枚举类型
Pascal
ErrorLevel
枚举值
Pascal
FatalError
事件
Pascal
ValueChange
接口
Pascal
IDisposable注意总是以I前缀开始。
方法
Pascal
ToString
命名空间
Pascal
System.Drawing
属性
Pascal
BackColor
公共字段
Pascal
RedValue
注意很少使用。
属性优于使用公共实例字段。
只读静态字段
Pascal
RedValue
私有字段
camel
redValue
参数
camel
typeName
方法内的变量
camel
backColor
3、DotNet中的关键字尽可能不要用作变量名
详见附录,虽然多数为的关键字,但考虑到.net框架的通用性,建议尽量不用。
五、代码外观
1、列宽
代码列宽控制在110字符左右,也就是大约屏幕的4/3宽。
如果太长需要换行,则从第二行起向后缩进。
如:
stringinserString="InsertIntoTableName(username,password,email,sex,address)"
+"Values('张三','123546','123@','男','体育路11号')";
2、缩进
缩进应该是每行一个Tab(4个空格),按照VS2005环境的默认生成格式进行缩进。
3、空行
空行是为了将逻辑上相关联的代码分块,以便提高代码的可阅读性。
在以下情况下使用两个或更多空行
1、接口和类的定义之间。
2、枚举和类的定义之间。
3、类与类的定义之间。
在以下情况下使用一个空行
1、属性与属性之间、方法与方法之间。
2、属性、方法、字段相互之间。
3、方法中变量声明与语句之间。
4、方法中不同的逻辑块之间。
5、方法中的返回语句与其他的语句之间。
6、注释与它注释的语句间不空行,但与其他的语句间空一行。
4、花括号-{}
1、左花括号“{”放于关键字或方法名的下一行并与之对齐,同时与右花括号“}”对齐。
如
if(condition)
{
}
2、if、while、do语句后一定要使用“{}”,即使“{}”号中为空或只有一条语句,除非不加“{}”能提高程序的可读性。
如
if(someValue==1)
{
someValue=2;
}
5、代码块
在代码中点击右键——插入代码段——VisualC#。
(提示:
大多数情况下,输入关键字后按TAB键即可自动生成代码,如try+TAB)
与VS2005环境自动生成的代码块保持一致。
6、重构
多使用VS2005开发环境提供的代码重构功能:
例如在类的某一个字段上点击右键——重构——封装字段。
六、程序注释
1、原则
Ø每一个文件,每一个类,每一个类的public方法必须填写正确的注释。
Ø如果进行了修改,则在文件上方填写相应的修改信息,并在代码中注出修改的地方和修改的原因。
如果修改的是其它人的模块,则必须填写修改人的标识。
Ø修改代码时,总是使代码周围的注释保持最新。
Ø避免杂乱的注释,如一整行星号。
而是应该使用空白将注释同代码分开。
Ø避免在块注释的周围加上印刷框。
这样看起来可能很漂亮,但是难于维护。
Ø如果需要用注释来解释复杂的代码节,请检查此代码以确定是否应该重写它。
尽一切可能不注释难以理解的代码,而应该重写它。
尽管一般不应该为了使代码更简单以便于人们使用而牺牲性能,但必须保持性能和可维护性之间的平衡。
Ø在编写代码时就注释,因为以后很可能没有时间这样做。
另外,如果有机会复查已编写的代码,在今天看来很明显的东西六周以后或许就不明显了。
Ø注释代码中不十分明显的任何内容。
Ø为了防止问题反复出现,对错误修复和解决方法代码总是使用注释,尤其是在团队环境中。
Ø对由循环和逻辑分支组成的代码使用注释,特别是循环边界条件的说明。
2、文件注释commFile
导入预定义好的commFile.snippet(参见附录)。
文件注释应该放在using段之后类之前
输入commFile,按TAB键
/*
*Copyright(C)宝桥科技版权所有
*
*创建标识:
[owne][20090101]
*
*文件功能描述:
[对此文件实现功能的描述]
*
*修改标识:
[修改人][日期]
*修改描述:
*
*/
3、类注释
在类的上方输入///,使用XML格式的文档说明。
例如
///
///根据进程名来判断当前程序运行的个数
///
publicstaticclassAppInstance
{……}
4、方法注释
在方法的上方输入///,使用XML格式的文档说明。
例如:
///
///读取INI文件中的值
///
///INI文件中的段
///INI文件中的键值
///返回字符串值,如果没有此值返回""空字符串
///
///strings=INIClass.INIReadValue("DataBase","Server")
///
publicstringINIReadValue(stringsection,stringkey)
{……}
方法中的每一个参数及返回值则必须写清楚用途,尤其是public的方法。
比较难以使用或难于理解的方法,需要使用标签来写下一个简单的使用范例。
七、控件命名规则
命名方法:
控件名简写+英文描述,英文描述首字母大写
Panel,Label等程序不操作的控件可以不命名,使用缺省名称。
下面是部分常用控件的缩写:
控件名
简写
Form
frm
Button
btn
CheckBox
chk
TextBox
txt
Label
lbl
ListBox
lst
ListView
lstv
ComboBox
cmb
DateTimePicker
dtp
Calender
cld
MonthCalendar
mcld
PictureBox
pic
Image
img
RadioButton
rdo
TreeView
tv
NumericUpDown
updn
Panel
pnl
MenuStrip
menu
ContextMenuStrip
cmenu
DataSet
ds
DataGridView
dgv
ImageList
imglst
ToolStrip
ts
ToolStripButton
tsb
八、命名空间(NameSpace)命名规范及项目组织形式
1、
九、界面设计规范
1、常用按钮/快捷键命名
按钮中文名
按钮名
快捷键
增加(A)
btnAdd
A
修改(E)
btnEdit
E
删除(D)
btnDel
D
保存(S)
btnSave
S
取消(C)
btnCancel
C
确定(O)
btnOk
O
应用(Y)
btnApply
Y
退出(X)
btnExit
X
关闭(C)
btnClose
C
一十、数据库命名规则(暂定)
所有数据库、表、字段、视图、存储过程等的标识命名,除了前缀外,全部遵守Pascal命名规则,而所有的前缀则全部小写。
禁止使用中文命名
1、数据库(Database)的定义
数据库名称=数据库内容标识
2、表(Table)的定义
命名应尽量反映存储的数据内容,并且尽可能不使用复数。
例如使用Product,而不是Products。
如果表名与SQL关键字冲突,考虑加上Tbl后缀。
例如:
UserTbl,而不是[User]
表名称=表名前缀+表内容标识
如ClientInfo相关联的一系的表以ci作为前缀,
即有表名:
ciHistory,ciContact,ciBusiness
3、列/字段(Field)的定义
列名称命名采用英文单词或缩写,英文单词只来自于具体业务定义,尽量表达清楚含义。
例如:
AddressID
PostalCode
尽量避免使用拼音命名,如果不可避免,对于比较短的列名,采用拼音全写,如果拼音列名比较复杂,可以采用首个字用全拼,其它字用首字母大写表示。
例如:
宁波Ningbo
经营方式JingYFS
主键一般可以命名为<表名>+ID,如Product表的主键命名名ProductID。
使用单数名称,而不是复数名称
4、视图(View)的命名
视图的名称="v"+视图内容标识
如:
vUserTbl
5、触发器名
触发类型
Insert
Delete
Update
触发标识
i
d
u
触发名="tr"+触发标识+相应的表名
如:
triClient,trdClient。
6、变量名
Pascal命名方式,如@EmployeeName。
7、其它命名规则(暂定)
内容
前缀
示例
存储过程[StoreProcedure]
pr
prDeleteTerminatedReps
用户函数[Function]
fn
fnGetPY
其它
如主键、索引等,暂不作要求
8、SQL语句的编写规范(简)
数据库中存储过程和触发器中涉及大量的SQL语句,对SQL语句的编写规范如下:
关键字大写:
在SQL语句的编写中,凡是SQL语句的关键字一律大写,如:
SELECT、ORDERBY、GROUPBY、FROM、WHERE、UPDATE、INSERTINTO、SET、BEGIN、END......
比较一下:
SELECTID,UserNameFROMUserTblWHEREID=5
和
selectID,UserNamefromUserTblwhereID=5
适当的缩进
准确而精炼的注释
9、常用字段命名
这里的常用字段是指在建表时频繁使用的表名或列名,下表对常用字段进行建议性定义,
列名称
数据类型
说明
CreatedDate
datetime
纪录创建日期,一般使用GETDATE()自动生成
ModifiedDate
datetime
纪录最后修改日期,首次使用GETDATE()
DeletedDate
datetime
记录删除(标记删除)日期
StartDate
datetime
开始日期
EndDate
datetime
结束日期
StartTime
datetime
开始时间
EndTime
datetime
结束时间
ID
int
使用ID而不是Id或id。
一般为自增长主键列
…Code
string
字符串类型的代码,如PostCode,ProductCode
RowGuid
uniqueidentifier
唯一标识行的ROWGUIDCOL号,用于支持合并复制
ParentID
int
父ID
Status
int
状态
一十一、附录
1、commFile.snippet
xmlversion="1.0"encoding="utf-8"?
>
Expansion
文件注释
commFile
关于本文件的注释说明
bqkjyux20090129
owner
创建人
[owne][20090101]
fileComment
文件功能描述
[对此文件实现功能的描述]
[CDATA[/*
*Copyright(C)宝桥科技版权所有
*
*创建标识:
$owner$
*
*文件功能描述:
$fileComment$
*
*修改标识:
[修改人][日期]
*修改描述:
*
*/]]>
2、DOTNET关键字列表
AddHandler
AddressOf
Alias
And
Ansi
As
Assembly
Auto
Base
Boolean
ByRef
Byte
ByVal
Call
Case
Catch
CBool
CByte
Cchar
CDate
CDec
CDbl
Char
Cint
Class
CLng
CObj
Const
Cshort
CSng
CStr
CType
Date
Decimal
Declare
Default
Delegate
Dim
Do
Double
Each
Else
ElseIf
End
Enum
Erase
Error
Event
Exit
ExternalSource
False
Finalize
Finally
Float
For
Friend
Function
Get
GetType
Goto
Handles
If
Implements
Imports
In
Inherits
Integer
Interface
Is
Let
Lib
Like
Long
Loop
Me
Mod
Module
MustInherit
MustOverride
MyBase
MyClass
Namespace
New
Next
Not
Nothing
NotInheritable
NotOverridable
Object
On
Option
Optional
Or
Overloads
Overridable
Overrides
ParamArray
Preserve
Private
Property
Protected
Public
RaiseEvent
ReadOnly
ReDim
Region
REM
RemoveHandler
Resume
Return
Select
Set
Shadows
Shared
Short
Single
Static
Step
Stop
String
Structure
Sub
SyncLock
Then
Throw
To
True
Try
TypeOf
Unicode
Until
volatile
When
While
With
WithEvents
WriteOnly
Xor
Eval
extends
instanceof
package
var