C#项目代码格式规范


本规范是用于个人或公司的项目代码规范,本规范遵守 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等等。

控件

窗体的控件名称按以下规则命名。

数据类型简写命名举例备注
ButtonbtnbtnSave
CheckBoxchkchkStock
CheckedListBoxclbclbChecked
ComboBoxcbcbMenu
DataGridViewdgvdgvView
DateTimePickerdtpdtpStartDate
FoldBrowserDialogfbdfbdBrowser
GroupBoxgbgbMain
ImageListimlimlImage
LabellbllblMessage
LinkLabelllbllklGoogle
ListBoxlblbProducts
ListViewlvlvBrowser
MainMenumnmnFile
OpenFileDialogofdofdFile
PanelpnpnBody
PictureBoxpbpbImage
RadioButtonrbrbSelected
SaveFileDialogsfdsfdSave
StatusBarsbsbFootPrint
TabControltctcSelected
TextBoxtxttxtName
ToolBartbtbManage
TreeViewtvtvType
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值