你应该遵守的C#编码规范!

dotNET全栈开发

共 4929字,需浏览 10分钟

 ·

2021-05-11 16:34

对于编程中非代码文件(例如xml 等),我们目前的最佳指南是代码风格的一致性。编辑代码文件时,需要保持新增/更改的代码与原文件中的代码风格一致性。对于新建的代码文件,它也应符合本编码规范。好的编码规范,有利于提升代码的可读性。.NET Core 框架项目使用的是 Visual Studio 默认编码规范。

通常,我们编码时,应遵循 Visual Studio 默认编码规范中的以下规则:

1、接口名、类名、方法名、参数名和变量名

所有的接口名、类名和方法名都应该使用 PascalCasing 风格来定义,对于接口参数、构造函数参数和方法参数,其参数名则使用 camelCase 风格。对于方法体内的局部变量,则使用 camelCase 风格。

2、花括号

使用 Allman 样式的花括号,每个花括号在新的一行开始,而且花括号不进行缩进,花括号里面的代码缩进。

while (x == y){   something();   somethingelse();}

对于单行语句块,可以不带花括号,但需要把它放在同一行

if (xx == null) xx = new Foo();

一个例外是,允许 using 语句嵌套在另一个 using 语句中,从同一缩进级别的下一行开始,即使嵌套的 using 包含受控块也是如此。

3、空格

使用 4 个空格作为一个缩进,而不是使用 tab。

4、字段

所有的 internal 和 private 字段使用 _camelCase 风格,即在字段添加 _ 前缀,并尽可能使用 readonly 。对于静态字段添加 s_ 前缀,对于线程静态字段添加 t_ 前缀。如果使用了静态的字段而且可以设置 readonly ,需要把 readonly 放在 static 后面(即 static readonly 而不是 readonly static )。公开(public)字段应谨慎使用,如果需要公开字段,则应使用 PascalCasing 风格,并且不带前缀。

5、限定

除非绝对必要,应避免使用 this. 。在扩展方法中,需要使用 this 。

6、访问修饰

即使访问可见性是默认的,我们也要始终指定,我们也总是指定可见性(例如, private string _foo 而不是 string _foo )。访问可见性应该是第一个修饰符(例如, public abstract 而不是 abstract public )

7、命名空间

命名空间导入应在命名空间声明之外的文件顶部指定,并且应按字母顺序排序,但 System.* 命名空间除外,这些命名空间应放置在所有其他名称空间的顶部。

8、空行

随时避免出现多个空白行。例如,类型的成员之间不要有两个空白行。

9、多余空格

避免多余的空格。例如,避免 if(someVar == 0)... ,其中点标记为多余空格。如果使用 Visual Studio 辅助检测,通过启用 Visual Studio中“查看空格(Ctrl + R,Ctrl + W)”或“编辑->高级->查看空格”。

10、隐式类型

仅在明显可以知道对象类型时,可以使用 var ,如 var stream = new FileStream(...) 。在无法明显知道对象类型时,不可以使用 var ,如 var stream = OpenStandardInput() 。

11、关键字

使用语言的关键字代替 BCL 类型,如使用 int, string, float 代替 Int32,String,Single 。

12、常量命名

我们使用 PascalCasing 风格来命名所有常量局部变量和字段。唯一的例外是互操作代码,其中常量值应与您通过互操作调用的代码的名称和值完全匹配。

13、变量名字符串

如果使用变量名的常量,必须使用 nameof 关键字。

14、其它字符

在源代码中包含非 ASCII 字符时,需要使用 Unicode 转义序列(\uXXXX)代替文字字符。文字非 ASCII 字符有时会被工具或编辑器弄乱。

15、条件约定

如果使用条件语句,则遵循以下约定:

if(source == null) throw new ArgumentNullException("source")if/else if/.../elseif/else if/.../else

16、代码格式工具

我们也可以使用 .NET Codeformatter 工具 来确保代码库随时间推移保持一致的样式,该工具会自动修复代码库以符合上述准则。

17、示例文件

ObservableLinkedList`1.cs:

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){          ...       }               ...   }}

ObservableLinkedList`1.ObservableLinkedListNode.cs:

using System;namespace System.Collections.Generics{   partial class ObservableLinkedList<T>   {       public class ObservableLinkedListNode       {           private readonly ObservableLinkedList<T> _parent;           private readonly T _value;           internal ObservableLinkedListNode(ObservableLinkedList<T> parent, T value){               Debug.Assert(parent != null);               _parent = parent;               _value = value;           }           public T Value           {               get { return _value; }           }       }       ...   }}

全文完,本文部分摘译自 C# Coding Style  (https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/coding-style.md)

声明:发布此文是出于传递更多知识以供交流学习之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与我们联系,我们将及时更正、删除,谢谢。

作者:彭智勇

来源

https://pzy.io/archives/2019/11/csharp-coding-guidelines.html?utm_source=tuicool&utm_medium=referral







回复 【关闭】广
回复 【实战】获取20套实战源码
回复 【被删】
回复 【访客】访
回复 【小程序】学获取15套【入门+实战+赚钱】小程序源码
回复 【python】学微获取全套0基础Python知识手册
回复 【2019】获取2019 .NET 开发者峰会资料PPT
回复 【加群】加入dotnet微信交流群

又来一个神奇的网站!


人人影视字幕组凉了,这款美剧APP不能错过!


浏览 43
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报