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

VB.net编码规范(转帖)

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

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

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

×
按:编程规范是程序员在实践中,为维护代码,便于集体开发,制定的一种约定,也是程序开发经验总结。你可以参考、制定自己的规范,但不可拘泥。+ X4 g, c% @: H" ~ : K4 k/ x- |0 ~/ r8 F" p7 S; ^在开发中保持良好的编码规范是十分重要的。我所采用的新的VB.net编码规范,是一种被证明能明显改善代码可读性,并有助于代码管理、分类的编码规范。采用这种编码规范,能避免如匈牙利命名法带来的繁长前缀,便于记忆变量的用途。下面的介绍这种编码规范。8 c. M8 m9 T9 @! y" p- i * f: g" J& a$ j0 | h# Y+ x! _一、类型级单位的命名% {& O) V( @5 X( ]. h 6 t7 [9 D2 t6 ` 1、类。: q( I$ u+ c; U3 F2 Y! O9 x / b P% u6 `8 c' K 以Class声明的类,都必须以名词或名词短语命名,体现类的作用。如: $ n, y1 n3 w0 _9 | Class Indicator * u/ h6 d* ]0 e1 W2 }& o, i9 Z$ q1 y4 r- A* ? 当类是一个特性(Attribute)时,以Attribute结尾,当类是一个异常(Exception)时,以Exception结尾: F( ~' ?3 L6 g" U/ M Class ColorSetException - {, S' L: |- X2 }, K/ iClass CauseExceptionAttribute 6 \. ]7 i6 v, r8 Q; `/ p5 g2 X# c 4 W( J0 T% H# T5 I% y2 s2 b% {当类只需有一个对象实例(全局对象,比如Application等),必须以Class结尾,如 7 x( ?+ A g; A& ~3 fClass ScreenClass / Y( H( U: x+ f+ N. t0 B$ WClass SystemClass 0 h- E6 j! S+ j, T1 k' t% C # [) o/ }" x/ i9 g, z5 r当类只用于作为其他类的基类,根据情况,以Base结尾: 7 _$ [$ X7 j1 d$ W6 d& E) T MustInherit Class IndicatorBase 9 M' U! V: `0 R$ o' W1 |- G. q3 k/ [( M. W' U0 N W- W. T 如果定义的类是一个窗体,那么名字的后面必须加后缀Form,如果是Web窗体,必须加后缀Page: - f9 k: M s. @' q4 n" ^0 ~8 o Class PrintForm : Inherits Form ‘* Windows窗体 - u" B/ Y% I5 n7 x" c) AClass StartPage : Inherits Page ‘* Web窗体 3 L; `% n2 @8 `" I8 } + Z4 p8 `% w! W7 p" H4 X2、枚举和结构 9 W8 a; U# @) V" T: l . l1 C Y8 g+ j, n同样必须以名词或名词短语命名。最好体现枚举或结构的特点,如: 9 Z) f/ P L8 y; |2 ]( o Enum ColorButtons ‘以复数结尾,表明这是一个枚举 1 p3 e8 ?+ c' _ I, q } Structure CustomerInfoRecord ‘以Record结尾,表明这是一个结构体 & E \! g; G& r " u; G3 d4 o1 x! W5 \9 V1 L$ D 3、委派类型 " Z1 ~& y- D/ \: Y普通的委派类型以描述动作的名词命名,以体现委派类型实例的功能: 8 g$ {( b4 E# S( Q: UDelegate Sub DataSeeker (ByVal SeekString As String) V" I* e) Z% _3 ?4 l1 U( l- v/ H用于事件处理的委派类型,必须以EventHandler结尾,如: " p9 T2 ]( C7 WDelegate Sub DataChangedEventHandler (ByVal Sender As Object, ByVal e As DataChangedEventArgs) 1 h' Q: `# ]* Y" m6 K2 X , Z. j% k8 b( g4、接口 9 R: m) g% V/ ~: u4 t% `& w( j/ o 与其他类型不同,接口必须要由I作为前缀,并用形容词命名,突出表现实现接口的类将具有什么能力: 1 D2 q4 p' x$ B1 Y! w5 ?4 n Interface ISortable 5 {1 r8 [8 k. K0 R* M ' D* b0 |) f3 C3 F6 G5 \5、模块 7 m( _& n1 n7 {' D 模块不是类型,他的名称除了必须以名词命名外,必须加以后缀Module: ( q# o+ l7 E6 d' {. L" ~# a Module SharedFunctionsModule # [6 o8 l1 p. y3 s3 E+ a上述所有规则的共同特点是,每个组成名称的词语都必须是大写开头,禁止完全大写或小写的名称。 : V- p1 r& r0 s0 @ K! [8 h8 S3 \ ' u; S5 y6 v7 N* u6 d二、方法和属性的命名 / w& P/ |5 [3 R8 W7 O ) m* y) E) E) x% \ 1、方法 + s# T3 ~+ ~8 Y6 e" a 无论是函数还是子程序,方法都必须以动词或动词短语命名。无需区分函数和子程序,也无需指明返回类型。 - }6 b% Q: a; [6 l Sub Open(ByVal CommandString As String) , d' ?4 A& ^) x; E* A c% NFunction SetCopyNumber(ByVal CopyNumber As Integer) Z9 V) i* k& F- {3 x; S. P4 N 参数需要指明ByVal还是ByRef,这一点写起来会让程序边长,但非常必要。如果没有特别情况,都使用ByVal。参数的命名方法,参考后面“变量的命名方法”。需要重载的方法,一般不写Overloads,根据需要编写重载的方法。 ; _4 \7 v. f( V) h- c- ~0 w & t+ Y2 C; a/ O) U2 n( ~2、属性 5 v2 m' u1 e% y4 y; q0 | 原则上,字段(Field)是不能公开的,要访问字段的值,一般使用属性。属性以简洁清晰的名词命名: & u B4 ?7 J3 i9 ~+ Q/ U Property Concentration As Single " f0 S/ ?# s# W1 u$ n0 m' NProperty Customer As CustomerTypes 4 e6 {/ O1 y% X 2 }4 f1 ~) S) y& @3、事件 ' y6 P% ^2 N$ |+ B* H9 d 事件是特殊的属性,只能在事件处理上下文中使用。命名的原则一般是动词或动词的分词,通过时态表明事件发生的时间: 4 k/ H; @5 X8 F2 X2 l) K* |. TEvent Click As ClickEventHandler $ A$ @; l( i2 E+ u# N# x Event ColorChanged As ColorChangedEventHangler 2 |! Y3 z/ ~1 U, Y* }" N % |( ?6 z$ C7 M: }# {三、变量和常数 3 ~ ?! {" [: p$ U9 P1 f& q* F1 m4 }$ v. v 常数以表明常数意义的名词命名,一般不区分常数的类型: % L( Z+ m, ?5 F Const DefaultConcentration As Single = 0.01 / S H5 _. Q/ g% p1 z p. L在严格要求的代码中,常数以c_开头,如c_DefaultConcentration,但最好不要用它,它会带来输入困难。 1 K/ H! W, V {3 c K6 A6 W 普通类型的变量,只要用有意义的名字命名即可,不可使用简称和无意义的名称诸如A,x1等,下面给出了良好的例子: ^2 |2 E8 p# b# L+ ^Dim Index As Integer 6 `$ c) C7 Q2 z8 V Dim NextMonthExpenditure As Decimal " n' R0 Y( z/ K% e Dim CustomerName As String & O8 O4 b2 L* C, C( [1 g 不能起太长的名字,应该尽量简洁,如下面的例子: 5 z& ?+ X; F7 a; `" g5 l! xDim VariableUsedToStoreSystemInformation As String ‘* 错误,太复杂了 5 K- A$ v b9 n% ^ Dim SystemInformation As String ‘* 正确,简单明了 / Q1 U8 p: ?# {$ iDim sysInfo As String ‘* 错误,过于简单 & J3 i8 S3 E2 s; T4 K+ A特殊情况可以考虑一个字母的变量: & [4 Q. f; p. g& ~6 V Dim g As Graphic * `0 p; \; {' {, \对于控件,应该指明控件的类型,方法是直接在变量后面加以类名: $ ]) Y% i5 ^8 x# I9 v Friend WithEvents NextPageButton As Button ‘* 按钮 - Y! L3 ]& |/ T' s( t6 e Friend WithEvents ColorChoicerPanel As Panel ‘* 面版 - k+ |+ Z+ G1 `' G$ nFriend WithEvents CardFileOpenDialog As FileOpenDialog ‘* 文件打开对话框 - w4 a4 F% o! \等等,无需规定某种类型的变量的前缀,只需把类型写在后面就行了,试对比下列代码: 9 c( ]! s: U1 Y) sbtnCancel.Text = "&Cancel" " ^2 ~5 s% |0 T CancelButton.Text = "&Cancel" . c) h+ x% Y1 h1 @; x, M5 H显然后者更能使阅读者明白变量的类型是一个按钮。 # M. W) Y- U* s# ]. e. l* o7 p j$ x+ I& }$ I' u8 N( M; w 四、标签 ! i) a2 @% r: l4 y$ j6 {% }6 T. R" n- l 8 p& ]5 t8 Z* }# U8 c" R4 c 标签就是用于Goto跳转的代码标识,由于Goto并不推荐使用,所以标签的使用也比较苛刻。标签必须全部大写,中间的空格用下划线_代替,而且应该以_开头,比如: ) `) @; m# L0 p0 l7 k _A_LABEL_EXAMPLE: 6 P. T! k1 N$ P1 k" U7 a8 b8 k( e( d如此定义标签是为了与其他代码元素充分区别。 ( x% c. F1 _; H# l+ }+ I# ]7 k5 }0 t" y1 v; H. p( q 五、名字空间 % h! z# u8 B0 D8 f8 S" R 1 S9 A* ?" w3 l" I9 V: g0 q' D通常,一个工程使用一个名字空间,通常不需要用Namespace语句,而是在工程选项的“Root Namespace”中指定,使用根名字空间可以使代码更加整齐,容易修改,这一点是VB十足的优点。名字空间的语法是: 1 m& K K# s" {" v2 Z0 d' I* z 公司名.产品名[.组件名的复数] 8 L, }6 X: `% {" s+ G2 B如: 9 S4 Y. I4 k9 ]! Y5 Q Namespace Ninputer.VirtualScreen ) ~: j f. L3 M0 FNamespace Ninputer.CardEditor.CustomeControls - {( N$ f4 j- ^% L随便起一个名字空间的名字绝对不是一个好主意,一定要遵守上述规定。; K" l% z( M7 m 9 }! [, w3 u: z! K4 U2 y4 ^ 六、注释 J7 ^. }* r# H" h# L2 |( D3 r$ V- { 注释的规则繁多,这里仅提到其中一点:正常的注释以‘*开头,单独的‘只用来注释暂时不用的代码 ' b; G. y7 D1 N2 Y5 V. x" a ‘* 这是普通的注释 , o O2 `3 n! \" z+ {‘* 这段代码在调试正确后加入 , I0 h9 d" g1 z' D‘If UseHighSpeed(g) = True Then .... . {0 o! |# i3 H8 N" {这样能够方便的采用代码注释工具控制代码的使用。 ; F" N! q# {( y( j. E以上已经简单的介绍了我使用的VB.net代码规范,这个代码规范也适用于C#。仅供大家参考。
遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

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

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

GMT+8, 2024-11-22 07:29

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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