C#代码规范 .NET程序员需要提升的修养
一、 环境设置
首先去除VS开发环境中的一些选项如下:
粘贴时调整缩进
将类型的左大括号置于新行
将方法的左大括号置于新行
将匿名方法的左大括号置于新行
将控制块的左大括号置于新行
将“else”置于新行
将“catch”置于新行
将“finally”置于新行
复选框去掉.
二、 命名规范
1) 通用性
l 标识的总长度不要超过32个字符。
l 标识符的基本语法是以字母和_开始,由字母数字及下划线组成的单词,第一个字符不能是数字。
l 只要合适,在变量名的末尾追加计算限定符(Avg、Sum、Min、Max、Index)。
l 在变量名中使用互补对,如 min/max、begin/end 和 open/close。
l 布尔变量名应该前加或包含 Is(is)。
l 尽量减少使用缩写,而是使用以一致方式创建的缩写。缩写应该只有一个意思;同样,每个缩写词也应该只有一个缩写。例如,如果用 min 作为 minimum 的缩写,那么在所有地方都应这样做;不要将 min 又用作 minute 的缩写。
l 在命名函数时包括返回值的说明,如 GetCurrentWindowName()。
l 避免对不同的元素重用名称,如名为 ProcessSales() 的例程和名为 iProcessSales 的变量。
l 在命名元素时避免同音异义词(如 write 和 right),以防在检查代码时发生混淆。
l 在命名元素时,避免使用普遍拼错的词。另外,应清楚区域拼写之间存在的差异,如 color/colour 和 check/cheque。
l 在内部范围中避免使用与外部范围中的名称相同的名称。若访问错误变量,则会产生错误结果。若变量与同一名称的关键字冲突,则必须在关键字前加适当的类型库以作标识。例如,若有一个名为 date 的变量,只能通过调用 System.Date 来使用内部 Date 函数。
l 接口名称以前缀“I”开始,后面接一个名词或名词词组(如 IComponent),或者接一个描述接口行为的形容词(如 IPersistable)。不要使用下划线,不要过多使用缩写,因为缩写会引起混淆。
l 事件处理程序的名称以一个描述事件类型的名词开始,后面接后缀“EventHandler”,如“MouseEventHandler”。 事件参数类的名称里要加“EventArgs”后缀。
l 如果某事件含有“之前”或“之后”的概念,请以现在时或过去时形式使用前缀,如“ControlAdd”或“ControlAdded”。
l 单个长字符串拆分成多行写。当一行被分为几行时,需要将串联运算符放在每一行的末尾。
l SQL Server中不要给存储过程加sp 前缀/不要给用户定义的函数加 fn_ 前缀/不要给扩展存储过程加 xp_ 前缀。这些前缀是为标识系统保留的。将每个主要的SQL子句放在不同的行上,这样更容易阅读和编辑语句。
l 不要使用原义数字或原义字符串,如 For i = 1 To 7。而是使用命名常数,如 For i = 1 To NUM_DAYS_IN_WEEK 以便于维护和理解。
2) 变量命名
变量名称命名规则:形容词+名词(或名词)
- 属性(类属性/类属性对应的私有变量)
l 类属性与类属性对应的私有变量基本一样。
类属性对应的私有变量是在类属性名的前面加“_”
如:private int _PageSize;// 类属性对应的私有变量
public int PageSize { set { _PageSize = value; } }//类属性
l 注意大小写要保持一致。每个单词的第一个字母必须大写。其它单词的第一个字母也大写。单词之间不加“_”。
l 不要使用public来定义一个属性。
l 属性名和类名以名词开始,如 EmployeeName 和 CarAccessory。
- 私有变量(短期性/长期性)
l 短期性(方法内私有变量/不是经常用的变量)
u 定义前加“_”
u 如:string _strSQL = null;
u 第一个单词的第一个字母必须小写,其它单词第一个字母大写。单词之间不加“_”。
l 长期性(类私有变量/方法入口参数)
u 类私有变量:前加“_”,和类属性对应的私有变量一样。每个单词的第一个字母必须大写。其它单词的第一个字母也大写。单词之间不加“_”。
如:private int _PageSizeTmp;
u 方法入口参数:第一个单词的第一个字母必须小写,其它单词的第一个字母必须大写。如果只有一个单词组成全小写。单词之间不加“_”。
如:public static int SendCTTVOSMS(string mobile,string content)
public static string CallAccountHiVA(string restPhone,string userPhone)
- 全局变量/静态变量/常量
l 定义要全部大写。如:public static int SMS_TYPE = 2;
l 定义部分也可小写。
如:public static string VOSMS_UserName = "88000002";
l 单词与单词之间加“_”分隔。
3) 函数命名
函数命名规则:动词+名词(或动词),每个单词第一个字母必须大写。单词之间不加“_”。
如:public static string GetOrderStatus(int sendMode,int statueID)
函数名和方法名以动词开始,如 InitNameArray() 和 CloseDialog()。
4) 控件命名
控件命名规则:类别+名称
类别对照表:
|
前缀 |
表示类型 |
|
frm |
窗口 |
|
btn |
按钮 |
|
cbo |
下拉式列表框 |
|
txt |
文本输入框 |
|
lbl |
标签 |
|
img |
图像 |
|
pic |
图片 |
|
div |
DIV |
|
grd |
网格 |
|
scr |
滚动条 |
|
lst |
列表框 |
|
sds |
SqlDataSource |
|
ods |
OleDbDataSource |
如按钮:btnSave
|
前缀 |
表示类型 |
|
b/is |
Bool |
|
c |
Char |
|
sb |
Sbyte |
|
b |
Byte |
|
n/i |
Int |
|
ui |
Uint |
|
l |
Long |
|
ul |
Ulong |
|
f |
Float |
|
d |
Double |
|
s/str |
String |
5) 表字段命名
l 在命名表时,用单数形式表示名称。例如,使用 Employee,而不是 Employees。
l 在命名表的列时,不要重复表的名称;例如,在名为 Employee 的表中避免使用名为 EmployeeLastName 的字段。
l 不要在列的名称中包含数据类型。如果后来有必要更改数据类型,这将减少工作量。
6) Web文件目录结构命名
l 与过程名一样,文件和文件夹的名称也应该精确地说明它们的用途。
l Web文件第一个单词的首字符要小写其它单词的首字符要大写。或全小写。文件存在后,在程序中要严格按照文件的大小写引入文件。目录名称必须全小写。
l Web目录结构:
根---类库1
类库…N
解决方案启动文件
项目发布目录
Web源代码--- inc( JS目录)
css(CSS目录)
后台目录
bin目录
app_data数据库目录
master目录
其它子功能目录
app_code类文件
images图片目录
三、 注释规范
1) 在文件的头部标明文件的作者,完成时间,它所完成的主要功能。
2) 程序有过改动后,要写上修改人、时间、简单原因说明列表。
如:
/********************************************************************
* 谁创建的 日期 什么功能描述
* 谁修改的 日期 什么功能描述
* 谁修添加 日期 什么功能描述
* 谁修删除 日期 什么功能描述
********************************************************************/
3) 函数等代码中的注释规范都按系统自动的注释格式
4) 修改代码时,总是使代码周围的注释保持最新。
5) 在每个例程的开始,提供标准的注释样本以指示例程的用途、假设和限制很有帮助。注释样本应该是解释它为什么存在和可以做什么的简短介绍。
6) 避免在代码行的末尾添加注释;行尾注释使代码更难阅读。不过在批注变量声明时,行尾注释是合适的;在这种情况下,将所有行尾注释在公共制表位处对齐。
7) 避免杂乱的注释,如一整行星号。
8) 在部署之前,移除所有临时或无关的注释,以避免在日后的维护工作中产生混乱。
9) 如果需要用注释来解释复杂的代码节,请检查此代码以确定是否应该重写它。尽一切可能不注释难以理解的代码,而应该重写它。尽管一般不应该为了使代码更简单以便于人们使用而牺牲性能,但必须保持性能和可维护性之间的平衡。
10) 在编写注释时使用完整的句子。注释应该阐明代码,而不应该增加多义性。
11) 在编写代码时就注释,因为以后很可能没有时间这样做。另外,如果有机会复查已编写的代码,在今天看来很明显的东西六周以后或许就不明显了。
12) 避免多余的或不适当的注释,如幽默的不主要的备注。
13) 使用注释来解释代码的意图。它们不应作为代码的联机翻译。
14) 注释代码中不十分明显的任何内容。
15) 为了防止问题反复出现,对错误修复和解决方法代码总是使用注释,尤其是在团队环境中。
16) 对由循环和逻辑分支组成的代码使用注释。这些是帮助源代码读者的主要方面。
17) 在整个应用程序中,使用具有一致的标点和结构的统一样式来构造注释。
18) 用空白将注释同注释分隔符分开。在没有颜色提示的情况下查看注释时,这样做会使注释很明显且容易被找到。
19) 为了防止在阅读代码时左右滚动源代码编辑器,每行代码或注释不得超过一个显示屏。
20) 可能多的注释变量表示的意思。
四、 其它代码风格/习惯
1) JS和CSS文件必需是UTF-8编码的文件。
2) 单行的判断代码不需要加“{}”。
如:if (_url.Trim().Equals(String.Empty)) return -2;
能简写的代码要简写。保证自己写出来的代码每一句都是有效代码。
3) 不要使用VS的自动排版代码功能。
4) 少用“==”运算。应该使用“.Equals”进行比较。
5) 运算符前后要空一格。如:_TotalPage = _TotalRecord / _PageSize; 这样做是不会改变代码意图的,却可以使代码更加容易阅读。
6) 每一个操作结束后加一个空行。所有代码里不能有连续的二个或二个以上的空行。
7) 将大的复杂代码节分为较小的、易于理解的模块。
8) 近可能的使用TAB键来空位。不要使用4个空格来代替TAB键。
9) 在页面文件中不能定义static类型的来传递数据。
10)
C#代码规范 .NET程序员需要提升的修养的更多相关文章
- Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!
Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器! http://www.iplaysoft.com/sublimetext.html 代码编辑器或者文本编辑器,对于程序员来说, ...
- [转载]Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux
代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一位程序员,同样会去追求最适合自己的强大.灵活的编辑器,相信你和我一样,都不会例外. 我用过 ...
- 有经验JAVA程序员如何提升自己?
作为一个具有一到五年开发经验程序员,需要学习内容很多: JVM/分布式/高并发/性能优化/Spring MVC/Spring Boot/Spring Cloud/MyBatis/Netty源码分析等等 ...
- iOS程序员如何提升核心竞争力,防止自己被裁员?
前言: 核心竞争力最早由普拉哈拉德和加里·哈默尔两位教授提出,通常认为核心竞争力,即企业或个人相较于竞争对手而言所具备的竞争优势与核心能力差异,说白了就是你的优势,而且最好是独一无二的的优势,这就是核 ...
- iOS程序员 如何提升核心竞争力,防止自己被裁员?
前言: 核心竞争力最早由普拉哈拉德和加里·哈默尔两位教授提出,通常认为核心竞争力,即企业或个人相较于竞争对手而言所具备的竞争优势与核心能力差异, 说白了就是你的优势,而且最好是独一无二的的优势,这就是 ...
- Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux
我用过的编辑器不少,真不少- 但却没有哪款让我特别心仪的,直到我遇到了 Sublime Text 2 !如果说“神器”是我能给予一款软件最高的评价,那么我很乐意为它封上这么一个称号.它小巧绿色且速度非 ...
- 转型IT学什么语言好,学编程语言为何要重视代码规范?
造价转IT需要注意什么,先学什么比较好?属于零基础,2019毕业,三本学校,男.自己的想法是先以副业来学习,在合适的时候转入it行业.1.以副业来学的话应该先学习什么比较好?2.如果要直接找工作的话先 ...
- 程序员减少代码BUG的7种方法,拒绝编程5分钟,查代码2小时!
0.别对警告视而不见 相信不少的程序员会使用IDEA,使用它敲代码,有时候会出现警告,那么这时你对警告就不能视而不见了. 我们的目标是,写干净的代码,做风一样的男子! 1.编程习惯 种瓜得瓜种豆得豆, ...
- Git学习总结(6)——作为一名程序员这些代码托管工具你都知道吗?
作为一名程序员这些代码托管工具你都知道吗? 作为一名优秀的开发者,大家都会用到代码托管,我本人用的是github,确实github里面有很多很多开源的项目,所以我们目前的创业项目程序员客栈www.pr ...
随机推荐
- JSON详解 .net
之前json掌握的不好,浪费了好多时间在查找一些json有关的转换问题,我所知道的方法只有把json序列化和反序列化一下,但是太麻烦了我觉得,所以就在找一些更简单又方便使用的方法.也许这个会有用吧,所 ...
- parseInt第二个参数详解
前阵子在stackOverflow上看到两个这样的问题: 为什么parseInt(8,3) == NaN,parseInt(16,3) == 1? 为什么parseInt('dsff66',16) = ...
- javascript --- 只继承于原型
正如上次所述,,出于效率考虑,我们应该尽可能的将一些可重用的属性和方法添加到原型中去. 如果养成了这个好习惯,我们仅仅依靠原型就能顺利的完成继承关系的构建了. 毕竟采用new her()方法将her的 ...
- Ettercap中间人攻击--介绍
前言 Ettercap有四种界面:Text,Curses,GTK2,Daemonize. -T 命令行界面,只显示字符.通常与配套的参数有-q(安静模式),加上该选项,则不会显示抓到的数据包 ...
- Mybatis学习记录(七)----Mybatis查询缓存
1. 什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 sql ...
- 转:Web App开发入门
WebApp与Native App有何区别呢? Native App: 1.开发成本非常大.一般使用的开发语言为JAVA.C++.Objective-C. 2.更新体验较差.同时也比较麻烦.每一次发布 ...
- C语言中的指针和内存泄漏
引言 对于任何使用C语言的人,如果问他们C语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧,但是 ...
- iOS开发之网络编程--中文转码
前言: 在GET请求或者是POST请求,请求上传的参数如果含有中文,可能会导致请求失败. 所以要对存储了URL地址的NSString对象进行中文转码,然后将这个NSString对象传递给URL. ...
- 如何修改opencms数据库配置
修改/webapps/opencms/WEB-INF/config/opencms.properties文件 什么情况下需要修改配置? 1. 使用过程中,修改数据库配置: 2. 太长时间没接触服务器, ...
- Effective Java 53 Prefer interfaces to reflection
Disadvantage of reflection You lose all the benefits of compile-time type checking, including except ...