zoukankan      html  css  js  c++  java
  • (摘录)C#编码规范

    1 文件组织

    1.1 C#源文件

    把每个类都放在单独的文件中,文件名字和类名一致(用.CS作为扩展名)。类文件不要太长,不要超过2000LOC。必要时,分割代码,使结构更清晰。

    1.2 目录安排

    为每个命名空间创建一个目录(如,对于MyProject.TestSuite.TestTier使用MyProject/TestSuite/TestTier作为路径,不要使用带“.”的命名空间)。这样更易于映射命名空间到目录。

    2 缩进

    2.1 分行

    如果表达式不适合单行显示,应根据下面通常的原则分行:

    l         在一个逗号后换行

    l         在一个操作符后换行

    l         在表达式的高层次处换行

    l         新行与前一行在同一层次,并与表达式的起始对齐

    方法分行的例子:

    long MethodCall(expr1, expr2,

                            expr3, expr4, expr5);

    算术表达式分行的例子:

    好的:

           var = a * b / (c – g + f) +

                   4 * z;

    坏的风格,要避免:

           var = a * b / (c – g +

                   f) + 4 * z;

    第一个是好的,因为分行符合高层次规则。

    2.2 空白

    不要使用空格缩进 使用tabs

     

    3 注释

    3.1 块注释

    通常要避免块注释,而使用C#标准的///注释来描述。如果希望使用块注释,应该使用下面的风格:

    / * Line 1

      * Line 2

      * Line 3

      */

    块注释很少使用,通常是用来注释掉大块的代码。

    3.2 单行注释

    应该使用//注释掉一行代码,也可以用它注释掉代码块。当单行注释用来做代码解释时,必须要缩进到与代码对齐。

    3.3      文档注释

    单行XML注释的形式如下:

    /// <summary>

    /// This class…

    /// </summary>

    多行XML注释的形式如下:

    /// <exception cref=”BogusException”>

    /// This exception gets thrown as soon as a

    /// Bogus flag gets set.

    /// </exception>

     

    4 声明

    4.1每行声明的数量

    建议每行只有一个声明,还方便注释,如:

    int level;  // indentation level

    int size;   // size of table

    变量的命名意义要明确。如果能够自解释,如indentLevel,就不用注释。

    不好的:

    int a, b; // What is ‘a’? What does ‘b’ stand for?

    4.2 初始化

    尽量在局部变量声明时进行初始化,例如:

    string name = myObject.Name;

    int val = time.Hours;

    注意:初始化对话框时,尽量使用语句:

    Using (OpenFileDialog openFileDialog = new OpenFileDialog())

    {

           ……

    }

    4.3 类和接口的声明

    当写C#类和接口时,应按照下面的格式规则:

    l         在方法名字和参数列表的起始括号“(”之间没有空格

    l         开括号“{”应出现在声明语句之后的下一行

    l         闭括号“}”自己占一行,并缩进到对应的开括号位置

    例如:

    class MySample : MyClass, IMyInterface

    {

      int myInt;

      

      public MySample(int myInt)

      {

             this.myInt = myInt;

      }

      

      void Inc()

      {

             ++myInt;

      }

      

      void EmptyMethod()

      {

      }

    }

     

    5 语句

    5.1 简单语句

    每行应该只包含一个语句。

    5.2 返回语句

    返回语句不应该带有最外面的括号。

    不应该使用:

    return (n * (n + 1) / 2);

    应该使用:

    return n * (n + 1) / 2;

    5.3 If, if - else, if else - if else语句

    if, if elseif else if else语句应该按照下面格式:

    if (condition)

    {

           ……

    }

     

    if (condition)

    {

           ……

    }

    else

    {

           ……

    }

     

    if (condition)

    {

        ……

    }

    else if (condition)

    {

        ……

    }

    else

    {

        ……

    }

    注意:即使某条件下只有一个语句,也要使用大括号“{”“}”。后面的循环等语句也一样。

    5.4 for / foreach语句

    for语句形式如下:

    for (int i = 0; i < 5; ++i)

    {

        ……

    }

    或者使用单行形式:

    for (initialization; condition; updat);

    单行形式可考虑使用while语句代替。

    foreach语句如下:

    foreach (int i in intList)

    {

        ……

    }

    5.5 while / do while语句

    while语句如下:

    while (condition)

    {

        ……

    }

    空的while语句形式如下:

    while (condition);

    do while语句如下:

    do

    {

        ……

    }

    while (condition);

    5.6  switch语句

    switch语句形式如下:

    switch (condition)

    {

        case A :

               ……

               break;

        case B :

               ……

               break;

        default :

               ……

               break;

    }

    5.7 try catch语句

    try catch语句形式如下:

    try

    {

        ……

    }

    catch (Exception e)

    {

        ……

    }

    或者

    try

    {

        ……

    }

    catch (Exception e)

    {

        ……

    }

    finally

    {

        ……

    }

    5.8 属性

    属性形式如下:

    public string Name

    {

        get

          {

                  ……

          }

          set

          {

                  ……

          }

    }

    对于抽象属性:

    public string Name

    {

        get;

        set;

    }

    5.9 枚举

    枚举形式如下:

    public enum Color

    {

        Red,

        Green,

        Blue

    }

     

    6 空白

    6.1 空行

    使用空行按照逻辑关系分隔代码,能提高可读性。

    在下面元素之间要使用一个空行:

    l         构造函数

    l         属性

    l         方法

    l         方法内的逻辑块

    6.2 内部空格

    在逗号或分号之后应该有一个空格,例如:

    应该使用:

           TestMethod(a, b, c);

    不应该使用:

           TestMethod(a,b,c);或者TestMethod( a, b, c );

    操作符两边要有一个空格(递增和逻辑否等一元操作符除外),例如:

    应该使用:

           a = b;

    不应该使用:

           a=b;

    应该使用:

           for (int i = 0; i < 10; ++i)

    不应该使用:

           for (int i=0; i<10; ++i)或者for(int i=0;i<10;++i)

     

    7命名约定

    7.1 ADO.NET       命名规范

    数据类型

    数据类型简写

    标准命名举例

    Connection

    con

    conNorthwind

    Command

    cmd

    cmdReturnProducts

    Parameter

    parm

    parmProductID

    DataAdapter

    dad

    dadProducts

    DataReader

    dtr

    dtrProducts

    DataSet

    dst

    dstNorthWind

    DataTable

    dtbl 

    dtblProduct

    DataRow

    drow

    drowRow98

    DataColumn

    dcol 

    dcolProductID

    DataRelation

    drel

    drelMasterDetail

    DataView

    dvw 

    dvwFilteredProducts

     

    7.2 WinForm       Control       命名规范

    数据类型

    数据类型简写

    标准命名举例

    Label

    lbl

    lblMessage

    LinkLabel

    llbl

    llblToday

    Button

    btn

    btnSave

    TextBox

    txt

    txtName

    MainMenu

    mmnu

    mmnuFile

    CheckBox

    chk

    chkStock

    RadioButton

    rbtn

    rbtnSelected

    GroupBox

    gbx

    gbxMain

    PictureBox

    pic

    picImage

    Panel

    pnl

    pnlBody

    DataGrid

    dgrd

    dgrdView

    ListBox

    lst

    lstProducts

    CheckedListBox

    clst

    clstChecked

    ComboBox

    cbo

    cboMenu

    ListView

    lvw

    lvwBrowser

    TreeView

    tvw

    tvwType

    TabControl

    tctl

    tctlSelected

    DateTimePicker

    dtp

    dtpStartDate

    HscrollBar

    hsb

    hsbImage

    VscrollBar

    vsb

    vsbImage

    Timer

    tmr

    tmrCount

    ImageList

    ilst

    ilstImage

    ToolBar

    tlb

    tlbManage

    StatusBar

    stb

    stbFootPrint

    OpenFileDialog

    odlg

    odlgFile

    SaveFileDialog

    sdlg

    sdlgSave

    FoldBrowserDialog

    fbdlg

    fgdlgBrowser

    数据类型

    数据类型简写

    标准命名举例

    FontDialog

    fdlg

    fdlgFoot

    ColorDialog

    cdlg

    cdlgColor

    PrintDialog

    pdlg

    pdlgPrint

     

    7.3 WebControl 命名规范

    数据类型

    数据类型简写

    标准命名举例

    AdRotator

    adrt

    Example

    Button

    btn

    btnSubmit

    Calendar

    cal

    calMettingDates

    CheckBox

    chk

    chkBlue

    CheckBoxList

    chkl

    chklFavColors

    CompareValidator

    valc

    valcValidAge

    CustomValidator

    valx

    valxDBCheck

    DataGrid

    dgrd

     dgrdTitles

    DataList

    dlst

    dlstTitles

    DropDownList

    drop

    dropCountries

    HyperLink

    lnk

    lnkDetails

    Image   

    img

    imgAuntBetty

    ImageButton

    ibtn

    ibtnSubmit

    Label

    lbl

    lblResults

    LinkButton

      lbtn

    lbtnSubmit

    ListBox

    lst

    lstCountries

    Panel 

    pnl

    pnlForm2

    PlaceHolder

    plh

    plhFormContents

    RadioButton

    rad

    radFemale

    RadioButtonList

    radl

    radlGender

    RangeValidator

    valg

    valgAge

    RegularExpression

    vale

    valeEmail_Validator

    Repeater

    rpt

    rptQueryResults

    RequiredFieldValidator 

    valr          

    valrFirstName

    Table   

    tbl        

    tblCountryCodes

    TableCell    

    tblc    

    tblcGermany

    TableRow   

    tblr    

    tblrCountry

    TextBox   

    txt    

    txtFirstName

    ValidationSummary 

    vals   

    valsFormErrors

    XML   

    xmlc     

    xmlcTransformResults

     

    7.4变量

    1、 变量的作用域及前缀

    前缀

    说明

    举例

    P

    全局变量

    pstrName

    St

    静态变量

    ststrName

    M

    模块或者窗体的局部变量

    MstrName

    A

    数组

    AintCount[]

     

    2、 变量数据类型的前缀

    C#数据类型

    类库数据类型

    标准命名举例

    Sbyte

    System.sbyte

    sbte

    Short

    System.Int16

    sht

    Int

    System.Int32

    int

    Long

    System.Int64

    lng

    Byte

    System.Byte

    bte

    Ushot

    System.Uint16

    usht

    Uint

    System.Uint32

    uint

    Ulong

    System.Uint64

    ulng

    Float

    System.Single

    flt

    Double

    System.Double

    dbl

    Decimal

    System.Decimal

    dcl

    Bool

    System.Boolean

    bol

    Char

    System.Char

    chr

    Object

    System.Object

    obj

    String

    System.String

    str

     

    System.DateTime

    dte

    IntPtr

    System.Intpre

    intptr

     

     

    7.5其他

    常量定义

    常量=作用域+ c+数据类型+变量名

     

    类对象定义

    类实例=作用域+cls+变量名

    类对象=C+名称

     

    结构对象定义

    结构对象实例=作用域+struc+变量名

    结构对象=S+名称

     

    命名空间定义

    以层为前缀进行命名

     

    接口定义

    以大写I为前缀

     

     

    窗体的命名规则

    窗体名=frm+窗体名(名词+动词)

    注意:保存的文件明和窗体名相同。

     

    枚举定义规则

    Enum为前缀

     

    事件命名规则

    事件控制器要带有EventHandler后缀

    使用sendere命名两个参数

    事件参数类要带有EventArgs后缀

    考虑使用动词命名事件

    对于有“之前”或“之后”概念的事件,要使用现在时或过去时命名

     

    8 编程实践

    8.1 书写顺序

    书写类时,按照从上到下的顺序,类成员应该是域,构造函数,属性,方法。

    8.2 成员可视性

    类的域都应该是private,如果需要被外部访问,使用public属性进行访问。但也有例外:

    其他相关参照:
    http://www.cnblogs.com/William_Fire/archive/2004/08/01/29064.aspx
    http://blog.csdn.net/wkjs/archive/2006/08/14/1061711.aspx

  • 相关阅读:
    洛谷[P1002]过河卒
    ACM-Teleportation
    ACM-Team Tic Tac Toe
    Data_Structure04-树
    Data_Structure03-栈和队列
    Data_Structure02-线性表
    Data_Structure01-绪论
    C语言第二次实验报告
    C语言第一次实验报告
    mysql
  • 原文地址:https://www.cnblogs.com/solo/p/693498.html
Copyright © 2011-2022 走看看