C#格式规范
前言
之前工作中整理的一篇编码规范。
代码注释
注释约定
方法注释
所有的方法都应该以描述这段代码的功能的一段简明注释开始(方法是干什么)。这种描述不应该包括执行过程细节(它是怎么做的)
/// <summary>
/// 把对象类型转化为指定类型
/// </summary>
/// <typeparam name="T">动态类型 </typeparam>
/// <param name="value">要转化的源对象 </param>
/// <returns> 转化后的指定类型的对象,转化失败引发异常。</returns>
public static T CastTo<T>(this object value)
代码行注释
如果某一功能需要多行代码,并有多个逻辑结构,应在此代码前添加注释,说明此块代码的处理思路及注意事项等
注释从新行增加,与代码开始处左对齐
注释双斜线与注释之间以空格分开,示例如下:
public void Dispose(){
// 如果连接已打开,则关闭连接并释放资源
if(this.connection.State == ConnectionState.Open ){
this.connection.Close();
this.connection.Dispose();
}
}
变量注释
变量需添加注释,说明变量的用途
Class级变量使用///生成的Xml标签格式的文档注释
/// <summary>
/// 文档名称
/// </summary>
public static string docName = "";
方法级的变量注释可以放在变量声明语句后,与上下行的注释左对齐,注释与代码间以
Tab键分隔
public void CreateDoc() {
string docType = ""; //文档类型
string author = ""; //作者
DateTime createDate = DateTime.Now; //创建世界
}
命名规范
命名基本约定
PascalCasing:
包含一个或多个单词,每个单词首字母大写,其余小写
使用范围:命名空间、类、接口、方法、属性、事件、非私有字段、枚举值
namespace System.IO
public static class Console
public enum FileAccess
camelCasing:
包含一个或多个单词,第一个单词首字母小写,其余单词首字母大写
使用范围:方法参数、局部变量
public string GetName(int productId){
string productName = null;
}
_camelCasing:
"_"+camelCasing的方式
使用范围:私有字段
private string _productName;
UPPER_CAPS:
包含多个单词,每个单词的所有字母大写,单词之间使用"_"连接
使用范围:const常量
public const string DEFAULT_NAME = "default";
示例:
namespace ConsoleApp {
public delegate void SalesOutEventHandler();
public class Product {
public event SalesOutEventHandler OnSalesOut;
public Product GetProductById(int productId) {
return null;
}
private enum ProductType {
}
}
}
标识符命名约定
类和接口
类的名字使用名词
避免使用单词缩写,除非是广为人知的,比如:HTTP,IO
接口以I字母开头
同一项目不同命名空间中的类,命名避免重复
方法
第一个单词为动词
返回值为bool类型,则加Is,Can,Try前缀
变量
尽量使用短而有意义的单词
单字符变量名一般用于生命周期非常短的变量,如for,foreach中递增变量可以被命名为i
如果变量表示集合,则变量名使用复数,如RowsCount
命名控件使用匈牙利命名法,前缀遵循同一个缩写表
在带单位的值变量后加“_camelCasing”格式的单位,如:public void CreateCache(int cacheSize_mb)
类型成员排列顺序
类型成员的排列顺序自上而下依次为:
字段: 私有字段、受保护字段
属性: 私有属性、受保护属性、公有属性
事件: 私有事件、受保护事件、公有事件
构造函数: 参数数量最少的构造函数,参数数量中等的构造函数,参数数量最多的构造函数
方法: 重载方法的排列顺序与构造函数相同,从参数数量最少往下至参数最多
其他规范
代码长度
每行代码不宜过长,应在屏幕宽度之内,约为80-120个字符左右。换行规则如下:
在逗号后换行
在操作符后换行
在高层换行而不是在低层换行
换行后与上一行语句对齐
推荐写法:
var n = a * b / (c - g + f) +
4 * z;
不推荐写法:
var n = a * b / (c - g +
f) + 4 * z;
方法行数
每个方法的有效代码行数(不包括注释和空行)应保持在50行以内
空白
空行是为了将逻辑相关的代码分块,以便提高阅读性
在以下情况使用两个空行:
类声明和接口声明之间
两个类声明之间
枚举与类声明之间
在以下情况使用一个空行:
方法与方法、属性与属性之间
方法中变量声明与语句之间
方法与方法之间
方法不同逻辑块之间
类中属性与方法、属性与字段、方法与字段之间
注释与它注释的语句之间不空行,与其他语句之间空一行
在以下情况使用空格:
在VS编辑器中可以使用快捷键格式化代码
参数列表的逗号后,
void UpdateDate(int a, int b)
二元操作符,a += b - c;
强制类型转换后,c = (char) a;
代码缩进
代码缩进使用Tab键,不要使用空格,Tab键的宽度为4个字符,VS中设置如下:
【工具】-【选项】-【文本编辑器】-【C#】-【制表符】,选中【保留制表符】
代码半展开
把花括号放在前一条语句的末尾,VS中设置如下:
【工具】-【选项】-【文本编辑器】-【C#】-【格式设置】-【新行】,取消右侧所有勾选
附录
注释内容
| 项目 | 注释内容 |
|---|---|
| 类 | 类的目的,开发历史 |
| 接口 | 接口的目的,如何使用 |
| 字段/属性 | 字段描述 |
| 方法注释 | 方法作用,返回值,抛出的异常,调用的前提和后置条件 |
| 方法内部注释 | 控制结构,复杂的代码,处理顺序 |
| 参数 | 用来做什么,约束,前提条件 |
| 局部变量 | 用处,目的 |
XML文档注释
MSDN文档注释标签 https://msdn.microsoft.com/zh-cn/library/5ast78ax(v=vs.140).aspx
| 标记 | 说明 |
|---|---|
| <c> | 提供了一种将说明中的文本标记为代码的方法 |
| <code> | 提供了一种将多行指示为代码的方法 |
| <example> | 可以指定使用方法或其他库成员的示例。一般情况下,这将涉及到<code>标记的使用。 |
| <exception> | 对可从当前编译环境中获取的异常的引用。 |
| <include> | 引用描述源代码中类型和成员的另一文件中的注释。 |
| <list> | 用于定义表或定义列表中的标题行。 |
| <para> | 用于诸如<summary>、<remarks> 或 <returns> 等标记内,使您将结构添加到文本中。 |
| <param> | 应当用于方法声明的注释中,以描述方法的一个参数。 |
| <paramref> | 提供了一种指示词为参数的方法。 |
| <permission> | 将成员的访问记入文档。 |
| <remarks> | 用于添加有关某个类型的信息,从而补充由 <summary> 所指定的信息。 |
| <returns> | 应当用于方法声明的注释,以描述返回值。 |
| <see> | 从文本内指定链接。 |
| <seealso> | 对可以通过当前编译环境进行调用的成员或字段的引用。 |
| <summary> | 应当用于描述类型或类型成员。 |
| <value> | 描述属性。 |
VS常用快捷键
| 功能 | VS2010 | VS2013 | 说明 |
|---|---|---|---|
| 文档格式化 | Ctrl+E, Ctrl+D | Ctrl+K, Ctrl+D | 格式化当前文档 |
| 选定内容格式化 | Ctrl+E, Ctrl+F | Ctrl+K, Ctrl+F | 格式化选中内容 |
| 注释 | Ctrl+E, Ctrl+C | Ctrl+K, Ctrl+C | 注释当前行 |
| 取消注释 | Ctrl+E, Ctrl+U | Ctrl+K, Ctrl+U | 取消注释当前行 |
| 复制 | Ctrl+C | - | 复制光标所在行,不需要选中 |
| 剪切 | Ctrl+X | - | 剪切光标所在行,不需要选中 |
| 删除 | Ctrl+L | - | 删除光标所在行,不需要选中 |
| 折叠 | - | Ctrl+M, Ctrl+O | 折叠当前文档 |
| 展开折叠 | - | Ctrl+M, Ctrl+L | 展开当前文档 |
参考
MSDN开发语言和工具 https://msdn.microsoft.com/zh-cn/library/aa187916.aspx
C#语言规范 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC#\Specifications\2052\CSharp Language Specification.docx
C#格式规范的更多相关文章
- OverWatch团队文档格式规范
V1.0 最终修改于2016/10/19 概述 软件工程中,一份优雅的文档不仅能降低团队成员之间的沟通难度,而且能给之后的开发者提供一个非常有效的引导.本团队为了规范整个项目中文档的格式,便于统一管理 ...
- GeoJSON格式规范说明
GeoJSON格式规范说明 1.简介 GeoJSON是一种对各种地理数据结构进行编码的格式.GeoJSON对象可以表示几何.特征或者特征集合.GeoJSON支持下面几何类型:点.线.面.多点.多线.多 ...
- IOS格式规范
IOS格式规范 目录 概述 日期格式 NSDateFormatter格式说明 概述 日期格式 声明时间格式:NSDateFormatter *date_formatter = [[NSDateForm ...
- NFC(10)NDEF uri格式规范及读写示例(解析与封装ndef uri)
只有遵守NDEF uri 格式规范的数据才能写到nfc标签上. NDEF uri 格式规范 uri 只有两部分: 第1个字节是uri协议映射值,如:0x01 表示uri以 http://www.开头. ...
- NFC(9)NDEF文本格式规范及读写示例(解析与封装ndef 文本)
只有遵守NDEF文本格式规范的数据才能写到nfc标签上. NDEF文本格式规范 不管什么格式的数据本质上都是由一些字节组成的.对于NDEF文本格式来说. 1,这些数据的第1个字节描述了数据的状态, 2 ...
- WEB学习笔记4-前端代码基本命名规法和格式规范
1.HTML命名规范及格式规范 标签名和属性应该都小写,虽然HTML代码不区分大小写:属性值应该用双引号闭合. <IMG src=demo.jpg alt='test'/>(N) < ...
- (转载)将一段符合XML格式规范字符串插入已有XML文档当中
想我们已经存在一个XML文档,结构如下: < xmlversion="1.0"encoding="utf-8">< employees&g ...
- 理解CSV格式规范(解析CSV必备)
什么是CSV逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本),文件的每一行都是一个数据记录.每个记录由一个或多个字段组成,用逗号分隔.使 ...
- Linux:可执行程序的Shell传参格式规范
1. Linux下可执行程序的Shell传参格式规范 Linux下的可执行程序在运行时经常需要传一些参数,而这些参数是有规范的.包括我们自己写的在Linux系统下运行的Shell脚本.Python脚本 ...
- XML学习笔记(二)-- DTD格式规范
标签(空格分隔): 学习笔记 XML的一个主要目的是允许应用程序之间自由交换结构化的数据,因此要求XML文档具有一致的结构.业务逻辑和规则.可以定义一种模式来定义XML文档的结构,并借此验证XML文档 ...
随机推荐
- base operand of '->' has non-pointer type 'const Comple
base operand of '->' has non-pointer type 'const Comple ->操作符前面的操作数类型不是指针类型 错误原因 函数(&对象) { ...
- dom4j 创建一个带命名空间的pom.xml 文件
http://xml.apache.org/xalan-j/index.html 需要的jar包 <dependencies> <dependency> <groupId ...
- bash编程-grep
grep, egrep, fgrep :输出匹配模式的行 grep:支持基本正则表达式元字符(grep -E相当于egrep) egrep:支持扩展正则表达式元字符(egrep -G相当于grep) ...
- 微服务应用新趋势:Service Mesh、AIOps和中台化
微服务技术由于天生支持快速迭代.弹性扩展的特点,使企业能够在不确定性下提升发展速度及抗风险能力,受到了越来越多的关注.当前,云服务商纷纷试水微服务产品,最为典型的,当属推出轻舟微服务平台.剑指整个微服 ...
- Java 内存回收机制——GC机制
一.Java GC 概念说明 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾 ...
- Java 实现删除文件工具类
工具代码 package com.wangbo; import java.io.File; /** * 删除目录或文件工具类 * @author wangbo * @date 2017-04-11 1 ...
- Maven(个人整理)(一,未完待续)
Maven 1. 什么是Maven? 乍一看,Maven看起来很多东西,但简而言之,Maven试图将 ...
- win10 插入16k采样的耳机无法播放和录音的问题定位
平时做智能耳机,需要经常在windows上测试不同采样率的声音信号.可是,最近在16k双声道输入的情况下, 无论系统都使用该耳机进行播放,该问题思索了好久,一直没有解决办法. 今天无意中使用了wind ...
- python(leetcode)-136只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...
- python数据结构-数组/列表/栈/队列及实现
首先 我们要分清楚一些概念和他们之间的关系 数组(array) 表(list) 链表(linked list) 数组链表(array list) 队列(queue) 栈(stack) li ...