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

VB.net编码规范(转帖)

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

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

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

×
按:编程规范是程序员在实践中,为维护代码,便于集体开发,制定的一种约定,也是程序开发经验总结。你可以参考、制定自己的规范,但不可拘泥。( Y8 p% a+ C( w" [ X, O, G; ~$ _/ U* ~ 8 w& Z/ y' C2 x& k& J 在开发中保持良好的编码规范是十分重要的。我所采用的新的VB.net编码规范,是一种被证明能明显改善代码可读性,并有助于代码管理、分类的编码规范。采用这种编码规范,能避免如匈牙利命名法带来的繁长前缀,便于记忆变量的用途。下面的介绍这种编码规范。 S* Z; W t. n' u/ G" j/ U 5 a- {, }, q: l( R* ]& [一、类型级单位的命名 % |9 y. C3 L, h) ?5 D2 ?7 } " r8 J5 q" p; o- Q1、类。( H% U6 p9 C3 H % ?& c1 `. r z! k: Z, E以Class声明的类,都必须以名词或名词短语命名,体现类的作用。如: 3 R0 I+ h7 \# n! v/ |* G9 I Class Indicator $ T2 n. u6 U! \ k6 P0 i1 z8 s8 J/ q2 A; H% f当类是一个特性(Attribute)时,以Attribute结尾,当类是一个异常(Exception)时,以Exception结尾: & Z2 K7 B( C' x" N! V: |' i8 t Class ColorSetException 6 b+ H' I1 t- V. ~Class CauseExceptionAttribute 1 V7 I4 ` O3 B$ t& q; A2 ~! T0 q2 W# A j Z, f 当类只需有一个对象实例(全局对象,比如Application等),必须以Class结尾,如 0 Q. A& p: o8 `; q8 K5 U Class ScreenClass 4 _: o. n* T4 |+ P) ZClass SystemClass ; L2 Z+ R# J* B, z * {2 a9 F- p5 j. b" S. _ 当类只用于作为其他类的基类,根据情况,以Base结尾: ; y" M& }% z# j6 Z' N% G$ P MustInherit Class IndicatorBase 8 A" ~: T: r' a' C5 H) [0 [, s $ S! b' R% \& n4 Q6 m如果定义的类是一个窗体,那么名字的后面必须加后缀Form,如果是Web窗体,必须加后缀Page: ! y3 Y4 q9 `6 j2 o4 ~, P0 \: | Class PrintForm : Inherits Form ‘* Windows窗体 & I9 d) f5 ` C+ m% S$ g$ xClass StartPage : Inherits Page ‘* Web窗体 $ ] e% p4 V, S * x f0 m0 U: k4 U3 J7 B1 r# I- b2、枚举和结构 2 a& I& S+ Y1 g. p4 @: |; c$ M9 _ - A/ \9 A, u: a' `3 b( q, A- e& u# ? F; V同样必须以名词或名词短语命名。最好体现枚举或结构的特点,如: ( Z% \8 F# Q7 C8 sEnum ColorButtons ‘以复数结尾,表明这是一个枚举 7 m; x6 o% B. E9 ?0 KStructure CustomerInfoRecord ‘以Record结尾,表明这是一个结构体 \+ o' ^- I% s3 l Z1 Y ; }9 g$ _( v) C- v0 `3、委派类型 ; `1 F1 f% O6 V8 M- h: D普通的委派类型以描述动作的名词命名,以体现委派类型实例的功能: ( g6 M# ]4 ^& r+ y1 RDelegate Sub DataSeeker (ByVal SeekString As String) " r; ]) A. z( T- B! F3 c 用于事件处理的委派类型,必须以EventHandler结尾,如: H8 U. Q- Z7 i; W: A \Delegate Sub DataChangedEventHandler (ByVal Sender As Object, ByVal e As DataChangedEventArgs) % M, J. @/ n# C( l! v ; d* m2 x) ?+ V4 a. p% b4、接口 # \" \4 N; f( z* C( }3 t 与其他类型不同,接口必须要由I作为前缀,并用形容词命名,突出表现实现接口的类将具有什么能力: 0 o2 ~! D4 j/ ?+ z: |+ X6 @9 h1 h3 k Interface ISortable ' Y6 q3 K9 M- q& a( f8 f - w7 Z* I2 v! k6 _6 `5、模块 , h! O& s! Y6 d. L. D2 O5 y8 k 模块不是类型,他的名称除了必须以名词命名外,必须加以后缀Module: , C% I7 M8 g4 R* fModule SharedFunctionsModule ( x/ b7 q1 Y( |3 S& P 上述所有规则的共同特点是,每个组成名称的词语都必须是大写开头,禁止完全大写或小写的名称。 + F/ k: ^! c, k1 J1 E9 _ 7 Q! |8 O; L& S- P二、方法和属性的命名 . ]( P9 G7 l$ B1 X. q9 G+ g1 t 5 [+ t! C) z# [1、方法 7 p& I; I0 U' h* R& u无论是函数还是子程序,方法都必须以动词或动词短语命名。无需区分函数和子程序,也无需指明返回类型。 0 f4 p/ B% {" D+ }0 \/ M Sub Open(ByVal CommandString As String) P. U$ W5 f; r+ ]. }. ^5 J Function SetCopyNumber(ByVal CopyNumber As Integer) 3 I6 k0 N0 `# S参数需要指明ByVal还是ByRef,这一点写起来会让程序边长,但非常必要。如果没有特别情况,都使用ByVal。参数的命名方法,参考后面“变量的命名方法”。需要重载的方法,一般不写Overloads,根据需要编写重载的方法。 . J8 X5 y, B" o3 f3 A# i ^! @ 2、属性 l! {! j2 R6 X4 d0 r原则上,字段(Field)是不能公开的,要访问字段的值,一般使用属性。属性以简洁清晰的名词命名: : k) x5 S- Z9 K5 X; N/ l# tProperty Concentration As Single & K* _6 e& N8 A7 }9 A Property Customer As CustomerTypes 2 j( o' s) J: S% y9 S, Q. ?1 c( { 0 K6 j& U0 n4 q. U- n3、事件 # d8 q: H3 ^. K5 X U 事件是特殊的属性,只能在事件处理上下文中使用。命名的原则一般是动词或动词的分词,通过时态表明事件发生的时间: ' B1 C9 f! I& L9 R% ` Event Click As ClickEventHandler 3 ~2 O' g# ?" F; A& r9 dEvent ColorChanged As ColorChangedEventHangler7 {$ a- w8 L, D2 ] 7 K8 @! [* j/ v! t1 f 三、变量和常数 ! V% D L$ P& U" Z w/ Y6 ]# e: G: W" r/ C" N4 G 常数以表明常数意义的名词命名,一般不区分常数的类型: ( y9 n9 ]8 E% o: BConst DefaultConcentration As Single = 0.01 ! X+ n2 p2 H, Y2 ]* t2 t# ? 在严格要求的代码中,常数以c_开头,如c_DefaultConcentration,但最好不要用它,它会带来输入困难。 7 }/ M: K% @+ z$ y' M 普通类型的变量,只要用有意义的名字命名即可,不可使用简称和无意义的名称诸如A,x1等,下面给出了良好的例子: ) {2 ~$ g) J) r% t" K1 ^3 j* g Dim Index As Integer 3 f/ J/ ~* F1 e& @( JDim NextMonthExpenditure As Decimal / E, h2 ?0 w- y* ]) b) H% Z Dim CustomerName As String " c9 W! ?6 q; f: O: d) f不能起太长的名字,应该尽量简洁,如下面的例子: ( [0 m/ _6 o( M# S8 kDim VariableUsedToStoreSystemInformation As String ‘* 错误,太复杂了 / T( z2 ^. g0 n7 e6 ^! Q* S) O* d Dim SystemInformation As String ‘* 正确,简单明了 - u& `# F7 f5 b0 F6 Y Dim sysInfo As String ‘* 错误,过于简单 3 k, l2 E% F' n9 ` 特殊情况可以考虑一个字母的变量: 4 |9 y" I n, d0 b5 x& T& G% g/ HDim g As Graphic & \2 z' C8 |2 x* p% ~ E& ~对于控件,应该指明控件的类型,方法是直接在变量后面加以类名: ) Y! g" o' E4 b2 s+ P2 P# U Friend WithEvents NextPageButton As Button ‘* 按钮 2 z& ~1 z% y1 i4 x* W: } Friend WithEvents ColorChoicerPanel As Panel ‘* 面版 ! s. f! O4 W. k, Y$ PFriend WithEvents CardFileOpenDialog As FileOpenDialog ‘* 文件打开对话框 + Y" l3 {' W. v% z/ A8 V4 F等等,无需规定某种类型的变量的前缀,只需把类型写在后面就行了,试对比下列代码: $ E; W6 x8 c I' I btnCancel.Text = "&Cancel" $ |7 Z8 @# m& L3 w gCancelButton.Text = "&Cancel" 3 F- g9 s8 [4 k& A6 c* x 显然后者更能使阅读者明白变量的类型是一个按钮。$ n2 o3 k, y5 Z# H9 N6 i$ H ' s7 a9 e: q. |四、标签 , @0 b" F8 ?, R. z0 a , y( }5 J+ X: {: q+ Y 标签就是用于Goto跳转的代码标识,由于Goto并不推荐使用,所以标签的使用也比较苛刻。标签必须全部大写,中间的空格用下划线_代替,而且应该以_开头,比如: 5 _* @6 G* z1 x' I+ ~# o_A_LABEL_EXAMPLE: $ I1 @ _% ]5 q! y) Q/ z9 @2 W7 A如此定义标签是为了与其他代码元素充分区别。 ; r, E' [$ q' h* ]7 K # s: }$ h* I& Y+ h4 E7 U五、名字空间 ( Q1 w' a2 V/ b+ H ]5 u' G6 x( M/ ~" w- k8 O2 d- h 通常,一个工程使用一个名字空间,通常不需要用Namespace语句,而是在工程选项的“Root Namespace”中指定,使用根名字空间可以使代码更加整齐,容易修改,这一点是VB十足的优点。名字空间的语法是: " p: Q: C t: W" b- D公司名.产品名[.组件名的复数] 2 i# |; w v( A, g1 ~3 n: j 如: ( l& U6 n" H; }% O6 R3 B" M* \ y Namespace Ninputer.VirtualScreen 9 E3 c8 S$ D9 c |; U6 `' HNamespace Ninputer.CardEditor.CustomeControls 8 a) {9 x" K( b. S4 l 随便起一个名字空间的名字绝对不是一个好主意,一定要遵守上述规定。 ( Q4 G* _$ R0 } } ' ^/ K' C b/ B# O( M, U3 g8 P六、注释 8 t3 j: J( Y/ t% [7 F% J* k0 D) W & ?+ {6 X( Y; m8 Y8 M; G! o/ f" P注释的规则繁多,这里仅提到其中一点:正常的注释以‘*开头,单独的‘只用来注释暂时不用的代码 0 t* e. g, G& L$ [9 Z2 r ‘* 这是普通的注释 . J& Q. [+ h7 u) @' ^& {. u$ e+ x‘* 这段代码在调试正确后加入 4 ], i. k' `8 x; E2 ^+ R‘If UseHighSpeed(g) = True Then .... 8 g; R G& X8 ^1 o3 ] 这样能够方便的采用代码注释工具控制代码的使用。 : ]6 i, N: s! }1 K9 D5 }以上已经简单的介绍了我使用的VB.net代码规范,这个代码规范也适用于C#。仅供大家参考。
遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

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

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

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

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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