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

VB.net编码规范(转帖)

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

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

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

×
按:编程规范是程序员在实践中,为维护代码,便于集体开发,制定的一种约定,也是程序开发经验总结。你可以参考、制定自己的规范,但不可拘泥。8 W+ y$ D* I4 z5 C6 e$ \ R! m , T+ r; r4 ]9 r/ S0 J) Q. V在开发中保持良好的编码规范是十分重要的。我所采用的新的VB.net编码规范,是一种被证明能明显改善代码可读性,并有助于代码管理、分类的编码规范。采用这种编码规范,能避免如匈牙利命名法带来的繁长前缀,便于记忆变量的用途。下面的介绍这种编码规范。' ~2 D# m0 s* S; G& r0 k 7 \; U8 Z& A2 Y& q一、类型级单位的命名5 ?- [' c0 }+ p* w" ?1 u 3 M! Z5 K* o, W. I2 O" Q; s7 ]" E 1、类。' Y1 j3 b% R3 `4 y: |/ ^, s5 H 7 Y4 Z" ^6 v1 \8 M 以Class声明的类,都必须以名词或名词短语命名,体现类的作用。如: 9 Z; M) g+ _' F* A: k$ HClass Indicator - m ^- S% V/ G- F, G) P & c( s& b ]0 H, D7 J当类是一个特性(Attribute)时,以Attribute结尾,当类是一个异常(Exception)时,以Exception结尾: 2 i" r6 d2 P; m B Class ColorSetException 7 \7 m: ^' i$ q# G" ?' L% s8 b' r7 LClass CauseExceptionAttribute # n8 A* R% U9 y/ }( o & |6 V! y3 z2 W* ^9 T/ O当类只需有一个对象实例(全局对象,比如Application等),必须以Class结尾,如 6 s2 F1 G; ~3 F/ W2 L0 Z; T Class ScreenClass ) Y& x! ^1 {1 h. g& ]9 U% q, uClass SystemClass % {% C7 F: K# C }2 s1 D8 g( ] # u J5 ^* {* n7 X* p$ g 当类只用于作为其他类的基类,根据情况,以Base结尾: * }, v. h$ y2 VMustInherit Class IndicatorBase , r8 P: b( c- {7 I9 b1 s# ~0 k i# o 1 m" Y) U; M/ Q如果定义的类是一个窗体,那么名字的后面必须加后缀Form,如果是Web窗体,必须加后缀Page: $ h. W1 i8 k, R3 f6 v2 I Class PrintForm : Inherits Form ‘* Windows窗体 ! h" g' I' u0 V! O( WClass StartPage : Inherits Page ‘* Web窗体 9 {' u, r* S6 u8 V; b2 ~8 }1 h+ Z2 s( [$ N3 r 2、枚举和结构 + W0 {' U1 |1 P' v z$ h9 f , k3 V. E! n/ e$ ~- @同样必须以名词或名词短语命名。最好体现枚举或结构的特点,如: \ m: U7 P" N/ \6 ]$ F) q Enum ColorButtons ‘以复数结尾,表明这是一个枚举 & B0 Y2 I8 n n4 K7 \ Structure CustomerInfoRecord ‘以Record结尾,表明这是一个结构体 . U) T6 K2 d g8 ^& l% Q; I; p , l/ w5 Q3 p j. s6 [: `+ @8 F3、委派类型 : U# p+ k& L# U2 a1 ?5 J普通的委派类型以描述动作的名词命名,以体现委派类型实例的功能: 9 q3 V8 E% ^7 ^9 [& n6 n Delegate Sub DataSeeker (ByVal SeekString As String) 4 {3 L0 f$ o5 q8 Z) ? 用于事件处理的委派类型,必须以EventHandler结尾,如: / n \7 s7 J: m Delegate Sub DataChangedEventHandler (ByVal Sender As Object, ByVal e As DataChangedEventArgs) % e& V6 l* z0 S2 W2 } & L, V$ ]$ E1 p. ], N; T- T- k! [8 Q 4、接口 - _8 v3 I' R3 w' P+ Z3 W 与其他类型不同,接口必须要由I作为前缀,并用形容词命名,突出表现实现接口的类将具有什么能力: ) k5 a& b% {7 h, r) K Interface ISortable " _! D. n3 k( I6 `7 a. y4 z& T! ` 3 b7 k. E# ^/ m1 m4 m2 W2 X5、模块 + j) l" R6 B+ q 模块不是类型,他的名称除了必须以名词命名外,必须加以后缀Module: 9 c8 C1 R" i. l" b Module SharedFunctionsModule * X. b3 n: w. L$ G8 B" P上述所有规则的共同特点是,每个组成名称的词语都必须是大写开头,禁止完全大写或小写的名称。 7 _8 s, `% o" d; O6 n 0 P& `. C9 H: D; ^$ Q2 |' K9 i二、方法和属性的命名 # l& I' p7 f7 g( I 8 u! v) l- d% q1 k/ Z4 F! a1、方法 0 R! t) _: g; |. X( A/ P. C 无论是函数还是子程序,方法都必须以动词或动词短语命名。无需区分函数和子程序,也无需指明返回类型。 8 @- V. r p) Z3 U Sub Open(ByVal CommandString As String) |% ]5 K2 O; w- }( D- G, V Function SetCopyNumber(ByVal CopyNumber As Integer) % z9 H% q9 ~ Z4 S/ O! C参数需要指明ByVal还是ByRef,这一点写起来会让程序边长,但非常必要。如果没有特别情况,都使用ByVal。参数的命名方法,参考后面“变量的命名方法”。需要重载的方法,一般不写Overloads,根据需要编写重载的方法。 4 o8 r( y- A1 `( P - l. r! }8 H: Y: |$ [+ d2、属性 , w% `0 d+ K' J: x/ j/ P原则上,字段(Field)是不能公开的,要访问字段的值,一般使用属性。属性以简洁清晰的名词命名: 6 Y4 k! l0 e7 p, M3 J( u) s Property Concentration As Single " j H+ ^& }( N9 v: v8 D7 \ Property Customer As CustomerTypes ; d7 r2 q5 \8 a9 m: G# Y2 l! S$ C/ K# P 3、事件 4 m! ~; V3 T% O! x 事件是特殊的属性,只能在事件处理上下文中使用。命名的原则一般是动词或动词的分词,通过时态表明事件发生的时间: , j* F3 w% r4 c' x3 @Event Click As ClickEventHandler 0 U$ _ T, y9 w. I9 B Event ColorChanged As ColorChangedEventHangler" F8 h6 @0 E+ m3 z; q3 ~6 D : S8 R+ E* B6 x三、变量和常数 . t' ~1 V6 o7 Z- e3 R9 y# x5 W6 B3 a: M/ s. Y# J& b k 常数以表明常数意义的名词命名,一般不区分常数的类型: : S4 t3 R) T& @; f$ s8 D. @. G2 T" q Const DefaultConcentration As Single = 0.01 # S5 e! n5 P8 J5 K! Z8 ]在严格要求的代码中,常数以c_开头,如c_DefaultConcentration,但最好不要用它,它会带来输入困难。 " L, n# y' }# C7 P普通类型的变量,只要用有意义的名字命名即可,不可使用简称和无意义的名称诸如A,x1等,下面给出了良好的例子: 7 b+ t* u9 S. P- J$ ^# a Dim Index As Integer - b' `8 |1 b$ a8 U) |Dim NextMonthExpenditure As Decimal ; T1 n% H# s; n" m. @ Dim CustomerName As String 9 |1 g7 I4 x( T- z* `2 Q不能起太长的名字,应该尽量简洁,如下面的例子: 6 @# L+ n2 n7 o* [% Q: B Dim VariableUsedToStoreSystemInformation As String ‘* 错误,太复杂了 e" P. J# Z& a5 j6 v# I, ~0 i6 v; z Dim SystemInformation As String ‘* 正确,简单明了 1 c: e; R' l, q% o% P5 WDim sysInfo As String ‘* 错误,过于简单 % O- f6 c; t) b# B 特殊情况可以考虑一个字母的变量: ) W' ]0 \7 u/ J! y5 g. X Dim g As Graphic 0 r8 Z: ^2 x& L3 ^6 I* h对于控件,应该指明控件的类型,方法是直接在变量后面加以类名: / M) R2 L9 R5 [9 h; n: ` Friend WithEvents NextPageButton As Button ‘* 按钮 + _+ [' L" K5 g8 s0 Q* G1 v3 b5 R Friend WithEvents ColorChoicerPanel As Panel ‘* 面版 " {7 o9 k' Z, m3 d& e Friend WithEvents CardFileOpenDialog As FileOpenDialog ‘* 文件打开对话框 5 L4 ^7 u' V1 L" s% s0 U: {等等,无需规定某种类型的变量的前缀,只需把类型写在后面就行了,试对比下列代码: 7 Z- }4 T3 I: B7 ~5 t) M; `! lbtnCancel.Text = "&Cancel" " P9 N/ [& n1 t+ s0 E CancelButton.Text = "&Cancel" + b& f! r* ]2 ^1 ]" o8 i 显然后者更能使阅读者明白变量的类型是一个按钮。 6 l$ C( Z8 d, I$ t + \+ M3 B* s! f0 A1 Z0 R5 z- b四、标签 % G) i z7 t9 d8 n7 p, h( g ! a3 v! x3 L. h+ J, {; R* Y标签就是用于Goto跳转的代码标识,由于Goto并不推荐使用,所以标签的使用也比较苛刻。标签必须全部大写,中间的空格用下划线_代替,而且应该以_开头,比如: ) N7 v5 M/ i# Y4 z4 W _A_LABEL_EXAMPLE: 3 Y; a2 @ Y2 \; o& v; L如此定义标签是为了与其他代码元素充分区别。 - t% }1 N' O0 B4 a8 ]; k: ^" E" l) M! K( ~ 五、名字空间 % _9 ]' L2 R# y " _+ T5 f( d$ `, ^6 T通常,一个工程使用一个名字空间,通常不需要用Namespace语句,而是在工程选项的“Root Namespace”中指定,使用根名字空间可以使代码更加整齐,容易修改,这一点是VB十足的优点。名字空间的语法是: 8 R" V/ F+ r( x2 c) r公司名.产品名[.组件名的复数] " ^1 d/ g/ y0 s9 D# U U% o; p2 `, Y2 d如: ! A5 r g7 u! l5 |) [9 `" m+ `Namespace Ninputer.VirtualScreen 9 { e* d: d$ @5 ^7 { Namespace Ninputer.CardEditor.CustomeControls 9 c7 v. F& g8 \! B随便起一个名字空间的名字绝对不是一个好主意,一定要遵守上述规定。 & b- ?) o. s/ L! Z. V 7 g/ p. d* r7 o/ @ }+ E8 ?六、注释 ' B8 R7 G5 K" _% c % v6 e0 ?( ]' }2 Q注释的规则繁多,这里仅提到其中一点:正常的注释以‘*开头,单独的‘只用来注释暂时不用的代码 0 x. D" `; V( ~6 {; B‘* 这是普通的注释 " K) p* p0 P# {3 h% o. z6 p‘* 这段代码在调试正确后加入 " ?/ w% j* b" V) f" H* F# ]0 M ‘If UseHighSpeed(g) = True Then .... 2 v+ A' d* g( a! j# \5 W; F 这样能够方便的采用代码注释工具控制代码的使用。 " J0 j! [0 w3 F4 `% \, v6 i以上已经简单的介绍了我使用的VB.net代码规范,这个代码规范也适用于C#。仅供大家参考。
遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

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

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

GMT+8, 2025-5-15 09:27

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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