C#语言编程规范_B/S开发框架_之三

代码编码规范之三,本标准规定了B/S开发框架中C#语言的编程规范,主要包括基本原则、布局、注释、命名规则、声明、表达式与语句、类与接口等。

7   声明

【规则5-1】一行只声明一个变量。

正例:

     int iLevel;

           int iSize;

反例:

          int iLevel, iSize;


【规则5-2】B/S开发框架中一个变量有且只有一个功能,不能把一个变量用于多种用途。

说明:一个变量只用来表示一个特定功能,不能把一个变量作多种用途,即同一变量取值不同时,其代表的意义也不同。

  

〖建议5-1〗变量声明应该只放在代码段的开始部分。最好不要到使用时才声明变量。对象类变量在函数体结束后,手工设置为null值,以利于资源的回收。

正例:

     void Method()

           {

               int iSample = 0;               //方法块的开始

             

                //其它语句


           }


8   表达式与语句

Web开发框架中表达式是语句的一部分,它们是不可分割的。表达式和语句虽然看起来比较简单,但使用时隐患比较多。本章归纳了正确使用表达式和if、for、while、goto、switch等基本语句的一些规则与建议。

【规则6-1】一条语句只完成一个功能。

说明:复杂的语句阅读起来,难于理解,并容易隐含错误。变量定义时,一行只定义一个变量。

正例:

int  iHelp;   

int  iBase;

int  iResult;


iHelp   = iBase;

iResult = iHelp + GetValue(iBase);

反例:

int iBase, iResult;                 // 一行定义多个变量


iResult = iBase + GetValue(iBase); // 一条语句实现多个功能,iBase有两种用途。


【规则6-2】B/S开发框架在表达式中使用括号,使表达式的运算顺序更清晰。

说明:由于将运算符的优先级与结合律熟记是比较困难的,为了防止产生歧义并提高可读性,即使不加括号时运算顺序不会改变,也应当用括号确定表达式的操作顺序。

正例:                                                 


if (((iYear % 4 == 0)&& (iYear % 100 != 0)) || (iYear % 400 == 0))


反例:


if (iYear % 4 == 0 && iYear % 100 != 0 || iYear % 400 == 0)


【规则6-3】避免表达式中的附加功能,云微开发平台不要编写太复杂的复合表达式。

说明:带附加功能的表达式难于阅读和维护,它们常常导致错误。对于一个好的编译器,下面两种情况效果是一样的。

正例:

ariVar[1] = ariVar[2] + ariVar[3];

ariVar[4]++;

iResult = ariVar[1] + ariVar[4];

ariVar[3]++;


反例:  

iResult = (ariVar[1] = ariVar[2] + ariVar[3]++) + ++ariVar[4] ;


【规则6-4】不可将浮点变量用“==”或“!=”与任何数字比较。

说明:无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该转化成“>=”或“<=”形式。

正例:

if ((fResult >= -EPSINON) && (fResult <= EPSINON))

反例:

if (fResult == 0.0)   //隐含错误的比较


其中EPSINON是允许的误差(即精度)。


【规则6-5】在switch语句中,每一个case分支必须使用break结尾,最后一个分支必须是default分支。

说明:避免漏掉break语句造成程序错误。同时保持程序简洁。

对于多个分支相同处理的情况可以共用一个break,B/S开发框架中要用注释加以说明。

正例:

          switch (iMessage)

          {

case SPAN_ON:

                    [处理语句]

                    break;

               case SPAN_OFF:

                    [处理语句]

                    break;

              default:

                   [处理语句]

                break;

          }


【规则6-8】B/S开发框架中不可在for循环体内修改循环变量,防止for循环失去控制。


〖建议6-1〗循环嵌套次数不大于3次。


〖建议6-2〗do while语句和while语句仅使用一个条件。

说明:保持程序简洁。如果需要判断的条件较多,建议用临时布尔变量先计算是否满足条件。

正例:

     BOOLEAN bCondition;


     do

     {

        ……..

bCondition = ((tAp[iPortNo].bStateAcpActivity != PASSIVE)

               || (tAp[iPortNo].bStateLacpActivity != PASSIVE))

                   && (abLacpEnabled[iPortNo])

                   && (abPortEenabled[iPortNo])

   

      } while (bCondition);


〖建议6-3〗当switch语句的分支比较多时,B/S开发框架中建议采用数据驱动方式。

说明:当switch 语句中case 语句比较多时,会降低程序的效率。


