# C#常用命名规则汇总
在C#开发中,遵循一致的命名规则是编写可读性强、易于维护代码的关键。本文汇总了C#中常用的命名规则,涵盖类、接口、枚举、变量、方法、属性等多个方面,供开发者参考。
## 基本命名规则
### Pascal规则
每个单词开头的字母大写,例如 `TestCounter`。
### Camel规则
除了第一个单词外,其他单词的开头字母大写,例如 `testCounter`。
### Upper规则
仅用于一两个字符长的常量的缩写命名,超过三个字符长度应使用Pascal规则。例如:
```csharp
public class Math
{
public const PI = ...;
public const E = ...;
public const FeigenBaumNumber = ...;
}
```
## 类命名指导
- 类名应为名词或名词短语,尽可能使用完整的词。
- 使用Pascal规则。
- 不要使用类前缀或下划线字符(_)。
- 若类名以字母I开始且I是整个单词的第一个字母(如 `IdentityStore`),这是适当的。
- 派生类名称的第二个部分应是基类的名称,例如 `ApplicationException` 是从 `Exception` 派生的适当名称。
## 接口命名规则
- 接口名称应为名词、名词短语或描述其行为的形容词,尽可能使用完整的词(如 `IComponent` 或 `IEnumerable`)。
- 使用Pascal规则。
- 使用字符I为前缀,并紧跟一个大写字母。例如:
```csharp
interface ICompare
{
int Compare();
}
```
## 枚举命名规则
- 对于Enum类型和值名称使用Pascal大小写。
- 少用缩写。
- 不要在Enum类型名称上使用Enum后缀。
- 对大多数Enum类型使用单数名称,对作为位域的Enum类型使用复数名称。
- 总是将 `FlagsAttribute` 添加到位域Enum类型。
## 变量命名
- 在简单的循环语句中计数器变量使用 `i, j, k, l, m, n`。
- 使用Camel命名规则。
## 方法命名
- 使用Pascal规则。
- 方法名应采用一致的动词/宾语或宾语/动词顺序。例如,`InsertWidget` 或 `WidgetInsert`。
- 推荐名称应为动词或动词短语,例如 `Save`、`SaveCustomer`,而不要使用 `CustomerSave`。
- 不要在方法中重复类的名称,例如,类名为 `Book` 时,方法应命名为 `Close` 而不是 `CloseBook`。
## 属性命名
- 名称应为名词或名词短语。
- 使用Pascal规则。
- 对于bool型属性或变量,使用 `Is` 作为前缀,例如 `IsDeleted`,而不要使用 `DeleteFlag`。
## 集合命名
- 名称应为名词或名词短语。
- 使用Pascal规则。
- 名称后面追加“Collection”,例如 `CustomerCollection`。
## 事件命名
- event handlers命名使用 `EventHandler` 后缀。
- 两个参数分别使用 `sender` 及 `e`。
- 使用Pascal规则。
- 事件参数使用 `EventArgs` 后缀。
- 事件命名使用语法时态反映其激发的状态,例如 `Changed`、`Changing`。
- 考虑使用动词命名。
## 自定义属性与异常
- 自定义的属性以 `Attribute` 结尾,例如:
```csharp
public class AuthorAttribute : Attribute
{
}
```
- 自定义的异常以 `Exception` 结尾,例如:
```csharp
public class AppException : Exception
{
}
```
## 其他常用编码规则
- 代码缩进使用Tab,而不是space。
- 局部变量的名称要有意义,避免使用 `x`、`y`、`z`(除For循环变量中可使用 `i`、`j`、`k`、`l`、`m`、`n`)。
- 所有的成员变量声明在类的顶端,用一个换行把它和方法分开。
- 用有意义的名字命名namespace,如产品名、公司名。
- 始终使用 `{ }` 包含if下的语句,即使只有一条语句。
- 把相似的内容放在一起,比如数据成员、属性、方法、事件等,并适当使用 `#region…#endregion`。
## 命名规范总结表
| 标识符 | 大小写 | 示例 |
| --- | --- | --- |
| 类/结构 | Pascal | `AppDomain` |
| 枚举类型 | Pascal | `ErrorLevel` |
| 枚举值 | Pascal | `FatalError` |
| 事件 | Pascal | `ValueChange` |
| 异常类 | Pascal | `WebException`(注意:总是以 `Exception` 后缀结尾) |
| 只读的静态字段 | Pascal | `RedValue` |
| 接口 | Pascal | `IDisposable`(注意:总是以 `I` 前缀开始) |
| 集合 | Pascal | `CustomerCollection`(注意:总是以 `Collection` 结束) |
| 方法 | Pascal | `ToString` |
| 命名空间 | Pascal | `System.Drawing` |
| 参数 | Camel | `typeName` |
| 属性 | Pascal | `BackColor` |
| 受保护的实例字段 | Camel | `redValue`(注意:很少使用,属性优于使用受保护的实例字段) |
| 公共实例字段 | Pascal | `RedValue`(注意:很少使用,属性优于使用公共实例字段) |
### 变量命名前缀示例
| 类型 | 前缀 | 示例 |
| --- | --- | --- |
| Array | `arr` | `arrShoppingList` |
| Boolean | `bln` | `blnIsPostBack` |
| Byte | `byt` | `bytPixelValue` |
| Char | `chr` | `chrDelimiter` |
| DateTime | `dtm` | `dtmStartDate` |
| Decimal | `dec` | `decAverageHeight` |
| Double | `dbl` | `dblSizeofUniverse` |
| Integer | `int` | `intRowCounter` |
| Long | `lng` | `lngBillGatesIncome` |
| Object | `obj` | `objReturnValue` |
| Short | `shr` | `shrAverage` |
| Single | `sng` | `sngMaximum` |
| String | `str` | `strFirstName` |
### 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` |
### 页面控件相关命名
| 数据类型 | 数据类型简写 | 标准命名举例 |
| --- | --- | --- |
| 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` |
| FontDialog | `fdlg` | `fdlgFoot` |
| ColorDialog | `cdlg` | `cdlgColor` |
| PrintDialog | `pdlg` | `pdlgPrint` |
遵循这些命名规则,可以显著提高C#代码的可读性和可维护性,使团队协作更加高效。
# C# 命名规则总结
在 C# 编程中,遵循科学合理的命名规则至关重要,它不仅能提升代码的可读性和可维护性,还能增强团队协作效率,使代码更易于理解和扩展。以下是对 C# 命名规则的详细总结。
## 一、标识符通用规则
1. **合法字符**:C# 标识符由字母(包括 Unicode 字符集中的字母)、下划线(_)和数字组成,但不能以数字开头。例如,`_variableName`、`userName123` 是合法的,而 `123userName` 不合法。
2. **区分大小写**:C# 是区分大小写的语言,`myVariable` 和 `MyVariable` 被视为两个不同的标识符。
3. **避免关键字**:不能使用 C# 的关键字作为标识符,如 `int`、`class` 等。若必须使用,可在关键字前加上 `@` 符号,如 `@class`,但这种情况应尽量避免。
## 二、变量命名规则
1. **驼峰命名法(Camel Case)**:常用于局部变量和私有字段。第一个单词首字母小写,后续单词首字母大写。例如,`studentName`、`totalCount`。这种命名方式使变量名在代码中更紧凑易读,尤其在频繁使用时能减少视觉干扰。
2. **有意义的命名**:变量名应准确反映其用途和含义。避免使用简单无意义的名称,如 `a`、`temp` 等。例如,用 `customerAddress` 而不是 `addr` 来表示客户地址,能让他人快速理解变量的作用。
## 三、方法命名规则
1. **帕斯卡命名法(Pascal Case)**:方法名每个单词的首字母都大写,不包含下划线。例如,`CalculateTotalPrice`、`GetCustomerInfo`。这种命名方式使方法名在调用时更加醒目,能清晰地表达方法的功能。
2. **动词开头**:方法通常表示一个动作或操作,所以应以动词开头。如 `SaveData` 表示保存数据,`ValidateInput` 表示验证输入。这有助于明确方法的用途和行为。
## 四、类命名规则
1. **帕斯卡命名法**:与方法命名类似,类名也采用帕斯卡命名法。类名应能够准确概括类的职责和功能,是一个名词或名词短语。例如,`CustomerManager` 表示客户管理类,`OrderProcessor` 表示订单处理类。
2. **避免缩写**:除非是广泛认可的缩写,否则应尽量避免使用缩写,以保证类名的清晰易懂。例如,使用 `DatabaseConnection` 而不是 `DbConn`。
## 五、命名空间命名规则
1. **公司或项目域名反向**:通常采用公司或项目的域名反向形式作为命名空间的根,然后根据项目的模块和功能进行分层。例如,公司域名为 `example.com`,项目名为 `MyProject`,则命名空间可以是 `Com.Example.MyProject.Models`。
2. **层次清晰**:命名空间应按照逻辑层次进行组织,便于代码的管理和查找。不同层次的命名空间应具有明确的职责划分,避免命名冲突。
遵循 C# 的命名规则是编写高质量代码的基础。良好的命名习惯能够使代码结构清晰,减少沟通成本,提高开发效率。无论是个人开发者还是团队协作项目,都应严格遵守这些规则,以打造出易于维护和扩展的优秀软件。