C#项目代码格式规范

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43145361/article/details/100137768


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

猜你喜欢

转载自blog.csdn.net/weixin_43145361/article/details/100137768