〖建议6-4〗如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。

说明:下面两个示例中,反例比正例多执行了NUM -1次逻辑判断。并且由于前者总要进行逻辑判断,使得编译器不能对循环进行优化处理,降低了效率。如果NUM非常大,最好采用正例的写法,可以提高效率。

const  int NUM = 100000;

正例:

if (bCondition)

{

for (i = 0; i < NUM; i++)

{

         DoSomething();

     }

}

else

{

for (i = 0; i < NUM; i++)

{

        DoOtherthing();

    }

}


反例:  

for (i = 0; i < NUM; i++)

{

if (bCondition)

    {

        DoSomething();

}

else

{

        DoOtherthing();

    }

}


〖建议6-5〗for语句的循环控制变量的取值采用“半开半闭区间”写法。

正例:

int  aiScore[NUM];

for (i = 0; i < NUM; i++)

{

     printf(“%d\n”,aiScore[i])

}

反例:

int  aiScore[NUM];

for (i = 0; i <= NUM-1;i++)

{

     printf(“%d\n”,aiScore[i]);

}


相比之下,正例的写法更加直观,尽管两者的功能是相同的。


9   类和接口

【规则7-1】类内部的代码布局顺序:数据成员、属性、构造函数、方法。

正例:

public class Sample

{  

   

private int m_iProperty1;   //数据成员 


    public int Property1        //属性

    {

        get

        {

            return m_iProperty1;

        }

        set

        {

            m_iProperty1 = value;

        }

    }      


    public Sample()         //构造函数

    {


    }


    public string Operation1(long lParam1, string strParam2)  //方法

    {

        return null;

    }

}


〖建议7-1〗功能相关的方法放在一起。

说明:如接口中关系较紧密的的几个方法,类属性的get和set 方法,有调用关系的方法,重载的方法等有相近或相关的方法尽可能放在一起,方便阅读。


〖建议7-2〗方法的参数个数不宜超过4个。

说明:过多的函数参数会导致性能降低。


〖建议7-3〗使程序结构体现程序的目的。

正例:

return booleanExpression;

反例:

if (booleanExpression)

{

    return true;

}

else

{

    return false;

}


〖建议7-4〗保证内部类定义成private,提高类的封装性。



〖建议7-5〗嵌套内部类不能超过两层。



〖建议7-6〗一个接口可以有多个实现类,实现类共同的变量在接口里声明。




附录A 
(资料性附录)
编程模版

下面的例子显示了在云微开发平台中如何格式化包含单个public类的C#源文件。接口格式化与之类似,


using System;


namespace hocode.xxx

{


    /// <summary>

    /// 版权所有(C)2004,中兴通讯

/// 内容摘要:本文件的内容是…..,包括主要……模块、……函数及功能是…….

/// 完成日期:2004年3月1日

/// 版   本:V1.0

/// 作    者:小张

    ///    

    /// 修改记录1:

    /// 修改日期:2004年3月10日

    /// 版 本 号:V1.2

    /// 修 改 人:小张

    /// 修改内容:对方法……进行修改,修正故障BUG……。

    /// 修改记录2:

    /// 修改日期:2004年3月20日

    /// 版 本 号:V1.3

    /// 修 改 人:小张

    /// 修改内容:对方法……进行进一步改进,修正故障……。

    /// </summary> 

    public class Sample

    {  

        //数据成员

private int m_iProperty1;      


        /// <summary>

        /// 示例属性

        /// </summary>

        public int Property1

        {

            get

            {

            return m_iProperty1;

            }

            set

            {

            m_iProperty1 = value;

            }

        }      


/// <summary>

        /// 示例方法

        /// </summary>

        /// <param name="Param1">参数1</param>

        /// <param name="Param2">参数2</param>

        /// <returns>返回值</returns>      

        public string Operation1(long Param1, string Param2)

        {

            return null;

        }

    }

}

网站&系统开发技术学习交流群:463167176

本站文章除注明转载外,均为本站原创或翻译,欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,共创和谐网络环境。
转载请注明:文章转载自:华晨软件-云微开发平台 » C#语言编程规范_B/S开发框架_之三
本文标题:C#语言编程规范_B/S开发框架_之三
本文地址:http://www.hocode.com/OrgTec/Plugin/0014.html

相关文章: .NET C#语言_编程规范_B/S开发框架_之一

电话
电话 18718672256

扫一扫
二维码