|
登录后查才能浏览下载更多咨询,有问题联系QQ:3283999
您需要 登录 才可以下载或查看,没有账号?入住遨海湾
×
按:编程规范是程序员在实践中,为维护代码,便于集体开发,制定的一种约定,也是程序开发经验总结。你可以参考、制定自己的规范,但不可拘泥。8 ]/ x$ G3 \2 K, ]2 A- l: p
0 h5 F, k, {9 _6 \" ~在开发中保持良好的编码规范是十分重要的。我所采用的新的VB.net编码规范,是一种被证明能明显改善代码可读性,并有助于代码管理、分类的编码规范。采用这种编码规范,能避免如匈牙利命名法带来的繁长前缀,便于记忆变量的用途。下面的介绍这种编码规范。( F9 |, N( }, o9 _# |& X1 c
: h+ l% D6 P/ O
一、类型级单位的命名! m9 m: m! ]6 E4 A& x' J6 N$ d
- }/ e5 o/ D+ e; r! G1、类。* e% W+ ]. n* E* k7 h, i7 g
- V1 L4 R k6 z* l1 L; b" K" R% r以Class声明的类,都必须以名词或名词短语命名,体现类的作用。如: 2 P0 O9 c7 ]/ a0 S
Class Indicator
- H* P5 f0 y7 g; e+ h c3 }6 K, h6 R- E6 F
当类是一个特性(Attribute)时,以Attribute结尾,当类是一个异常(Exception)时,以Exception结尾: + s0 {+ o1 M) r! I0 x" ~4 w
Class ColorSetException ) W0 D% ]5 ] M8 n& c
Class CauseExceptionAttribute 2 |; M+ J8 u9 P9 @3 a: ?& Q
# t' F) w' W- [- \7 F3 ^6 r当类只需有一个对象实例(全局对象,比如Application等),必须以Class结尾,如
% B2 I9 s1 e/ p4 qClass ScreenClass ! S6 j6 h- H8 C0 z9 S
Class SystemClass $ Z8 ], G5 m/ M- t
/ G* e* c7 M8 R7 K, c- i
当类只用于作为其他类的基类,根据情况,以Base结尾:
: J: G7 J7 ^5 Q BMustInherit Class IndicatorBase ) S' z/ y5 Z. t" j" @
) s% z1 j4 q' N* h3 X
如果定义的类是一个窗体,那么名字的后面必须加后缀Form,如果是Web窗体,必须加后缀Page:
, {$ q; |& }7 J, }* V; CClass PrintForm : Inherits Form ‘* Windows窗体 6 W) l+ v1 t" a: y2 s
Class StartPage : Inherits Page ‘* Web窗体
$ P8 R0 C/ w, G; O. ?/ ]$ Q5 H2 l' A3 r. T
2、枚举和结构
+ V+ i* s- I) j$ ]1 s; e, T$ k, H) j- u; |7 j5 f$ C+ O6 K1 \3 q
同样必须以名词或名词短语命名。最好体现枚举或结构的特点,如:
# x$ O9 Y: F( v" ?: |8 @: ~Enum ColorButtons ‘以复数结尾,表明这是一个枚举 + p8 A# g1 c% W% `0 J
Structure CustomerInfoRecord ‘以Record结尾,表明这是一个结构体 ! T6 S" {) y( Z. Q/ U" Q
" D! C/ A2 G! L# {$ Z3 Y% H
3、委派类型
- P& _6 p6 l/ @# D5 s! u6 u普通的委派类型以描述动作的名词命名,以体现委派类型实例的功能:
. T& Q' ^" p' L& U$ UDelegate Sub DataSeeker (ByVal SeekString As String) 4 h3 q0 f$ Q0 ?6 K2 i# T
用于事件处理的委派类型,必须以EventHandler结尾,如:
1 O: t' w- _( F1 d, H2 W& nDelegate Sub DataChangedEventHandler (ByVal Sender As Object, ByVal e As DataChangedEventArgs)
% \" |1 x% F* @: q: r/ p1 K1 n: S+ y
3 d' U% p! S, K2 o4、接口 + }8 F' @- w( H4 P
与其他类型不同,接口必须要由I作为前缀,并用形容词命名,突出表现实现接口的类将具有什么能力: 0 g* }0 w, l% i1 k5 }7 ~+ A |
Interface ISortable
! z2 L2 I2 X! w+ Z+ ?
M* @4 C! w0 ]6 g$ i* J6 `+ h5、模块
3 | G N& \/ M$ r" M9 `模块不是类型,他的名称除了必须以名词命名外,必须加以后缀Module: ; d/ [7 }6 m3 U4 M- K
Module SharedFunctionsModule
6 L# B9 o! o& U( D) Y8 T$ ^, ^上述所有规则的共同特点是,每个组成名称的词语都必须是大写开头,禁止完全大写或小写的名称。
+ K' x! f/ m+ R3 a: M' C. z2 }4 q; m/ u! R3 n$ b! ~3 z+ I( n' [
二、方法和属性的命名
0 i! \# O; `' F
$ i4 }& E, E* y/ G1、方法 8 K1 y$ q3 a' _. C9 Z0 H5 C' \9 w# N
无论是函数还是子程序,方法都必须以动词或动词短语命名。无需区分函数和子程序,也无需指明返回类型。 2 F* w) ~5 g( v
Sub Open(ByVal CommandString As String) 4 N! i/ i! t" b, Z# \% _* d6 Q7 H
Function SetCopyNumber(ByVal CopyNumber As Integer) 5 Z) @# m5 d1 I. I
参数需要指明ByVal还是ByRef,这一点写起来会让程序边长,但非常必要。如果没有特别情况,都使用ByVal。参数的命名方法,参考后面“变量的命名方法”。需要重载的方法,一般不写Overloads,根据需要编写重载的方法。 / `8 h2 z* y0 ?" @6 Q$ J
# v2 m9 S' f& \& V2、属性
; f& e) _; W; x* }: o原则上,字段(Field)是不能公开的,要访问字段的值,一般使用属性。属性以简洁清晰的名词命名: 2 y& e, C+ C1 U+ e: m; [- @$ {
Property Concentration As Single
* z; ^$ J. {$ F9 }- UProperty Customer As CustomerTypes
% q: x$ k1 ` C$ f) b6 m6 ?/ d T# g7 y3 F4 V
3、事件
: V7 n% s& {" b4 Y) e事件是特殊的属性,只能在事件处理上下文中使用。命名的原则一般是动词或动词的分词,通过时态表明事件发生的时间:
- l2 t' [" f- t0 x) bEvent Click As ClickEventHandler
, O, _$ Y$ ~" PEvent ColorChanged As ColorChangedEventHangler1 r% y& Y' s' u: E* i
& `" c6 I2 y2 s7 d
三、变量和常数
8 g" c5 \/ G- Y/ ~
F) Y) |; E P& f5 i常数以表明常数意义的名词命名,一般不区分常数的类型: ' p1 F" K6 {# d% X3 n) x- @
Const DefaultConcentration As Single = 0.01 + w, D0 ?6 w- Q% `% q G6 v
在严格要求的代码中,常数以c_开头,如c_DefaultConcentration,但最好不要用它,它会带来输入困难。 ' Y. }5 P) j; g! L) R& @
普通类型的变量,只要用有意义的名字命名即可,不可使用简称和无意义的名称诸如A,x1等,下面给出了良好的例子:
! H q" z" Z- h! V' q+ ZDim Index As Integer
' A* @/ ` j) Q1 h0 QDim NextMonthExpenditure As Decimal
6 M! ^& |# p: s$ |/ `7 [3 CDim CustomerName As String
! F2 B( o D% I8 |/ [+ k# N) w不能起太长的名字,应该尽量简洁,如下面的例子:
, I B& q; E' v2 \Dim VariableUsedToStoreSystemInformation As String ‘* 错误,太复杂了 4 z- q7 N' o( N4 L/ A1 ~+ b9 y
Dim SystemInformation As String ‘* 正确,简单明了 H/ h9 D4 L: M6 S: M
Dim sysInfo As String ‘* 错误,过于简单 4 t! ^! s' |3 U4 s" O/ p: @
特殊情况可以考虑一个字母的变量: 3 u9 o" Y6 w0 J. M
Dim g As Graphic
2 T- W5 b/ }( d& e& ^对于控件,应该指明控件的类型,方法是直接在变量后面加以类名: 0 K8 Q. u/ ?) k/ j) o2 @
Friend WithEvents NextPageButton As Button ‘* 按钮
Z. C) N0 H& O4 W/ r8 @7 R1 DFriend WithEvents ColorChoicerPanel As Panel ‘* 面版 / C% c0 ^" D5 L- p3 o9 f4 k
Friend WithEvents CardFileOpenDialog As FileOpenDialog ‘* 文件打开对话框
( m* Q# }* r- a% z等等,无需规定某种类型的变量的前缀,只需把类型写在后面就行了,试对比下列代码:
) U# v: W- ]! ibtnCancel.Text = "&Cancel" * G( ]# N5 ~1 F$ l' k- L# N4 x
CancelButton.Text = "&Cancel"
/ U$ o! y+ E) c1 H; v显然后者更能使阅读者明白变量的类型是一个按钮。4 ?7 e& x8 ?9 S; C! C
/ p& R1 y% C" E8 j四、标签 4 x% ]# V/ K! F( R8 D6 E
6 w: r4 l0 @5 f: t. k( c: P
标签就是用于Goto跳转的代码标识,由于Goto并不推荐使用,所以标签的使用也比较苛刻。标签必须全部大写,中间的空格用下划线_代替,而且应该以_开头,比如:
2 g( Z& R' L ]6 H, K; j, S_A_LABEL_EXAMPLE:
: c) B# [+ G: [( ^& i; m如此定义标签是为了与其他代码元素充分区别。
2 {2 V; l+ N* `; A( \# a1 T
6 t1 b, j Q/ F; O! @五、名字空间 # E1 m1 q' T1 B! p5 b+ S
' j2 x3 t' w5 ]
通常,一个工程使用一个名字空间,通常不需要用Namespace语句,而是在工程选项的“Root Namespace”中指定,使用根名字空间可以使代码更加整齐,容易修改,这一点是VB十足的优点。名字空间的语法是:
' ^8 s% [- u) Y# D, R公司名.产品名[.组件名的复数] 5 e( r8 [) C( b: [6 j9 q
如:
2 B! }9 O' ^0 A$ qNamespace Ninputer.VirtualScreen - E# n0 T& n' \# x$ k
Namespace Ninputer.CardEditor.CustomeControls
$ V" k" R2 ?3 D. @- L随便起一个名字空间的名字绝对不是一个好主意,一定要遵守上述规定。
. x) F# n$ {& o4 F1 i3 Y$ M7 j
. _7 ~ T$ a, N' r3 ~% {- W" C六、注释
7 e9 n/ Z+ f5 S6 s* d$ N
; P2 i. P$ c- I9 N0 j: D注释的规则繁多,这里仅提到其中一点:正常的注释以‘*开头,单独的‘只用来注释暂时不用的代码 0 ^. u. @+ R; H' ?3 \9 w
‘* 这是普通的注释
/ t& T1 l! C. |- B( S$ z7 ~‘* 这段代码在调试正确后加入 - G6 v; {6 [; ~
‘If UseHighSpeed(g) = True Then .... " [& Y* W2 \4 f5 b1 S
这样能够方便的采用代码注释工具控制代码的使用。 , @# z+ Q* @" K, z
以上已经简单的介绍了我使用的VB.net代码规范,这个代码规范也适用于C#。仅供大家参考。 |
|