c#中 常用的命名规范
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#中 常用的命名规范相关的知识,希望对你有一定的参考价值。
除了帕斯卡还有别的么?
命名规则: 布尔型 Is开头 全局变量 G开头 私有变量 F开头 单元名以 u开头 窗体名以 Frm开头 窗体对应的单元名用u+窗体名(要frm) 枚举类型的内容的名字必须包含枚举类型名称的简写 大小写混排,标志变量命名不用flag 常量以C开头,所有有意义数字用Const定义,写在uGvar中 其它非常量的单词间用大小写分割(不用下划线分割) 单词缩写保持一致,文件名、目标名有意义,不要用拼音 Dest目标 Src源,Psw密码,Inf信息,buf缓冲区,操作员Opt 局部变量的名称要有意义.不要用x,y,z,tmp等等(除用于For循环变量中可使用i,j,k,l,m,n). 方法中的内联方法用_开头 方法的命名.一般将其命名为动宾短语. 如GetRecordData();GetPath();CreateFile(); 格式规则: 在循环、逻辑分支部分写注释 case 分支 不多于两行 两格一缩进, 对齐只使用空格键,不使用TAB键 对于use系统单元的,写在interface的use部分。Use自己的单元的,写在implementation 函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格, case语句下的情况处理语句也要遵从语句缩进要求。 源代码右边界为120,大于就分行写. 连接符统一加在行末,sql语句的字符串,开头空一格. 大括号""要新起一行 其它: 通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的。 在程序块的结束行右方加注释标记,以表明某程序块的结束 在sql语句中不要用''''+'dl'+'''',用^dl^代替 在程序编译以后不要存在任何的提示和警告,除非是特殊情况必须如此。 参考技术A 1.方法、类型用 pascal大写规则来命名. public class TextBox public void DataBind() 2.局部变量、方法的参数 用camel首单词字母小写规则来命名. string userName; public AddUser(string userId, byte[] password); 3.成员变量前加前缀 m_ public class Database public string m_connectionString; 4.接口的名称加前缀 I. interface ICompare int compare(); 5.自定义的属性以Attribute结尾 public class AuthorAttribute : Attribute 6.自定义的异常以Exception结尾 public class AppException : Exception 7.方法的命名.一般将其命名为动宾短语. ShowDialog() CreateFile() GetPath() 8.代码的缩进.要用Tab,而不要用space. 9.局部变量的名称要有意义.不要用x,y,z等等. string userName 10.所有的成员变量声明在类的顶端,用一个换行把它和方法分开. 11.用有意义的名字命名namespace,如:产品名、公司名. 12.建议局部变量在最接近使用它时再声明. 13.使用某个控件的值时,尽量命名局部变量. 14.把引用的系统的namespace和自定义或第三方的分开. 15.文件名要能反应类的内容,最好是和类同名,一个文件中一个类. 16.目录结构中要反应出namespace的层次. 17.大括号""要新起一行. public class AuthorAttribute : AttributeC# 编码规范
文章目录
前言
从业多年,不断发现有很多团队的代码写的很随意,各种风格、命名方式都有,有用c++风格的,有用java风格的。所以本人在这里介绍下微软官方的C#编码规范,规范本身内容其实不多,但是如果能认证看一遍的话,相信对你以后的开发会有很大帮助。
注:本文不是一定适用所有人和所有团队,供大家参考。
如有需要,请大家制定出自己的代码规范之前,参考以下两个准则:
- KISS(Keep It Simple and Stupid)
- 默认的就是最好的。
正确的规范
1. 命名规范 Pascal or camelCasing ?
C#的命名有两种约定:Pascal和驼峰。
- Pascal: 成员名的每个单词的首位字母大写,如:
Student
,StudentName
,StudentParentName
。 - 驼峰:成员名除了第一个单词外其余首字母都大写,
Student
,studentName
,studentParentName
.
1.1 Pascal命名的使用场合
class
、record
及record
的参数、struct
的名称,如:
public class StudentInfo
//record及record的参数
public record StudentAddress(string NameInfo,int Age);
public struct StudentDetail
- 接口名(第一个字母应为大写的
I
,可以清楚的表明是interface
),如:
public interface IStudentName
public
的成员也应为Pascal命名,这些成员包括字段、属性、事件。方法名也应遵循Pascal命名,无论其是否是public
。如:
public class StudentInfo
//公共字段
public bool IsValid;
//公共属性
public IWorkQueue WorkQueueget;set;
//公共事件
public event Action EventProcessing;
//公共方法
public void Run()
1.2 驼峰命名的使用场合
- 命名
private
或internal
字段时使用驼峰命名,且字段名应以_
开头。如:
public class DataService
private IWorkerQueue _workerQueue;
- 如果是
static
的private
或internal
的字段,则字段名应该以s_
开头,对于线程静态则应该使用t_
开头。如:
public class DataService
private static IWorkerQueue s_workerQueue;
[ThreadStatic]
private static TimeSpan t_timeSpan;
- 编写方法的参数名时,也应该以驼峰命名,如:
public T SomeMethod<T>(int someNumber, bool isValid)
2. 布局规范
- 使用vs自带的代码编辑器设置,不要做过多个性化改动
- 每行只写一条语句:
//正确
int a=0;
int b=0;
//错误
int a=0;int b=0;
- 未缩进的要缩进。
- 方法和属性之间至少要有一个空白行
public int Ageget;set;
//正确,此注释行的上方留了一行空白,不能贴紧
public void Run()
- C#的大括号采用的是Allman style,大括号单独一行。以下是正确的:
public void Run()
以下是错误的:
public void Run()
3. 注释规范
- 注释应单独一行,不能放到代码末尾。
以下是错误做法:
int i=0;//定义i并初始化
以下是正确的做法:
// 定义i并初始化. Define i and init.
int i=0;
- 如果注释为英文的话,则第一个单词的首字母应大写,即应符合英文的书写规范。
- 注释的双斜线(//)与具体注释文本之间应隔开一个空格,且注释应该以句号结尾。以下是错误的,因为//与“定”字之间没有空格且最后没有句号
//定义i并初始化
int i=0;
- 确保所有的
public
的成员都要有注释。
4. 代码规范
4.1 委托
尽量使用自带的Func<>
和Action<>
,避免自定义委托。
4.2 using
使用using
来简化代码,简化资源的Dispose
:
Font font1 = new Font("Arial", 10.0f);
try
byte charset = font1.GdiCharSet;
finally
if (font1 != null)
((IDisposable)font1).Dispose();
以上代码可以简化为:
using (Font font2 = new Font("Arial", 10.0f))
byte charset2 = font2.GdiCharSet;
在C# 8中可以进一步简化为:
using Font font3 = new Font("Arial", 10.0f);
byte charset3 = font3.GdiCharSet;
4.3 使用对象初始化值设定简化对象创建
以下是正确的:
var instance3 = new ExampleClass Name = "Desktop", ID = 37414,
Location = "Redmond", Age = 2.3 ;
以下是不建议的:
var instance4 = new ExampleClass();
instance4.Name = "Desktop";
instance4.ID = 37414;
instance4.Location = "Redmond";
instance4.Age = 2.3;
4.4 事件处理
如果你在定义一个稍后不需要手动删除的事件处理程序,则应该使用lambda表达式:
public Form2()
this.Click += (s, e) =>
MessageBox.Show(((MouseEventArgs)e).Location.ToString());
;
错误的做法
1. 变量名里不要包含变量类型,因为“词不一定达意”且会产生误导
以下是错误的,从名字上看inputInt
应该是int
类型,但其实是string
类型。
var inputInt = Console.ReadLine();
Console.WriteLine(inputInt);
2. 可以在for中使用var,但不要在foreach中使用var
以下都是正确的:
for (var i = 0; i < 10000; i++)
manyPhrases.Append(phrase);
foreach (char ch in laugh)
if (ch == 'h')
Console.Write("H");
else
Console.Write(ch);
因为laugh
集合中的元素类型是什么并不明显,使用var
的话可读性不强,不如直接明确char
。
标准范文
以下是符合C# 编码规范的标准范文,你可以进行参考:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Diagnostics;
using Microsoft.Win32;
namespace System.Collections.Generic
public partial class ObservableLinkedList<T> : INotifyCollectionChanged, INotifyPropertyChanged
private ObservableLinkedListNode<T> _head;
private int _count;
public ObservableLinkedList(IEnumerable<T> items)
if (items == null)
throw new ArgumentNullException(nameof(items));
foreach (T item in items)
AddLast(item);
public event NotifyCollectionChangedEventHandler CollectionChanged;
public int Count
get return _count;
public ObservableLinkedListNode AddLast(T value)
var newNode = new LinkedListNode<T>(this, value);
InsertNodeBefore(_head, node);
protected virtual void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
NotifyCollectionChangedEventHandler handler = CollectionChanged;
if (handler != null)
handler(this, e);
private void InsertNodeBefore(LinkedListNode<T> node, LinkedListNode<T> newNode)
...
...
提示
- vs代码格式化快捷键:Ctrl+K+D
- C#代码格式化整理插件:CodeMaid (vs插件市场直接搜索安装)
引用:
以上是关于c#中 常用的命名规范的主要内容,如果未能解决你的问题,请参考以下文章