本节将定义C#开发社区普遍接受的命名约定。一些公司可能会定义不同的命名约定,但这种做法通常是根据个别需求进行的,而且一般不提倡。本节中讨论的一些对象可能超出了读者当前的知识范围,但可以稍后参考本节内容。

理由

大部分命名标准源自微软的.NET框架库。这些标准已被证明能使名称在“一眼看上去”时具有可读性和可理解性。通过使用正确的命名约定来命名对象,您可以确保其他C#程序员在阅读您的代码时能够轻松理解对象的含义,而无需在代码中搜索其定义。

命名约定

命名空间

命名空间使用Pascal命名法(也称为大驼峰命名法),且不使用下划线。这意味着名称中的每个单词的首字母都应大写。例如:MyNewNamespace。Pascal命名法还意味着,三个或更多字母的缩写应该只大写第一个字母(例如:MyXmlNamespace,而不是MyXMLNamespace)。

程序集

如果一个程序集仅包含一个命名空间,那么程序集和命名空间应使用相同的名称。否则,程序集应遵循常规的Pascal命名法。

类和结构体

使用Pascal命名法,不使用下划线,也不使用以C、cls或I开头的前缀。类名不应与其所在的命名空间相同。三个或更多字母的缩写应使用Pascal命名法,而不是全部大写。尽量避免使用缩写,并尽量始终使用名词。

异常类

遵循类命名约定,但在名称末尾添加Exception。在.NET 2.0中,所有类应该继承自System.Exception基类,而不是继承自System.ApplicationException

接口

遵循类命名约定,但接口名称应以I开头,并且I后的字母大写。例如:IFooI前缀有助于区分接口和类,并避免名称冲突。

函数

使用Pascal命名法,不使用下划线,除非是事件处理程序。尽量避免使用缩写。许多程序员有过度缩写一切的坏习惯,应当避免这种做法。

属性和公共成员变量

使用Pascal命名法,不使用下划线。尽量避免使用缩写。

参数和过程级变量

使用Camel命名法(或小驼峰命名法)。尽量避免使用缩写。Camel命名法与Pascal命名法相同,只是第一个单词的首字母小写。

类级私有和保护变量

使用Camel命名法,并在变量前加下划线。在声明时始终指明变量是私有的还是保护的。前导下划线是本文件中唯一具有争议的部分。这个前导字符有助于防止在构造函数中发生名称冲突(即参数和私有变量具有相同的名称)。

表单控件

使用Pascal命名法,并加上前缀,标识它是UI的一部分,而不是纯粹的代码控件(例如临时变量)。许多开发人员使用ui作为前缀,后跟描述性名称,如txtUserNamelblUserNickNametxt代表TextBox控件,lbl代表Label控件)。

这实际上是Camel命名法;此外,这种命名约定被称为匈牙利命名约定,在现代编程中通常不推荐使用。使用此命名约定的变量名称像lblSurnametbSurname,而不是surnameLabelsurnameTextBox。这种命名方法的附加优势是,类似的UI元素在IntelliSense中按字母顺序连续列出。

Some samples are below for ASP.Net web form controls:

Control Prefix Example
Label lbl lblSurname
TextBox(ASP.Net) tb tbSurname
TextBox(WinForms) txt txtUserName
DataGrid dg dgResults
GridView gv gvResults2
Button btn btnSave
ImageButton iBtn iBtnSave
Hyperlink lnk lnkHomePage
ComboBox cmb cmbYear
DropDownList ddl ddlCompany
ListBox lst lstCompany
DataList dLst dLstAddress
DataSet ds dsInvoices
DataTable dt dtClients
DataRow dr drUser
Repeater rep repSection
Checkbox chk chkMailList
CheckBoxList chk chkAddress
RadioButton rBtn rBtnGender
RadioButtonList rBtn rBtnAgeGroup
Image img imgLogo
Panel pnl pnlSevtion
PlaceHolder plh plhHeader
Calendar cal calMyDate
AdRotator adr adrBanner
Table tbl tblResults
[All] Validators val (N/A) valCreditCardNumber
ValidationSummary vals (N/A) valsErrors

常量

常量使用Pascal命名法。强烈不推荐使用SCREAMING_CAPS。这与早期的约定相比是一个很大的变化。大多数开发人员现在意识到,使用SCREAMING_CAPS会暴露出不必要的实现细节。《.NET框架设计指南》中的一大部分内容专门讨论了这个问题。

以下是一个示例类,结合了所有这些命名约定:

using System;

namespace MyExampleNamespace
{
    public class Customer : IDisposable
    {
        private string _customerName;
        
        public string CustomerName 
        { 
            get 
            { 
                return _customerName; 
            }
            set
            {
                _customerName = value;
                _lastUpdated = DateTime.Now;
            }
        }

        private DateTime _lastUpdated;

        public DateTime LastUpdated
        {
            get
            {
                return _lastUpdated;
            }
            private set
            {
                _lastUpdated = value;
            }
        }

        public void UpdateCustomer(string newName)
        {
            if (!newName.Equals(CustomerName))
            {
                CustomerName = newName;
            }
        }

        public void Dispose()
        {
            // 不做任何操作
        }
    }
}
最后修改: 2025年01月11日 星期六 12:15