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

VB.net编码规范(转帖)

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

登录后查才能浏览下载更多咨询,有问题联系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#。仅供大家参考。
遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

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

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

GMT+8, 2025-2-22 16:45

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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