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

VB.net编码规范(转帖)

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

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

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

×
按:编程规范是程序员在实践中,为维护代码,便于集体开发,制定的一种约定,也是程序开发经验总结。你可以参考、制定自己的规范,但不可拘泥。; a' b" |0 U4 ]' v+ m2 I! M . F. G9 J6 ~: d( T, }- P7 k 在开发中保持良好的编码规范是十分重要的。我所采用的新的VB.net编码规范,是一种被证明能明显改善代码可读性,并有助于代码管理、分类的编码规范。采用这种编码规范,能避免如匈牙利命名法带来的繁长前缀,便于记忆变量的用途。下面的介绍这种编码规范。 2 b4 R& z( z3 w8 l: p% O , f$ \9 ^6 F, Y一、类型级单位的命名' u. ]' r/ I ^ & z U }: W( B Z. A2 F6 B% ~1、类。 / f) ~& D6 B b6 k# s . b8 @0 g% Y" e4 l! j% X, t8 L以Class声明的类,都必须以名词或名词短语命名,体现类的作用。如: h/ X& g& f1 ] Class Indicator 4 `4 z! X$ D& }6 N8 Y 7 W8 o; h2 o( ~+ D' |当类是一个特性(Attribute)时,以Attribute结尾,当类是一个异常(Exception)时,以Exception结尾: , o/ |1 a. Q9 C; a) `+ X" G2 T6 C Class ColorSetException & }9 O* g6 h" Q. v3 Q, o0 m2 G1 { Class CauseExceptionAttribute % J! t$ H( k3 H) L+ y + O: l- r7 f2 S$ |0 n当类只需有一个对象实例(全局对象,比如Application等),必须以Class结尾,如 5 A. U, |! V" n) _3 W Class ScreenClass 3 k. ~) x/ U8 ^: h7 W4 o Class SystemClass 9 M/ k, z( [, h7 [7 i& @+ u& H/ K 2 M4 b, y: T( o* `1 h当类只用于作为其他类的基类,根据情况,以Base结尾: c: z+ K' u* ?" Q MustInherit Class IndicatorBase ) G! }2 N: v. I$ S 3 h/ o7 J8 L0 S0 Z5 k5 y: X 如果定义的类是一个窗体,那么名字的后面必须加后缀Form,如果是Web窗体,必须加后缀Page: * x K0 H# T- t- B" W5 q; d Class PrintForm : Inherits Form ‘* Windows窗体 / }! p- s# \ g5 n5 k5 DClass StartPage : Inherits Page ‘* Web窗体 " U3 y& ~" b& K4 ^( X / R8 M+ n. G. H2、枚举和结构 $ v& H; @7 F5 |' | i : c; G9 Q; x3 ]9 C: Y+ q同样必须以名词或名词短语命名。最好体现枚举或结构的特点,如: 6 F+ t4 H9 J8 O% p Enum ColorButtons ‘以复数结尾,表明这是一个枚举 % j5 y; I, x Y9 j6 x Structure CustomerInfoRecord ‘以Record结尾,表明这是一个结构体 ; a+ V2 F) o: C- {# n2 v: A' L1 f) M$ q+ C 3、委派类型 8 H: i: `* b' V$ ?6 S) d 普通的委派类型以描述动作的名词命名,以体现委派类型实例的功能: " }( z; Q% P& J# N, R: b" jDelegate Sub DataSeeker (ByVal SeekString As String) 3 F) F; t. l3 z3 w2 P用于事件处理的委派类型,必须以EventHandler结尾,如: " w; q6 p$ m5 _8 Z- g3 R. g Delegate Sub DataChangedEventHandler (ByVal Sender As Object, ByVal e As DataChangedEventArgs) ) {, K! S3 Q5 k1 Z $ o9 M. O% n- S 4、接口 7 C/ ~; b3 \( \2 C 与其他类型不同,接口必须要由I作为前缀,并用形容词命名,突出表现实现接口的类将具有什么能力: 7 _9 R3 f3 G' r0 f5 bInterface ISortable : H. ~9 K2 F' u6 X: u6 m' X 7 C$ `" t, N7 @% e6 J# b b- q8 [/ @ 5、模块 ; a8 W+ |. U- g( N 模块不是类型,他的名称除了必须以名词命名外,必须加以后缀Module: t5 v1 [: B0 oModule SharedFunctionsModule , c( u, [. [7 V. l P9 X* f$ G上述所有规则的共同特点是,每个组成名称的词语都必须是大写开头,禁止完全大写或小写的名称。 7 Q5 v" p6 [, R: w/ [ 9 e" m$ `8 Q0 T3 P$ x# ~ 二、方法和属性的命名 + M7 s# i0 w1 _$ x% k1 m ' t3 ?! A+ b* `' i( y1、方法 3 s9 X. J3 x& F/ ^+ A0 b8 v- A无论是函数还是子程序,方法都必须以动词或动词短语命名。无需区分函数和子程序,也无需指明返回类型。 - Y1 q0 \, l: c9 r' {( m Sub Open(ByVal CommandString As String) + n2 a C: f( M( C6 b- ` Function SetCopyNumber(ByVal CopyNumber As Integer) : t6 ?6 w' h( ]9 Q1 ]# B3 b, C( q参数需要指明ByVal还是ByRef,这一点写起来会让程序边长,但非常必要。如果没有特别情况,都使用ByVal。参数的命名方法,参考后面“变量的命名方法”。需要重载的方法,一般不写Overloads,根据需要编写重载的方法。 2 v) e: b: O7 [5 \ ! o9 q6 f q6 M2、属性 " u: l8 w6 U$ U" d9 i2 e; X 原则上,字段(Field)是不能公开的,要访问字段的值,一般使用属性。属性以简洁清晰的名词命名: 5 \1 e8 k1 z. v8 q/ O5 d* oProperty Concentration As Single . V+ c9 T+ I) m# J& X [/ qProperty Customer As CustomerTypes ( z5 O8 `& k$ {. C3 n. D& w4 p 0 U2 J& d% z% y" M4 h; F3、事件 2 ]% v& s4 z% F2 z# b( T 事件是特殊的属性,只能在事件处理上下文中使用。命名的原则一般是动词或动词的分词,通过时态表明事件发生的时间: * e. c2 E F; s. {" O7 R/ V# ?Event Click As ClickEventHandler $ \. |6 \- \$ Y$ ~ Event ColorChanged As ColorChangedEventHangler8 y8 i2 ?: d; K6 U . C, h% \ |% V9 V" ~三、变量和常数 $ Q* p3 a/ K$ W' K5 o$ n8 `# O p: \! j/ ~1 i 常数以表明常数意义的名词命名,一般不区分常数的类型: : m3 ^7 F {* C. v Const DefaultConcentration As Single = 0.01 4 x/ y4 c# d2 _3 H6 [. B 在严格要求的代码中,常数以c_开头,如c_DefaultConcentration,但最好不要用它,它会带来输入困难。 + j% ?% p0 v8 z' ~: E) x2 y普通类型的变量,只要用有意义的名字命名即可,不可使用简称和无意义的名称诸如A,x1等,下面给出了良好的例子: 6 i$ i2 z0 U+ `" i9 K: [. K6 U0 lDim Index As Integer + o8 ^2 l; a. X% ]% V3 E$ xDim NextMonthExpenditure As Decimal 2 S* l2 D# `0 h+ p9 iDim CustomerName As String 8 N, ]+ z* B6 r7 B" J+ h( A不能起太长的名字,应该尽量简洁,如下面的例子: 2 x) Q! Q" l+ p+ \( S1 b4 UDim VariableUsedToStoreSystemInformation As String ‘* 错误,太复杂了 1 b* @. {( d9 n; A Dim SystemInformation As String ‘* 正确,简单明了 5 p3 f: T- V, _# ^4 |* i$ W) b: pDim sysInfo As String ‘* 错误,过于简单 7 _! |9 h# Y3 n6 _) T/ K) t特殊情况可以考虑一个字母的变量: ' y+ N; g! T* l: L& KDim g As Graphic ; i& s0 `! b# `( G- }9 m对于控件,应该指明控件的类型,方法是直接在变量后面加以类名: 1 y& r- ?) x, u* pFriend WithEvents NextPageButton As Button ‘* 按钮 1 k( E) n% Y; E- sFriend WithEvents ColorChoicerPanel As Panel ‘* 面版 6 n, H3 w5 p' U+ c' i y0 ~$ MFriend WithEvents CardFileOpenDialog As FileOpenDialog ‘* 文件打开对话框 : R4 U( V3 t m% o b) j 等等,无需规定某种类型的变量的前缀,只需把类型写在后面就行了,试对比下列代码: # N1 \* E) m- ^* f' pbtnCancel.Text = "&Cancel" 3 r' p* ^$ u* g+ Q0 W% {: HCancelButton.Text = "&Cancel" ) `- ?$ a* ~" ]/ y显然后者更能使阅读者明白变量的类型是一个按钮。* q& m3 _/ T, }# V6 a# ~( y& q + F$ p6 c$ s: a$ l5 I0 f四、标签 / h2 d4 {/ ~2 l- D9 W/ ^ f 8 V/ X( @( N3 o' C5 w( g标签就是用于Goto跳转的代码标识,由于Goto并不推荐使用,所以标签的使用也比较苛刻。标签必须全部大写,中间的空格用下划线_代替,而且应该以_开头,比如: " e( H' b3 n: E; Y/ z1 j( X _A_LABEL_EXAMPLE: 9 g0 ?: D9 R- {" ~- ?; T8 n5 s 如此定义标签是为了与其他代码元素充分区别。 3 q( q8 S! h" S& l0 K7 B5 O0 M3 l) I9 ~ 五、名字空间 ; F7 A/ i! E# J6 x 0 f4 d( Y3 F1 ?, L: S/ F通常,一个工程使用一个名字空间,通常不需要用Namespace语句,而是在工程选项的“Root Namespace”中指定,使用根名字空间可以使代码更加整齐,容易修改,这一点是VB十足的优点。名字空间的语法是: 5 \/ m! D* W6 T+ u5 k! w公司名.产品名[.组件名的复数] # \* T8 }0 P* S" g4 z% f如: 3 T) s# z h5 y4 F$ |9 C- [! | Namespace Ninputer.VirtualScreen 5 b$ `7 X$ x' J1 c* O Z, K5 H Namespace Ninputer.CardEditor.CustomeControls 2 h K. v! l$ j8 O; U3 I2 I% y随便起一个名字空间的名字绝对不是一个好主意,一定要遵守上述规定。 9 L( A( I8 L! ~) H: o ) Z/ \+ L6 j4 t9 m六、注释 9 a& F) q2 B# G0 ` , {4 W9 @ @% c: z" s# H9 @6 { 注释的规则繁多,这里仅提到其中一点:正常的注释以‘*开头,单独的‘只用来注释暂时不用的代码 7 q$ g0 f/ i# `% W$ V0 M8 y$ V ‘* 这是普通的注释 $ k6 _7 z' H( P0 r. t9 l9 K ‘* 这段代码在调试正确后加入 2 c; ^% T; S0 x. x ‘If UseHighSpeed(g) = True Then .... 8 K! {$ h* r+ w, W) K! m9 I这样能够方便的采用代码注释工具控制代码的使用。 W# o9 F5 b I 以上已经简单的介绍了我使用的VB.net代码规范,这个代码规范也适用于C#。仅供大家参考。
遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

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

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

GMT+8, 2025-1-19 03:13

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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