|
登录后查才能浏览下载更多咨询,有问题联系QQ:3283999
您需要 登录 才可以下载或查看,没有账号?入住遨海湾
×
按:编程规范是程序员在实践中,为维护代码,便于集体开发,制定的一种约定,也是程序开发经验总结。你可以参考、制定自己的规范,但不可拘泥。( Y8 p% a+ C( w" [ X, O, G; ~$ _/ U* ~
8 w& Z/ y' C2 x& k& J
在开发中保持良好的编码规范是十分重要的。我所采用的新的VB.net编码规范,是一种被证明能明显改善代码可读性,并有助于代码管理、分类的编码规范。采用这种编码规范,能避免如匈牙利命名法带来的繁长前缀,便于记忆变量的用途。下面的介绍这种编码规范。 S* Z; W t. n' u/ G" j/ U
5 a- {, }, q: l( R* ]& [一、类型级单位的命名
% |9 y. C3 L, h) ?5 D2 ?7 }
" r8 J5 q" p; o- Q1、类。( H% U6 p9 C3 H
% ?& c1 `. r z! k: Z, E以Class声明的类,都必须以名词或名词短语命名,体现类的作用。如: 3 R0 I+ h7 \# n! v/ |* G9 I
Class Indicator $ T2 n. u6 U! \
k6 P0 i1 z8 s8 J/ q2 A; H% f当类是一个特性(Attribute)时,以Attribute结尾,当类是一个异常(Exception)时,以Exception结尾: & Z2 K7 B( C' x" N! V: |' i8 t
Class ColorSetException
6 b+ H' I1 t- V. ~Class CauseExceptionAttribute
1 V7 I4 ` O3 B$ t& q; A2 ~! T0 q2 W# A j Z, f
当类只需有一个对象实例(全局对象,比如Application等),必须以Class结尾,如 0 Q. A& p: o8 `; q8 K5 U
Class ScreenClass
4 _: o. n* T4 |+ P) ZClass SystemClass ; L2 Z+ R# J* B, z
* {2 a9 F- p5 j. b" S. _
当类只用于作为其他类的基类,根据情况,以Base结尾: ; y" M& }% z# j6 Z' N% G$ P
MustInherit Class IndicatorBase 8 A" ~: T: r' a' C5 H) [0 [, s
$ S! b' R% \& n4 Q6 m如果定义的类是一个窗体,那么名字的后面必须加后缀Form,如果是Web窗体,必须加后缀Page: ! y3 Y4 q9 `6 j2 o4 ~, P0 \: |
Class PrintForm : Inherits Form ‘* Windows窗体
& I9 d) f5 ` C+ m% S$ g$ xClass StartPage : Inherits Page ‘* Web窗体
$ ] e% p4 V, S
* x f0 m0 U: k4 U3 J7 B1 r# I- b2、枚举和结构 2 a& I& S+ Y1 g. p4 @: |; c$ M9 _
- A/ \9 A, u: a' `3 b( q, A- e& u# ? F; V同样必须以名词或名词短语命名。最好体现枚举或结构的特点,如:
( Z% \8 F# Q7 C8 sEnum ColorButtons ‘以复数结尾,表明这是一个枚举
7 m; x6 o% B. E9 ?0 KStructure CustomerInfoRecord ‘以Record结尾,表明这是一个结构体 \+ o' ^- I% s3 l Z1 Y
; }9 g$ _( v) C- v0 `3、委派类型
; `1 F1 f% O6 V8 M- h: D普通的委派类型以描述动作的名词命名,以体现委派类型实例的功能:
( g6 M# ]4 ^& r+ y1 RDelegate Sub DataSeeker (ByVal SeekString As String) " r; ]) A. z( T- B! F3 c
用于事件处理的委派类型,必须以EventHandler结尾,如:
H8 U. Q- Z7 i; W: A \Delegate Sub DataChangedEventHandler (ByVal Sender As Object, ByVal e As DataChangedEventArgs) % M, J. @/ n# C( l! v
; d* m2 x) ?+ V4 a. p% b4、接口 # \" \4 N; f( z* C( }3 t
与其他类型不同,接口必须要由I作为前缀,并用形容词命名,突出表现实现接口的类将具有什么能力: 0 o2 ~! D4 j/ ?+ z: |+ X6 @9 h1 h3 k
Interface ISortable ' Y6 q3 K9 M- q& a( f8 f
- w7 Z* I2 v! k6 _6 `5、模块 , h! O& s! Y6 d. L. D2 O5 y8 k
模块不是类型,他的名称除了必须以名词命名外,必须加以后缀Module:
, C% I7 M8 g4 R* fModule SharedFunctionsModule ( x/ b7 q1 Y( |3 S& P
上述所有规则的共同特点是,每个组成名称的词语都必须是大写开头,禁止完全大写或小写的名称。 + F/ k: ^! c, k1 J1 E9 _
7 Q! |8 O; L& S- P二、方法和属性的命名 . ]( P9 G7 l$ B1 X. q9 G+ g1 t
5 [+ t! C) z# [1、方法
7 p& I; I0 U' h* R& u无论是函数还是子程序,方法都必须以动词或动词短语命名。无需区分函数和子程序,也无需指明返回类型。 0 f4 p/ B% {" D+ }0 \/ M
Sub Open(ByVal CommandString As String) P. U$ W5 f; r+ ]. }. ^5 J
Function SetCopyNumber(ByVal CopyNumber As Integer)
3 I6 k0 N0 `# S参数需要指明ByVal还是ByRef,这一点写起来会让程序边长,但非常必要。如果没有特别情况,都使用ByVal。参数的命名方法,参考后面“变量的命名方法”。需要重载的方法,一般不写Overloads,根据需要编写重载的方法。
. J8 X5 y, B" o3 f3 A# i ^! @
2、属性
l! {! j2 R6 X4 d0 r原则上,字段(Field)是不能公开的,要访问字段的值,一般使用属性。属性以简洁清晰的名词命名:
: k) x5 S- Z9 K5 X; N/ l# tProperty Concentration As Single & K* _6 e& N8 A7 }9 A
Property Customer As CustomerTypes
2 j( o' s) J: S% y9 S, Q. ?1 c( {
0 K6 j& U0 n4 q. U- n3、事件 # d8 q: H3 ^. K5 X U
事件是特殊的属性,只能在事件处理上下文中使用。命名的原则一般是动词或动词的分词,通过时态表明事件发生的时间: ' B1 C9 f! I& L9 R% `
Event Click As ClickEventHandler
3 ~2 O' g# ?" F; A& r9 dEvent ColorChanged As ColorChangedEventHangler7 {$ a- w8 L, D2 ]
7 K8 @! [* j/ v! t1 f
三、变量和常数
! V% D L$ P& U" Z w/ Y6 ]# e: G: W" r/ C" N4 G
常数以表明常数意义的名词命名,一般不区分常数的类型:
( y9 n9 ]8 E% o: BConst DefaultConcentration As Single = 0.01 ! X+ n2 p2 H, Y2 ]* t2 t# ?
在严格要求的代码中,常数以c_开头,如c_DefaultConcentration,但最好不要用它,它会带来输入困难。 7 }/ M: K% @+ z$ y' M
普通类型的变量,只要用有意义的名字命名即可,不可使用简称和无意义的名称诸如A,x1等,下面给出了良好的例子: ) {2 ~$ g) J) r% t" K1 ^3 j* g
Dim Index As Integer
3 f/ J/ ~* F1 e& @( JDim NextMonthExpenditure As Decimal / E, h2 ?0 w- y* ]) b) H% Z
Dim CustomerName As String
" c9 W! ?6 q; f: O: d) f不能起太长的名字,应该尽量简洁,如下面的例子:
( [0 m/ _6 o( M# S8 kDim VariableUsedToStoreSystemInformation As String ‘* 错误,太复杂了 / T( z2 ^. g0 n7 e6 ^! Q* S) O* d
Dim SystemInformation As String ‘* 正确,简单明了 - u& `# F7 f5 b0 F6 Y
Dim sysInfo As String ‘* 错误,过于简单 3 k, l2 E% F' n9 `
特殊情况可以考虑一个字母的变量:
4 |9 y" I n, d0 b5 x& T& G% g/ HDim g As Graphic
& \2 z' C8 |2 x* p% ~ E& ~对于控件,应该指明控件的类型,方法是直接在变量后面加以类名: ) Y! g" o' E4 b2 s+ P2 P# U
Friend WithEvents NextPageButton As Button ‘* 按钮 2 z& ~1 z% y1 i4 x* W: }
Friend WithEvents ColorChoicerPanel As Panel ‘* 面版
! s. f! O4 W. k, Y$ PFriend WithEvents CardFileOpenDialog As FileOpenDialog ‘* 文件打开对话框
+ Y" l3 {' W. v% z/ A8 V4 F等等,无需规定某种类型的变量的前缀,只需把类型写在后面就行了,试对比下列代码: $ E; W6 x8 c I' I
btnCancel.Text = "&Cancel"
$ |7 Z8 @# m& L3 w gCancelButton.Text = "&Cancel" 3 F- g9 s8 [4 k& A6 c* x
显然后者更能使阅读者明白变量的类型是一个按钮。$ n2 o3 k, y5 Z# H9 N6 i$ H
' s7 a9 e: q. |四、标签 , @0 b" F8 ?, R. z0 a
, y( }5 J+ X: {: q+ Y
标签就是用于Goto跳转的代码标识,由于Goto并不推荐使用,所以标签的使用也比较苛刻。标签必须全部大写,中间的空格用下划线_代替,而且应该以_开头,比如:
5 _* @6 G* z1 x' I+ ~# o_A_LABEL_EXAMPLE:
$ I1 @ _% ]5 q! y) Q/ z9 @2 W7 A如此定义标签是为了与其他代码元素充分区别。 ; r, E' [$ q' h* ]7 K
# s: }$ h* I& Y+ h4 E7 U五、名字空间 ( Q1 w' a2 V/ b+ H
]5 u' G6 x( M/ ~" w- k8 O2 d- h
通常,一个工程使用一个名字空间,通常不需要用Namespace语句,而是在工程选项的“Root Namespace”中指定,使用根名字空间可以使代码更加整齐,容易修改,这一点是VB十足的优点。名字空间的语法是:
" p: Q: C t: W" b- D公司名.产品名[.组件名的复数] 2 i# |; w v( A, g1 ~3 n: j
如: ( l& U6 n" H; }% O6 R3 B" M* \ y
Namespace Ninputer.VirtualScreen
9 E3 c8 S$ D9 c |; U6 `' HNamespace Ninputer.CardEditor.CustomeControls 8 a) {9 x" K( b. S4 l
随便起一个名字空间的名字绝对不是一个好主意,一定要遵守上述规定。
( Q4 G* _$ R0 } }
' ^/ K' C b/ B# O( M, U3 g8 P六、注释 8 t3 j: J( Y/ t% [7 F% J* k0 D) W
& ?+ {6 X( Y; m8 Y8 M; G! o/ f" P注释的规则繁多,这里仅提到其中一点:正常的注释以‘*开头,单独的‘只用来注释暂时不用的代码 0 t* e. g, G& L$ [9 Z2 r
‘* 这是普通的注释
. J& Q. [+ h7 u) @' ^& {. u$ e+ x‘* 这段代码在调试正确后加入
4 ], i. k' `8 x; E2 ^+ R‘If UseHighSpeed(g) = True Then .... 8 g; R G& X8 ^1 o3 ]
这样能够方便的采用代码注释工具控制代码的使用。
: ]6 i, N: s! }1 K9 D5 }以上已经简单的介绍了我使用的VB.net代码规范,这个代码规范也适用于C#。仅供大家参考。 |
|