大家好,欢迎来到IT知识分享网。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化资料的朋友,可以戳这里获取
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- [2.2 驼峰命名法(camelCasing)](#22__camelCasing_134) - [2.3 其他命名约定](#23__161) + [三、布局规范](#_222) + [四、注释规范](#_288) + [五、代码规范/语言准则](#_357) + - [5.1 字符串数据类型](#51__358) - [5.2 隐式类型本地变量](#52__375) - [5.3 无符号数据类型](#53__419) - [5.4 数组](#54__423) - [5.5 委托](#55__435) - [5.6 异常处理](#56__478) - [5.7 && 和 || 运算符](#57_____529) - [5.8 new 运算符 使用对象初始化值设定简化对象创建](#58_new___552) - [5.9 事件处理](#59__567) - [5.10 静态成员](#510__592) - [5.11 OOP面向对象规约](#511_OOP_599) - [5.12 控制语句](#512__630) + [总结](#_639) + [👑 评论区抽奖送书](#__648)
前言
- 在我们程序员日常开发的过程中,会编写代码是一个最基本且常规的操作。
- 而作为一名合格的
软件工程师
,出产物就应该具备工程的健壮性
和美观性
,因此编码规范是作为软件工程师的职业素养。 - 但是就
编码规范
而言,可能大多数程序员都是按照自己的长久习惯进行代码编写,并没有遵循一个约定好的编码规范。 - 所以本篇就来对
C#中的编码规范
做一个详细的总结整理,并对一些超级常用的做一个重点解析! - 对于编程而言,大多数语言的编码规范基本上是遵循一些相同的规范标准的,除去少些个语言有一些特殊用法之外。
- 所以本篇文章不止对使用C#工程师们有帮助哦,不使用C#的小伙伴也可以看看跟自己平时用的语言有什么编码差异吧!
【编码规范篇】| C# 代码规范总结,包括命名规范,代码规范 注释规范等
一、编码规范
1.1 什么是编码规范 / Coding standards ?
- Coding standards are collections of rules and guidelines that determine the programming style, procedures, and methods for a programming language.
- Think of coding standards as a set of rules, techniques, and best practices to create cleaner, more readable, more efficient code with minimal errors. They offer a uniform format by which software engineers can use to build sophisticated and highly functional code.
- 编码规范是针对某种编程语言的,决定编程风格、过程和方法的一系列规则和指导方针的集合。
- 把编码规范看作是一套规则、技术和最佳实践,以创建更清爽、更可读、更有效的代码,并将错误降到最低。它们提供了一个统一的格式,软件工程师可以用它来构建复杂和功能强大的代码。
1.2 编码规范必要性
- 作为一名合格的
软件工程师
,出产物就应该具备工程的健壮性和美观性,因此编码规范是作为软件工程师的职业素养。 - 如果在学习编程的初期,已经认真学习过编码规范的话,那自然是没有什么任何问题的。
- 但是对于很多
初学者
来说,可能对这方面并没有重视起来,还是依据自己的想法对变量
和方法
等等随意命名。 - 代码不规范对于实现项目中的功能来说并没有什么太大的问题,这就好比一个人懂不懂礼貌一样,一样可以活的随心所欲。
- 而对我们亲手编写的代码有一个规范化的管理则是我们对编程的一个最基本的尊重。
- 所以非常建议初学者们一定要对编码规范多用点心,只要初期对这方面有一个基本的认知就可以养成一个好习惯,摆脱杂乱无章的代码啦!
- 如果没有预先规定所有团队成员应该遵守的规范,会导致降低工程师的积极性、增加开发时间、产生复杂的代码结构等等情况。
如果没有编码规范,团队中的每个人都按自己的编码风格来。在不久的将来,维护和调试代码将变得不容易。
1.3 编码规范优点
- 可有效的提高代码质量,并易于维护
- 减少代码的复杂性
- 易于团队合作,降低开发成本
- 为不同工程师创建的代码提供统一规范
- 创建出可复用的代码
- 使得检测错误更加容易
- 使代码更简单,更可读,更容易维护
- 促进更合理的编程实践,提升程序员的效率,更快完成目标
- 编码指南有助于在早期阶段发现错误,所以它有助于减少软件项目的额外成本。
- 减少了开发软件的隐藏成本。
二、命名规范
C# 的命名有两种约定:帕斯卡拼写法(Pascal) 和 驼峰命名法(camelCasing)
帕斯卡拼写法(Pascal):
成员名的每个单词的首位字母大写,如:Student,StudentName,StudentParentName。驼峰命名法(camelCasing)
:成员名除了第一个单词外其余首字母都大写,Student,studentName,studentParentName.
2.1 帕斯卡拼写法(Pascal)
1.class
、record
及record的参数
、struct
的名称,如:
public class DataService { } public record PhysicalAddress( string Street, string City, string StateOrProvince, string ZipCode); public struct ValueCoordinate { }
2.命名 interface
时,使用 pascal
大小写并在名称前面加上前缀 I
。 这可以清楚地向使用者表明这是 interface。
public interface IWorkerQueue { }
3.public
的成员也应为Pascal
命名,这些成员包括字段、属性、事件。
方法名也应遵循Pascal命名,无论其是否是public。如:
public class ExampleEvents { //公共字段 public bool IsValid; //公共属性 public IWorkQueue WorkQueue{get;set;} //公共事件 public event Action EventProcessing; //公共方法 public void Run() { } }
4.编写位置记录时,对参数使用 pascal 大小写,因为它们是记录的公共属性。
public record PhysicalAddress( string Street, string City, string StateOrProvince, string ZipCode);
2.2 驼峰命名法(camelCasing)
1.命名private
或internal
字段时使用驼峰命名,且字段名应以_
开头。如:
public class DataService { private IWorkerQueue _workerQueue; }
2.如果是static
的private
或internal
的字段,则字段名应该以s_
开头,对于线程静态则应该使用t_
开头。如:
public class DataService { private static IWorkerQueue s_workerQueue; [ThreadStatic] private static TimeSpan t_timeSpan; }
3.编写方法的参数名时,也应该以驼峰命名,如:
public T SomeMethod<T>(int someNumber, bool isValid) { }
2.3 其他命名约定
- 在不包括
using
指令的示例中,使用命名空间限定。
如果你知道命名空间默认导入项目中,则不必完全限定来自该命名空间的名称。 如果对于单行来说过长,则可以在点 (.) 后中断限定名称,如下面的示例所示。
var currentPerformanceCounterCategory = new System.Diagnostics. PerformanceCounterCategory();
不必更改使用 Visual Studio 设计器工具创建的对象的名称以使它们适合其他准则。
- 代码中当且仅当
私有成员
可以使用下划线_
开始 - 代码中的命名严禁使用拼音与英文混合的方式,更不能允许直接使用中文的方式。
常量
命名全部大写,单词间用下划线隔开,力求语意表达完整清楚,不要嫌名字长。
正例:MAX_XIAOY_COUNT 反例:MAX_xiaoy_COUNT
抽象类
命名使用 Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类名称开始,以Test结尾。
/// <summary> /// 抽象类命名 /// </summary> public void AbstractLearnProgramming() { } /// <summary> /// 异常类命名 /// </summary> public void LearnProgrammingException() { } /// <summary> /// 测试类命名 /// </summary> public void LearnProgrammingTest() { }
- 如果使用了
设计模式
,建议在类名中体现出具体模式。
public class SysuserController public class OrderFactory public class TcpProxy
枚举
类名建议带上E前缀或Enum后缀,枚举成员名称需要全大写,单词间用下滑线隔开。
说明:枚举其实就是特殊的常量类i,切构造方法被默认强制是私有。
正例:枚举名字:EState / DealStatusEnum
成员名:SUCCESS / UNKOWN_REASON
三、布局规范
1.使用默认的代码编辑器设置(智能缩进、4 字符缩进、制表符保存为空格)。
2.每行只写一条语句。
//正确 int age = 20; int score = 90; //错误示范 int age = 20; int score = 90;
3.每行只写一个声明。
4.C# 的大括号采用的是Allman style,大括号单独一行。以下是正确的:
/// <summary> /// 正确示范 /// </summary> public void StartGame() { } /// <summary> /// 错误示范 /// </summary> public void StartGame(){ }
5.如果连续行未自动缩进,请将它们缩进一个制表符位(四个空格)。
6.在方法定义与属性定义之间添加至少一个空白行。
public string Name { get; set; } public void StartGame() { }
7.使用括号突出表达式中的子句,如下面的代码所示。
if ((val1 > val2) && (val1 > val3)) { // Take appropriate action. }
8.if / for / while / switch / do
等保留字与左右括号之间都必须加空格。
9.任何运算符左右必须加一个空格。
说明:运算符包括赋值运算符 = 、逻辑运算符&&、加减乘除符号、三目运算符等。
XIaoYMethod("a", "b", "c");
四、注释规范
1.将注释放在单独的行上,而非代码行的末尾。
正确示范
// 定义age并初始化. Define age and init. int age = 20;
错误示范
int age = 20;//定义age并初始化
2.类方法的注释必须使用C# Summary 规范,以大写字母开始注释文本。
/// <summary> /// Start the text with a capital letter. /// </summary> public void StartGame() { }
说明:在vs中,Summary方式会提示相关的注释,生成Summary可以正确输出相应的注释。工程调用方法是,不进入方法,即可悬浮提示方法、参数、返回值的意义,提高阅读效率。
3.以句点结束注释文本。
4.在注释分隔符 (//) 与注释文本之间插入一个空格,如下面的示例所示。
// The following declaration creates a query. It does not run // the query.
5.请勿在注释周围创建格式化的星号块。
6.请确保所有公共成员Public都有必要的注释,从而提供有关其行为的适当说明。
7.所有的抽象方法(包括接口中的方法)必须使用Summary
注释,除了返回值、参数、异常说明外,还必须指出该方法做了什么事,实现了什么功能。
说明:对于子类的实现要求,或者调用注意事项,请一并说明。
8.方法内部单行注释,在被注释语句上方另起一行,使用 //
注释。方法内部多行注释使用 /* */
注释,注意与代码对齐。
10.代码修改的同事,注释也要进行相应的修改,预期是参数、返回值、异常、核心逻辑等的修改。
- 1)后续会恢复此段代码逻辑。
- 2)永久不用。前者如果没有备注信息,难以知晓注释动机。后者建议直接删掉(代码仓库保存了历史代码)。
12.对于注释的要求:
- 第一:能够准确反应设计思想和代码逻辑;
- 第二:能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。
14.特殊注释标记,请注明标记人与标记时间。
注意及时处理这些标记,通过标记扫描,经常清理此类标记。线上故障有时候就是来源于这些标记处的代码。
1)待办事宜(TODO):(标记人、标记时间,[预计处理时间])表示需要实现,但目前还未实现的功能。
五、代码规范/语言准则
5.1 字符串数据类型
- 使用
字符串内插
来连接短字符串,如下面的代码所示。
string displayName = $"{nameList[n].LastName}, {nameList[n].FirstName}";
- 若要在循环中追加字符串,尤其是在使用大量文本时,请使用
StringBuilder
对象。
var phrase = "xiaoYxiaoYxiaoYxiaoYxiaoYxiaoY"; var manyPhrases = new StringBuilder(); for (var i = 0; i < 10000; i++) { manyPhrases.Append(phrase); } //Console.WriteLine("tra" + manyPhrases);
5.2 隐式类型本地变量
- 当变量类型明显来自赋值的右侧时,或者当精度类型不重要时,请对本地变量进行
隐式类型化
。
var var1 = "This is clearly a string."; var var2 = 27;
- 当类型并非明显来自赋值的右侧时,请勿使用
var
。 请勿假设类型明显来自方法名称。 如果变量类型为 new 运算符或显式强制转换,则将其视为明显来自方法名称。
int var3 = Convert.ToInt32(Console.ReadLine()); int var4 = ExampleClass.ResultSoFar();
- 请勿依靠变量名称来指定变量的类型。 它可能不正确。 在以下示例中,变量名称
inputInt
会产生误导性。 它是字符串。
var inputInt = Console.ReadLine(); Console.WriteLine(inputInt);
- 使用隐式类型化来确定
for
循环中循环变量的类型。
下面的示例在 for 语句中使用隐式类型化。
var phrase = "xiaoYxiaoYxiaoYxiaoYxiaoYxiaoY"; var manyPhrases = new StringBuilder(); for (var i = 0; i < 10000; i++) { manyPhrases.Append(phrase); } //Console.WriteLine("tra" + manyPhrases);
- 不要使用隐式类型化来确定
foreach
循环中循环变量的类型。 在大多数情况下,集合中的元素类型并不明显。 不应仅依靠集合的名称来推断其元素的类型。
下面的示例在 foreach
语句中使用显式类型化。
foreach (char ch in laugh) { if (ch == 'h') Console.Write("H"); else Console.Write(ch); } Console.WriteLine();
5.3 无符号数据类型
通常,使用 int
而非无符号类型。 int
的使用在整个 C# 中都很常见,并且当你使用 int 时,更易于与其他库交互。
5.4 数组
当在声明行上初始化数组时,请使用简洁的语法。 在以下示例中,请注意不能使用 var
替代 string[]
。
string[] xiaoY = { "x", "i", "a", "o", "Y" };
如果使用显式实例化,则可以使用 var
。
var xiaoY = new string[] { "x", "i", "a", "o", "Y" };    既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化! 由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新 [需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/) `` 5.3 无符号数据类型 通常,使用 `int` 而非无符号类型。 `int` 的使用在整个 C# 中都很常见,并且当你使用 int 时,更易于与其他库交互。 5.4 数组 当在声明行上初始化数组时,请使用简洁的语法。 在以下示例中,请注意不能使用 `var` 替代 `string[]` 。
string[] xiaoY = { “x”, “i”, “a”, “o”, “Y” };
如果使用显式实例化,则可以使用 `var`。
var xiaoY = new string[] { “x”, “i”, “a”, “o”, “Y” };
[外链图片转存中…(img-HqJk4n3C-10)]
[外链图片转存中…(img-gkd8SO8W-10)]
[外链图片转存中…(img-P0xyCFTu-10)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
需要这份系统化资料的朋友,可以戳这里获取
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/142984.html