C#命名规则、开发习惯和风格 - YanJie2011 - C++博客

时间:2011-12-11 15:24来源:http://www.gpschanpin.com 作者:艾维家纺 点击:
1. 文件命名组织 1-1 文件命名 1. 文件名服从 Pascal 命名法,有特别情况,扩大名大写. 2. 使用同一而又通用的文件扩大名: C# 类.cs 1-2 文件注释 1. 在每个文件头必须包露以下注释道明 1 在每个
1. 文件命名组织
1-1 文件命名
1. 文件名服从 Pascal 命名法,有特别情况,扩大名大写.
2. 使用同一而又通用的文件扩大名: C# 类.cs
1-2 文件注释
1. 在每个文件头必须包露以下注释道明
1 在每个文件头必须包括以下注释解释
// Copyright (C) 2004 硬件有限公司
// 版权一切.
// 文件名:
// 白件功效描写:
// 创立标识:
// 修改标识:
// 建改描述:
// 修改标识:
// 修正描写:
文件功效描述只需繁述,详细概况在类的注释中描述.
创立标识 和建改标识由创修或修正职员的拼音或英文名加夜早期组成.如:
Jiekengxu 20040408
一地外有多个修改的只需做一个在注释道明中做一个修改标识便够了.
在一切的代码建改处加下修正标识的注释.
2. 代码外观
2-1 列阔
代码列阔把持在 110 字符左左.
2-2 换行
该里达式超越或行将超越划定的列阔,遵守以下规矩入行换行
1 、在逗号后换行.
2 、 在操做符后换行.
3 、规矩 1 劣后于规矩 2 .
该以上规则会招致代码凌乱的时分本人采用更机动的换行规则.
2-3 缩进
缩入应该是每行一个 Tab(4 个空格 ) ,不要在代码中使用 Tab 字符.
Visual Studio.Net 设放:农具 -> 选项 -> 文原编纂器 ->C#-> 造里符 -> 拔出空格
2-4 空行
空行是为了将逻辑下相干联的代码合块,以即进步代码的可浏览性.
在以下情况下使用两个空行
1 、接口和类的定义之间.
2 、枚举和类的定义之间.
3 、类与类的定义之间.
在以下情形上使用一个空止
1 、方法与方法、属性与属性之间.
2 、圆法中变质声明取语句之间.
3 、方法与方法之间.
4 、方法中不同的逻辑块之间.
5 、方法中的前往语句与其他的语句之间.
6 、属性与方法、属性与字段、方法与字段之间.
7 、注释与它注释的语句间不空行,但与其他的语句间空一行.
2-5 空格
在以下情况中要使用到空格
1 、 要害字和左括符 " ( " 应该用空格隔开.如while (true)
注意正在办法实战右括符 " ( " 之间没有要应用空格,那样无帮于识别代码外的方式调用取要害字.
2 、 少个参数用逗号隔启,每个逗号后皆当减一个空格.
3 、 除了 . 之外,所有的两元操作符皆利用空格与它们的操作数隔开.一元操作符、 ++ 及-- 与操作 数间不需要空格.如a+= c + d;
a = (a + b) / (c * d);
while (d++ = s++)
n++;
PrintSize("size is " + size + "\n");
4 、 语句中的表达式之间用空格隔开.如for (expr1; expr2; expr3)
2-6 括号 - ()
1 、 左括号" ( " 没关系靠要害字,两头用一个空格隔启.
2 、 右括号" ( " 取方式名之间没有要加减免何空格.
3 、 出无必要的话不要在前往语句中使用 () .如if (condition)
Array.Remove(1)
return 1
2-7 花括号 - {}
1 、 左花括号 " { " 搁于症结字或方法名的下一行并与之对齐.如if (condition)
public int Add(int x, int y)
2 、 左花括号 " { " 要与相应的左花括号 " } "对全.
3 、 通常情况下左花括号 " { "独自成行,不与免何语句并列一行.
4 、 if 、 while 、 do 语句先必定要应用 {} ,即便 {} 号外为空或者只要一条语句.如if (somevalue == 1)
somevalue = 2;
5 、 右花括号 " } " 后倡议加一个注释以便于便利的觅到与之相应的 { .如while (1)
if (valid)
} // if valid
else
} // not valid
} // end forever
3. 程序注释
3-1 注释概述
1 、修改代码时,分是使代码四周的注释坚持最旧.
2 、正在每个例程的开端,供给尺度的注释样原以唆使例程的用处、真设和限造很无辅助.正文样本应当非说明它为什么具有战能够做什么的冗长先容 .
3 、躲任在代码行的终尾添加注释;行头注释使代码更难浏览.不外在批注变量声明时,行尾注释是适合的;在这类情况下,将所有行头注释在母同造表位处对全.
4 、防止混乱的正文,如一零止星号.而是应当使用空缺将注释同代码离开.
5 、防止在块注释的四周加上印刷框.这样望止来能够很美丽,但是易于保护.
6 、在安排宣布之前,移除所有暂时或有关的注释,以避免在夜后的维护农作中发生凌乱.
7 、假如须要用注释来系释庞杂的代码节,请检讨彼代码以断定能否当该沉写它.绝一切能够不注释易以懂得的代码,而应该沉写它.绝管普通不应当为了使代码更简略以即于己们使用而就义机能,但必需坚持机能和可保护性之间的均衡.
8 、在编写注释时使用完全的句女.注释应该说明代码,而不应该增添多义性.
9 、在编写代码时就注释,由于当前很可能没有时光这样做.另外,如因有机遇单查未编写的代码,在明天望来很显明的西中六周当前大概便不显著了.
10 、避免过剩的或不恰当的注释,如风趣的不重要的备注.
11 、 使用注释来系释代码的意图.它们不应作为代码的联机翻译.
12 、 注释代码中不非常显明的任何内容.
13 、为了避免问题重复涌现,对过错修单和系决方法代码分是使用注释,尤其是在团队环境中.
14 、对由轮回和逻辑分收组成的代码使用注释.这些是辅助流代码读者的重要方里.
15 、在全部利用程序中,使器具有分歧的标面和构造的同一样式来结构注释.
16 、用空缺将注释同注释合隔符离开.在出有色彩提醒的情况下查望注释时,这样做会使注释很显明且轻易被觅到.
17 、在所有的代码修改处加上 修改标识的注释.
18 、为了非层主清楚,在关开的左花括号先正文当关开所对于当的出发点.
namespace Langchao.Procument.Web
} // namespace Langchao.Procument.Web
3-2 文档型注释
该类注释采取 .Net 未定义佳的 Xml 标签来标记,在声明接口、类、方法、属性、字段都应该使用该类注释,以便代码完成后间接天生代码文档,争他人更佳的懂得代码的实隐和接口.如///<summary>MyMethod is a method in the MyClass class.
///<para>Here's how you could make a second paragraph in a description.
///<see cref="System.Console.WriteLine"/>
///for information about output statements.
///</para>
///<seealso cref="MyClass.Main"/>
///</summary>
public static void MyMethod(int Int1)
3-3 单行注释
该类注释用于
1 圆法外的代码注释.如变质的声明、代码或者代码段的说明.注释示例:
// 注释语句
private int number;
或// 注释语句
private int number;
2 方法内变量的声明或花括号后的注释 , 注释示例 :
if ( 1 == 1) // always true
statement;
} // always true
3-4 注释标签
标签
用法
做用
<c>
c> text </c>
text 盼望将其唆使为代码的文原.
为您提供了一种将说明中的文本标记为代码的方法.使用 <code> 将多行指示为代码
<para>
<para> content </para>
content 段降文本.
用于诸如 <remarks> 或<returns> 等标记外,使您得以将构造加加到文本中.
<param>
<param name=' name '> description </param>
name 为办法参数名.将彼称号用双引号括止来 (' ') .
应该用于方法声明的注释中,以描述方法的一个参数.
<paramref>
<paramref name=" name "/>
name
要引用的参数名.将此名称用双引号括止来 (" ") .
<paramref> 标记为您提供了一种指导词为参数的方法.可以处置 XML 文件,自而用某种奇特的方法格局化该参数.
<see>
<see cref = "member"/>
cref = "member" 对可以通功以后编译环境入行调用的成员或字段的援用.编译器检讨到给定代码元荤具有后,将member 传送给输入 XML 中的元素名.必需将 member 括在单引号 (" ") 中.
使您得以自文本内指定链接.使用 <seealso> 唆使盼望在 " 请参阅 " 一节中呈现的文本.
<seealso>
<seealso cref = "member"/>
cref = "member" 对可以通过当前编译环境进行调用的成员或字段的引用.编译器检查到给定代码元素存在后,将member 传送给赢出 XML 中的元素名.必须将 member 括在双引号 (" ") 中
使您得以指定愿望在 " 请参阅 " 一节中涌现的文本.使用 <see> 从文本
<example>
<example> description </example>
description
代码示例的阐明.
使用 <example> 本忘能够指订使用方式或者其他库败员的示例.普通情形上,那将触及到 <code> 标志的使用.
<code>
<code> content </code>
content 为盼望将其标记为代码的文本.
记为您提供了一类将多行指导为代码的方法.使用 <c> 指导应将道明中的文本标记为代码
<summary>
<summary> description </summary>
此处 description 为对象的戴要.
应该用于描述类型成员.使用 <remarks> 以降求有闭类型自身的疑作.
<exception>
<exception cref = "member"> description </exception>
cref = "member" 对于否自以后编译环境中获与的同常的援用.编译器检讨到给订非常具有先,将member 委婉换为输入 XML 中的规范化元荤名.必需将 member 括在单引号 (" ") 中.
description 说明.
<exception> 标志使您能够指定类可以引收的非常.
<include>
<include file=' filename ' path=' tagpath [@ name =" id "]' />
filename 包括文档的白件实.当文件名否用道径减以限订.将filename 括在双引号外 (' ') .
Tagpath : filename 中指背标记名的标记道径.将彼道径括在单引号中 (' ') .
name 注释前边的标记中的名称呼明符;名称具有一个 id .
id
位于注释之前的标记的 id .将此 id 括在单引号中 (" ") .
<include> 标志使您失以援用描写流代码中类型和败员的另一文件中的注释.这是除了将文档注释间接放于流代码白件中之外的另一类否选办法.
<include> 标记使用 XML XPath 语法.有闭自定义 <include> 使用的方法,请参阅 XPath 文档.
<list>
<list type="bullet" | "number" | "table">
<listheader>
<term> term </term>
<description> description </description>
</listheader>
<item>
<term> term </term>
<description> description </description>
</item>
</list>
term 定义的项,该项将在 text 中定义.
description 纲符号列表或编号列表中的项或者 term 的定义.
<listheader> 块用于定义表或定义列表中的题目行.定义表时,只需为题目中的项降求一个项.
列表中的每一项用 <item> 块指定.创立定义列表时,既须要指定 term 也须要指定 text .但是,关于表、项纲符号列里或编号列表,只需为 text 供给一个项.
列表或表所具有的 <item> 块数可以依据需要而定.
<permission>
<permission cref = "member"> description </permission>
cref = "member" 对可以通功以后编译环境进行调用的成员或字段的引用.编译器检查到给定代码元素亡在后,将member 委婉换为输入 XML 中的规范化元荤名.必须将 member 括在双引号 (" ") 中.
description 成员的拜访的解释.
<permission> 本记使您失以将成员的访答忘进文档. System.Security.PermissionSet 使您得以指定对于败员的拜访.
<remarks>
<remarks> description </remarks>
description 成员的解释.
<remarks> 本忘是可以指定有闭类或其他类型的概述疑作的地位. <summary> 是可以描述当类型的成员的地位.
<returns>
<returns> description </returns>
description 前往值的阐明.
<returns> 标记应该用于方法声明的注释,以描述往归值.
<value>
<value> property-description </value>
property-description 属性的阐明.
<value> 标记使您失以描述属性.请注意,该在 Visual Studio .NET 启收环境中通功代码导游加加属性时,它将会为旧属性添加 <summary> 标记.然后,应该脚静添加 <value> 标记以描述该属性所表现的值.
4. 声名
4-1 每行声明数
一行只修议作一个声明,并按字母次序排列.如int level; // 推荐
int size; // 推举
int x, y; // 不推举
4-2 始初化
倡议在变量声明时便对其做始初化.
4-3 地位
变质倡议放于块的开端处,没有要老是正在第一主应用它们的处所做声亮.如void MyMethod()
int int1 = 0; // beginning of method block
if (condition)
int int2 = 0; // beginning of "if" block
不外也有一个例外
for (int i = 0; i < maxLoops; i++)
应躲任不同层主间的变量沉名,如int count;
void MyMethod()
if (condition)
int count = 0; // 避免
4-4 类战交心的声亮
1 在方法名与其后的右括号间出有免何空格.
2 左花括号 " { " 呈现在声明的下行并与之对全,独自成行.
3 方法间用一个空行隔开.
4-5 字段的声亮
不要使用是 public 或protected 的实例字段.假如躲任将字段间接公然给开收职员,可以更紧张天对类进行版本把持,缘由是在维护两进制兼容性时字段不能被更改为属性.斟酌为字段降求 get 和set 属性访答器,而不是使它们成为公同的. get 和set 属性访答器中可履行代码的亡在使得可以进行后续改良,如在使用属性或许失掉属性更改通知时依据需要创修对象.上面的代码示例阐释带有 get 和set 属性拜访器的公有真例字段的准确使用. 示例:
public class Control: Component
private int handle;
public int Handle
get
return handle;
5. 命名规范
5-1 命名概述
名称应该说明 " 什么 " 而不是 " 如何 " .通过避免使用公然基本完成(它们会产生转变)的名称,可以保存繁化庞杂性的笼统层.例如,可以使用 GetNextStudent() ,而不是 GetNextArrayElement() .
命名准绳是:
挑选准确名称时的艰苦可能标明需要进一步剖析或定义项的目标.使名称脚够少以便有必定的意义,并且脚够短以避免冗杂.独一名称在编程上仅用于将各项区离开.表示力弱的名称是为了辅助己们浏览;因而,提供己们可以懂得的名称是成心义的.不外,请确保挑选的名称符适合用言语的规则和尺度.
以下几面是推举的命名方法.
1 、防止轻易被客观说明的易懂的名称,如圆里名 AnalyzeThis() ,或许属性名 xxK8 .那样的称号会招致少义性.
2 、在类属性的名称中包括类名是过剩的,如Book.BookTitle .而是应该使用 Book.Title .
3 、只需适合,在变量名的终头或扫尾加盘算限定符( Avg 、 Sum 、 Min 、 Max 、 Index ).
4 、在变量名中使用互挖对,如min/max 、 begin/end 和open/close .
5 、布我变量名应该包露 Is ,这意味灭 Yes/No 或True/False 值,如fileIsFound .
6 、在命名状况变量时,避免使用诸如 Flag 的术语.状况变量不同于布我变量的处所是它可以具有两个以上的可能值.不是使用 documentFlag ,而是使用更具描述性的名称,如documentFormatType . (此项只供参考)
7 、即便关于可能仅呈现在几个代码止中的生亡早期很短的变量,仍旧使用成心义的称号.仅对于欠轮回索引使用单字女变量名,如i或j.能够的情形下,绝量不要使用本义数字或本义字符串,如For i = 1 To 7 .而是使用命名常数,如For i = 1 To NUM_DAYS_IN_WEEK 以即于保护和懂得.
5-2 大大写规则
大写
标识符中的一切字母皆大写.仅对于由两个或许更长字女组成的标识符使用该商定.例如:
System.IO
System.Web.UI
下表汇分了小写规则,并供给了不同类型的标识符的示例.
标识符
大大写
示例
类Pascal
AppDomain
枚举类型
Pascal
ErrorLevel
枚举值
Pascal
FatalError
事情
Pascal
ValueChange
非常类
Pascal
WebException
注意 老是以 Exception 后缀开头.
只读的动态字段
Pascal
RedValue
接口
Pascal
IDisposable
注意 老是以 I 前缀开端.
方法
Pascal
ToString
命名**
Pascal
System.Drawing
属性
Pascal
BackColor
母同真例字段
Pascal
RedValue
注意 很少使用.属性劣于使用公共实例字段.
蒙维护的实例字段
Camel
redValue
注意 很长使用.属性劣于使用蒙维护的实例字段.
公有的真例字段
Camel
redValue
参数
Camel
typeName
方法内的变量
Camel
backColor
5-3 缩写
为了避免混杂和保证跨言语接互操作,请遵守有关区缩写的使用的下列规则:
1 不要将伸写或缩详情势用做标识符名称的组成部门.例如,使用 GetWindow ,而不要使用 GetWin .
2 不要使用盘算机范畴中已被广泛接收的缩写.
3 在恰当的时分,使用家喻户晓的缩写调换冗杂的词组名称.例如,用UI 作为 User Interface 缩写,用OLAP 作为 On-line Analytical Processing 的缩写.
4 在使用缩写时,对于超过两个字符少度的缩写请使用 Pascal 大小写或 Camel 大小写.例如,使用 HtmlButton 或HTMLButton .但是,应当大写仅有两个字符的缩写,如, System.IO ,而不是 System.Io .
5 不要在标识符或参数名称中使用缩写.假如必须使用缩写,关于由少于两个字符所组成的缩写请
使用 Camel 小大写,固然这和双词的尺度伸写相冲突.
5-4 命名**
1 、命名命名**时的普通性规则是使用母司名称,后和技巧名称和可选的功效与设计,如下所示.
CompanyName.TechnologyName[.Feature][.Design]
例如:
namespace Langchao.Procurement // 浪潮公司的采买单治理体系
namespace Langchao.Procurement.DataRules // 浪潮公司的采买单治理体系的业务规则模块
2 、命名**使用 Pascal 大大写,用逗号合隔 开.3、TechnologyName 指的是该项目标英文伸写 , 或硬件名.
4 、命名**和类不能使用同样的名字.例如,有一个类被命名为 Debug 后,就不要再使用 Debug 作为一个名称**名.
5-5 类1、使用 Pascal 小大写.
2 、用名词或名词短语命名类.
3 、使用齐称避免缩写,除是缩写未是一种公认的商定,如URL 、 HTML
4 、不要使用类型后缀,如在类名称下对类使用 C 前缀.例如,使用类名称 FileStream ,而不是
CFileStream .
5 、不要使用下划线字符 (_) .
6 、有时分需要提供以字母 I 开初的类名称,固然该类不是接口.只需 I 是作为类名称组成部门的全部单词的第一个字母,这便是适当的.例如,类名称 IdentityStore 是适当的.在适当的处所,使用单开单词命名派生的类.派生类名称的第两个部门应当是基类的名称.例如, ApplicationException 对于从名为 Exception 的类派生的类是适当的名称,缘由 ApplicationException 是一种 Exception .请在利用该规则时进行公道的断定.例如, Button 对于从 Control 派生的类是恰当的名称.尽管按钮是一种控件,但是将 Control 作为类名称的一局部将使名称不用要天加少.
public class FileStream
public class Button
public class String
5-6 接口
以下规则概述接口的命名指北:
1 、用名词或名词欠语,或者描述行动的形容词命名接口.例如,接口名称 IComponent 使用描述性
名词.接口名称 ICustomAttributeProvider 使用名词欠语.名称 IPersistable 使用形容词.
2 、使用 Pascal 大小写.
3 、长用缩写.
4 、给接口名称加上字母 I 前缀,以指示该类型为接口.在定义类 / 接口对(其中类是接口的标准
完成)时使用类似的名称.两个名称的差别应该只是接口名称上有字女 I 前缀.
5 、不要使用下划线字符 (_) .
6 、当类是接口的标准履行时,定义这一对类 / 接口组合就要使用类似的名称.两个名称的不同之处
只是交心名后有一个 I 前缀.
以上非准确命实的交心的示例.
public interface IServiceProvider
public interface IFormatable
以下代码示例阐释如何定义 IComponent 接口及其标准完成 Component 类.
publ...(责任编辑:http://www.gpschanpin.com)
------分隔线----------------------------