找回密码
 入住遨海湾
搜索
网站解决方案专享优惠-3折上云
查看: 969|回复: 0

VB.net编码规范(转帖)

[复制链接]
发表于 2004-12-15 22:38:00 | 显示全部楼层 |阅读模式

登录后查才能浏览下载更多咨询,有问题联系QQ:3283999

您需要 登录 才可以下载或查看,没有账号?入住遨海湾

×
按:编程规范是程序员在实践中,为维护代码,便于集体开发,制定的一种约定,也是程序开发经验总结。你可以参考、制定自己的规范,但不可拘泥。* s { Q1 j" l/ n5 s 4 l8 Y% V b/ x+ f. O$ w在开发中保持良好的编码规范是十分重要的。我所采用的新的VB.net编码规范,是一种被证明能明显改善代码可读性,并有助于代码管理、分类的编码规范。采用这种编码规范,能避免如匈牙利命名法带来的繁长前缀,便于记忆变量的用途。下面的介绍这种编码规范。 1 p) [; G% j7 j _ / i8 b7 d/ p# {一、类型级单位的命名 ; }; ]. Z& m% ?. @. S* h& {8 R/ M 6 z' @! h% ^3 G1、类。 , Z/ L9 b) ~, O3 ^ ' B7 v5 N$ F* A& \2 M( ~8 A6 [以Class声明的类,都必须以名词或名词短语命名,体现类的作用。如: " X8 ]/ H X6 ^% P7 h0 aClass Indicator 7 i2 F7 V2 r# Q, J5 ?% x7 D 2 P8 A3 M* q" G# E6 J; a8 ]; c当类是一个特性(Attribute)时,以Attribute结尾,当类是一个异常(Exception)时,以Exception结尾: - I9 `, s: z9 Y0 ]0 S7 gClass ColorSetException {& J7 ]3 {. }1 ~ Class CauseExceptionAttribute 9 u8 E$ R1 i4 ?! a5 d4 O8 ]. h* r, @/ `% r' C 当类只需有一个对象实例(全局对象,比如Application等),必须以Class结尾,如 ( u* u8 W" i2 B6 ^/ I Class ScreenClass 7 t1 W2 g" ?' W; U9 } Class SystemClass Q* ]6 k: C( ?8 I0 z' ?. d6 H $ n, R4 d! u. |9 q当类只用于作为其他类的基类,根据情况,以Base结尾: 8 @2 U F: j9 D% }' j/ f3 p- K4 ~MustInherit Class IndicatorBase : x# C3 P7 Y( q- \* c % \* x5 _: L/ y, L0 e3 R 如果定义的类是一个窗体,那么名字的后面必须加后缀Form,如果是Web窗体,必须加后缀Page: 2 v$ Q q: E- f& ]$ F4 p) J: o Class PrintForm : Inherits Form ‘* Windows窗体 $ `( A% `2 `2 ~( a) t Class StartPage : Inherits Page ‘* Web窗体 7 `' L/ C+ O" n7 H 5 ?6 u& n5 J: V& b" E" M2、枚举和结构 7 U+ \2 }- ] V: g7 }+ v 8 B6 N& D7 P" ^" K* n) A同样必须以名词或名词短语命名。最好体现枚举或结构的特点,如: # W) `" L- g# S/ F" J+ WEnum ColorButtons ‘以复数结尾,表明这是一个枚举 * U# C0 s( W. _* |+ t7 C, @) C5 AStructure CustomerInfoRecord ‘以Record结尾,表明这是一个结构体 8 N/ u( q3 j7 M# K8 ]4 o % w, P1 Q0 m: V- ~ 3、委派类型 % ?! M3 {* _1 \6 n& z2 u 普通的委派类型以描述动作的名词命名,以体现委派类型实例的功能: : F/ N: V% N! [8 @! R4 GDelegate Sub DataSeeker (ByVal SeekString As String) 7 F9 Q4 V4 B9 w/ N4 v0 a用于事件处理的委派类型,必须以EventHandler结尾,如: 2 E1 M$ q# g- X5 l% `: H/ G Delegate Sub DataChangedEventHandler (ByVal Sender As Object, ByVal e As DataChangedEventArgs) - F0 X4 C$ M2 M( i7 ^* Z- r3 Z # w: Y4 B. ~. x- c6 \ 4、接口 * h5 d) l5 E% ?7 |% J- F与其他类型不同,接口必须要由I作为前缀,并用形容词命名,突出表现实现接口的类将具有什么能力: ' J4 P; p! }5 OInterface ISortable . k' ^, @ k/ y$ x) Z 0 q$ B* }' a/ X2 O5、模块 " X- z5 v- _/ R. e2 }模块不是类型,他的名称除了必须以名词命名外,必须加以后缀Module: - Q/ b! C% a# L1 {9 l0 ?, XModule SharedFunctionsModule + v; ?9 L3 c$ ^. i+ v! |: C2 m上述所有规则的共同特点是,每个组成名称的词语都必须是大写开头,禁止完全大写或小写的名称。 : l7 h' u; T3 R% H - Y3 d p* f2 S/ e+ v% e( A/ r" m+ I二、方法和属性的命名 4 {9 q! f2 f: T1 } ( y- |, b) M4 D. P- r: p, m1、方法 - H2 i9 ^/ V' y$ O7 v. z5 j# w 无论是函数还是子程序,方法都必须以动词或动词短语命名。无需区分函数和子程序,也无需指明返回类型。 2 r% i$ C9 P7 I Sub Open(ByVal CommandString As String) - Z4 I' y: Y: H5 s9 r j3 a+ T0 D1 iFunction SetCopyNumber(ByVal CopyNumber As Integer) : F* @/ x2 X {/ Y 参数需要指明ByVal还是ByRef,这一点写起来会让程序边长,但非常必要。如果没有特别情况,都使用ByVal。参数的命名方法,参考后面“变量的命名方法”。需要重载的方法,一般不写Overloads,根据需要编写重载的方法。 3 j" i$ \3 O: r- C+ N2 S1 W3 Z * D# A$ f6 [! H3 l 2、属性 ; Y" f1 O. L- N0 Y原则上,字段(Field)是不能公开的,要访问字段的值,一般使用属性。属性以简洁清晰的名词命名: % h4 c: G- P% D- UProperty Concentration As Single $ {+ s+ b) |2 `* t Property Customer As CustomerTypes ' t$ N5 n: ]. F) n ) T9 n& w& u B- r: |) q$ V l 3、事件 # A$ o! m% H* M4 L+ y事件是特殊的属性,只能在事件处理上下文中使用。命名的原则一般是动词或动词的分词,通过时态表明事件发生的时间: & P1 l! u1 G T/ [8 H, B: v) E9 c9 Y Event Click As ClickEventHandler 7 ^6 y3 p7 B& g6 y. A" a, C Event ColorChanged As ColorChangedEventHangler% A6 H7 O8 t/ g5 `& G9 p * d) ^; }2 J* P* L5 L5 w8 I* p) Y0 P三、变量和常数 # B W( {" |7 l! J$ s z/ ?/ z$ [3 u: A, K6 Y$ E 常数以表明常数意义的名词命名,一般不区分常数的类型: / s+ ^" V/ N. r3 A* x5 f8 B" L! k Const DefaultConcentration As Single = 0.01 * ~. S" I; _" Q在严格要求的代码中,常数以c_开头,如c_DefaultConcentration,但最好不要用它,它会带来输入困难。 4 Y, j2 g, T5 H" k5 T6 g; q普通类型的变量,只要用有意义的名字命名即可,不可使用简称和无意义的名称诸如A,x1等,下面给出了良好的例子: 8 @5 t+ F) T% o3 u; b9 z Dim Index As Integer . I8 [% h8 P5 x4 V, {Dim NextMonthExpenditure As Decimal 2 k8 _! f4 ]6 q8 Q, zDim CustomerName As String / @( L, E* [" i: M1 u* l 不能起太长的名字,应该尽量简洁,如下面的例子: " m" {3 O) t# ?; ^Dim VariableUsedToStoreSystemInformation As String ‘* 错误,太复杂了 ) G0 p& j7 }: t/ P0 u" H Dim SystemInformation As String ‘* 正确,简单明了 ! `; h5 k: R2 ]( j* k: c0 ?% O4 JDim sysInfo As String ‘* 错误,过于简单 % Y2 \. L5 j* ^$ s! c8 |- X) L特殊情况可以考虑一个字母的变量: . }$ o* {* U: v9 D% oDim g As Graphic - K6 d c5 n' d) k6 k对于控件,应该指明控件的类型,方法是直接在变量后面加以类名: - o% J; a$ Y- C4 XFriend WithEvents NextPageButton As Button ‘* 按钮 - [! w$ D+ V6 e$ |6 h& ~7 K$ RFriend WithEvents ColorChoicerPanel As Panel ‘* 面版 " W U4 n4 {; a, S2 c9 H9 }, U Friend WithEvents CardFileOpenDialog As FileOpenDialog ‘* 文件打开对话框 3 o4 o6 |/ H5 U0 E6 R/ Z1 O1 V( f 等等,无需规定某种类型的变量的前缀,只需把类型写在后面就行了,试对比下列代码: " b" L: P E1 g/ c# U1 B4 s btnCancel.Text = "&Cancel" S+ a5 U, T! K0 ]- P/ \* g7 h! a9 y CancelButton.Text = "&Cancel" + W: V" u) m# d9 J B显然后者更能使阅读者明白变量的类型是一个按钮。0 C, u% O) I6 t* `8 C1 ?0 ] ! {# U. D5 s' q四、标签 ! |( H7 R1 ]( z2 P ! E7 ~# `! g8 d7 T5 T5 e8 `6 Y. L. z标签就是用于Goto跳转的代码标识,由于Goto并不推荐使用,所以标签的使用也比较苛刻。标签必须全部大写,中间的空格用下划线_代替,而且应该以_开头,比如: , w$ _- M- c' y G, ^3 Y_A_LABEL_EXAMPLE: " O* U6 g! z* N如此定义标签是为了与其他代码元素充分区别。 6 }& X! ?# h8 w0 c; N5 i 3 }4 Y# [2 ]% L0 T v9 c) D: Z& Y% Z五、名字空间 ! x2 D7 C4 h5 l8 t5 A0 i+ d6 A* [! m. u" t6 a3 q3 v+ [( W' { 通常,一个工程使用一个名字空间,通常不需要用Namespace语句,而是在工程选项的“Root Namespace”中指定,使用根名字空间可以使代码更加整齐,容易修改,这一点是VB十足的优点。名字空间的语法是: 9 l7 h2 c$ o% \. M9 R$ g 公司名.产品名[.组件名的复数] 3 D2 d; u6 t* D& T. l! Z+ n如: : }; L( {& }1 h+ b* uNamespace Ninputer.VirtualScreen 0 [, z; t0 N/ N" _$ h2 a Namespace Ninputer.CardEditor.CustomeControls $ _2 \- F" M' L随便起一个名字空间的名字绝对不是一个好主意,一定要遵守上述规定。 4 ~, T( ?' w4 ]! [: z" \2 Y & `% Z( J& s4 a6 q% q2 H2 D N六、注释 9 v" i9 i5 i* G* J- r 8 m$ v! w) O' \+ ~% e0 Z: C" A; h t 注释的规则繁多,这里仅提到其中一点:正常的注释以‘*开头,单独的‘只用来注释暂时不用的代码 - L1 {7 U1 w' b# X‘* 这是普通的注释 0 k5 F ?8 a5 h) |: Z6 c‘* 这段代码在调试正确后加入 ' T/ T; `2 ]# ]. ?‘If UseHighSpeed(g) = True Then .... t/ N/ B1 u+ c4 L# d$ t 这样能够方便的采用代码注释工具控制代码的使用。 , r$ Y) ~* G# l; a 以上已经简单的介绍了我使用的VB.net代码规范,这个代码规范也适用于C#。仅供大家参考。
遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

网站解决方案专享优惠-3折上云

QQ|手机版|小黑屋|遨海湾超级社区

GMT+8, 2025-4-4 22:51

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表