C#项目代码格式规范
文章目录1 一般格式要求单行单语句变量初始化注释规范For循环2 变量命名常量命名一般变量枚举结构体3 函数命名函数名称私有函数命名4 类类名字段名称方法名称属性名称类的结构接口数组名称5 窗体控件命名窗体控件本规范是用于个人或公司的项目代码规范,本规范遵守BSD开源协议,即可以自由免费使用,但是要保留原作者信息。1 一般格式要求单行单语句根据变量、方法作用来进行命名,函数、方法之间加一个...
文章目录
本规范是用于个人或公司的项目代码规范,本规范遵守 BSD开源协议,即可以自由免费使用,但是要保留原作者信息。
1 基本原则
单行单语句
根据变量、方法作用来进行命名,函数、方法之间加一个空行,采用单行单语句。
解释:如果一行有多个语句,除了影响代码可读性,更重要的是当代码发生错误时,由于断点的设置是基于行的,我们无法确认在同一行上的多条语句哪里出了问题。
但是也有个别情况例外,如
int x = 0, y = 0; //X,Y关联性强放一起定义。
int t = a; a = b; b = t; //交换
解释:由于习惯或关联性,写在一起更容易阅读,且不会出错。
变量定义时就赋值
在类中的变量在定义时,就建议初始化。
int maxCount = 100;
DateTime currentDate = DateTime.Now;
如果未初始化的,一律加 “= null”, 如
string studentName = string.Empty;
DataSet ds = null;
解释:这样做的好处在于可以通过初始值,防止空值或0的错误。虽然这样可能会造成同一个变量的多次赋值(如,定义时、构造函数中和使用时),但是由于一般的桌面项目中性能并不是瓶颈,所以这样的操作带来的额外时间都是可以忽略的。所以如果不是一般桌面项目,而是一些数据量非常大的项目,一些百万或者千万量级的数据处理,则不推荐增加。
删除所有无用的内容
无用的内容包括,未使用的私有变量,无意义的公共变量,未使用的函数,多余的注释等。代码管理的基本要求是让代码尽可能简单,所以但凡有无用的内容一定要删除。如果觉得某些内容有用,则可以写在文档中,或者在注释中体现。
注释规范
所有公开的变量、属性、方法、类、枚举等的注释一律采取公开注释法,如
/// <summary>
/// 系统所使用的连接字符串。
/// </summary>
public static string ConnectionString { get; set; }
/// <summary>
/// 根据当前连接字符串生成新的连接DC。
/// </summary>
/// <returns>返回连接类的实例</returns>
public static DataClasses1DataContext GetDC()
{
if (ConnectionString != null)
{
return new DataClasses1DataContext(cs);
}
return new DataClasses1DataContext();
}
/// <summary>
///随机返回一个指定长度的英文字符串,首字母会大写,后面小写。
/// </summary>
/// <param name="length">字符串的长度。</param>
/// <returns>返回随机长度字符串。</returns>
public static string AString(int length)
{
StringBuilder sb = new StringBuilder();
sb.Append(UpperChar());
for (int i = 1; i < length; i++)
{
sb.Append(LowerChar());
}
return sb.ToString();
}
For循环
For循环一定要注意一点:不要使用常量作为循环控制,而要使用变量,如
private void Test()
{
string[] data = { "李强", "张三", "赵刚", "孙明" };
//正确的写法。
for (int i = 0; i < data.Length; i++)
{
Console.WriteLine(data[i]);
}
//错误的写法。
for (int i = 0; i < 4; i++)
{
Console.WriteLine(data[i]);
}
}
2 变量命名
常量命名
常量:全部大写,单词间用下划线隔开。
static int MIN_WIDTH = 4;
static int MAX_WIDTH = 999;
static int GET_THE_CPU = 1;
一般变量
普通变量一般由英文单词或者单词组合而成,用到多个单词组成的名称中,指定名称中的每个单词除了第一个字母大写外,其余字母都小写。但是其中,private类型的首字母小写,public类型的首字母大写;如
private int studentNumber;
public bool DownloadComplete;
//常见的也可包括简写的单词,如studentInformation,可写成studentInfo
private int studentInfo;
枚举
枚举名称:必须以名词或名词短语命名,最好体现枚举的特点,如:
enum Color
{
Red,
Green
}
结构体
同样必须以名词或名词短语命名,最好体现结构的特点,如:
public struct PostalAddress
{
string SurName;
string GivenName
}
3 函数
函数的定义
函数定义的目的是为了代码的利用,即能够被多次调用。因此,如果一个函数只会被调用1次,大部分情况下那就没有存在的意义,可以合并在代码中;少部分情况,为了代码清晰或者格式统一分离出来也可以接受。
函数名称
函数命名:通常也采用函数功能单词组合而成,单词首字母大写。另外,函数体之间加一个空行。如:
public void Created();
public void IDChanging(int value);
public void StudentIDChanged();
public void ScoreInsert();
私有函数命名
私有函数,采取首写字母小写,如:
private void checkValidate();
private void orderDeal();
private void dataConduct();
4 类
类名
类名使用单词组合的方式,每个单词首字母大写,同时除了词缀,单词不推荐使用缩写。每个类文件 的文件名应该同类名。同时一个类文件推荐只保存一个类。
如:
public class ControlDrager
{
/*代码段/
}
class Raster; class ImageSprite 等等。
字段名称
字段:字段原则上不公开。通常公开使用属性进行封装,则也是作用单词或者单词组合。首字母大写。
如:
class MyClass
{
public static int MyInt; //静态的公开字段。
int age = 0;//这是字段。
/// <summary>
/// 表示年龄。
/// </summary>
public int Age//这个是属性。
{
get { return age; }
set { age = value; }
}
}
方法名称
方法之间也要加空行,单行单语句。
如:
class MyClass
{
public string GetString()
{
return "Here is a string.";
}
public void Show()
{
Console.WriteLine("Show info");
}
}
属性名称
属性的名称采取单词组合的方式,首字母大写,如:
public bool AllowDrag
{
get
{
return this.allowDrag;
}
set
{
this.allowDrag = value;
}
}
类的结构
一个类的结构如下,主要分为四段,按自上向下,分别为变量属性段,自定义方法段,构造函数段和事件处理段。
public partial class Form1 : Form
{
#region 变量和属性
//代码。。。
#endregion
#region 自定义方法
//代码。。。
#endregion
#region 构造函数
//代码。。。
#endregion
#region 窗体内的事件代码
//代码。。。
#endregion
}
接口
接口有两种命名方式,以字母I开头或以able结尾。如,一个可以复制的接口,可以定义成如下任意一种形式。
interface ICopy
{
void Copy(object obj);
}
interface Copyable
{
void Copy(object obj);
}
interface ITester; interface ILogger;等
数组名称
数组的命名:类型简称跟单词组合,类型小写、单词第一个字母大写
如:
int [] intSum={1,2,3};
string[] names = new string[] {
“Colma”, “Detroit”, “Lemon Grove”, “Ville De’anjou” };
5 窗体控件命名
窗体
窗体命名采用窗体作用单词加Form而成,以Form为后缀名。并且项目中的所有窗体放在解决方案的Forms文件夹下。如:UserForm, UserListForm, AddItemForm, LoginForm等等。
控件
窗体的控件名称按以下规则命名。
数据类型 | 简写 | 命名举例 | 备注 |
---|---|---|---|
Button | btn | btnSave | |
CheckBox | chk | chkStock | |
CheckedListBox | clb | clbChecked | |
ComboBox | cb | cbMenu | |
DataGridView | dgv | dgvView | |
DateTimePicker | dtp | dtpStartDate | |
FoldBrowserDialog | fbd | fbdBrowser | |
GroupBox | gb | gbMain | |
ImageList | iml | imlImage | |
Label | lbl | lblMessage | |
LinkLabel | llbl | lklGoogle | |
ListBox | lb | lbProducts | |
ListView | lv | lvBrowser | |
MainMenu | mn | mnFile | |
OpenFileDialog | ofd | ofdFile | |
Panel | pn | pnBody | |
PictureBox | pb | pbImage | |
RadioButton | rb | rbSelected | |
SaveFileDialog | sfd | sfdSave | |
StatusBar | sb | sbFootPrint | |
TabControl | tc | tcSelected | |
TextBox | txt | txtName | |
ToolBar | tb | tbManage | |
TreeView | tv | tvType |
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)