你應(yīng)該遵守的C#編碼規(guī)范!
對(duì)于編程中非代碼文件(例如xml 等),我們目前的最佳指南是代碼風(fēng)格的一致性。編輯代碼文件時(shí),需要保持新增/更改的代碼與原文件中的代碼風(fēng)格一致性。對(duì)于新建的代碼文件,它也應(yīng)符合本編碼規(guī)范。好的編碼規(guī)范,有利于提升代碼的可讀性。.NET Core 框架項(xiàng)目使用的是 Visual Studio 默認(rèn)編碼規(guī)范。
通常,我們編碼時(shí),應(yīng)遵循 Visual Studio 默認(rèn)編碼規(guī)范中的以下規(guī)則:
1、接口名、類名、方法名、參數(shù)名和變量名
所有的接口名、類名和方法名都應(yīng)該使用 PascalCasing 風(fēng)格來定義,對(duì)于接口參數(shù)、構(gòu)造函數(shù)參數(shù)和方法參數(shù),其參數(shù)名則使用 camelCase 風(fēng)格。對(duì)于方法體內(nèi)的局部變量,則使用 camelCase 風(fēng)格。
2、花括號(hào)
使用 Allman 樣式的花括號(hào),每個(gè)花括號(hào)在新的一行開始,而且花括號(hào)不進(jìn)行縮進(jìn),花括號(hào)里面的代碼縮進(jìn)。
while (x == y){something();somethingelse();}
對(duì)于單行語(yǔ)句塊,可以不帶花括號(hào),但需要把它放在同一行
if (xx == null) xx = new Foo();一個(gè)例外是,允許 using 語(yǔ)句嵌套在另一個(gè) using 語(yǔ)句中,從同一縮進(jìn)級(jí)別的下一行開始,即使嵌套的 using 包含受控塊也是如此。
3、空格
使用 4 個(gè)空格作為一個(gè)縮進(jìn),而不是使用 tab。
4、字段
所有的 internal 和 private 字段使用 _camelCase 風(fēng)格,即在字段添加 _ 前綴,并盡可能使用 readonly 。對(duì)于靜態(tài)字段添加 s_ 前綴,對(duì)于線程靜態(tài)字段添加 t_ 前綴。如果使用了靜態(tài)的字段而且可以設(shè)置 readonly ,需要把 readonly 放在 static 后面(即 static readonly 而不是 readonly static )。公開(public)字段應(yīng)謹(jǐn)慎使用,如果需要公開字段,則應(yīng)使用 PascalCasing 風(fēng)格,并且不帶前綴。
5、限定
除非絕對(duì)必要,應(yīng)避免使用 this. 。在擴(kuò)展方法中,需要使用 this 。
6、訪問修飾
即使訪問可見性是默認(rèn)的,我們也要始終指定,我們也總是指定可見性(例如, private string _foo 而不是 string _foo )。訪問可見性應(yīng)該是第一個(gè)修飾符(例如, public abstract 而不是 abstract public )
7、命名空間
命名空間導(dǎo)入應(yīng)在命名空間聲明之外的文件頂部指定,并且應(yīng)按字母順序排序,但 System.* 命名空間除外,這些命名空間應(yīng)放置在所有其他名稱空間的頂部。
8、空行
隨時(shí)避免出現(xiàn)多個(gè)空白行。例如,類型的成員之間不要有兩個(gè)空白行。
9、多余空格
避免多余的空格。例如,避免 if(someVar == 0)... ,其中點(diǎn)標(biāo)記為多余空格。如果使用 Visual Studio 輔助檢測(cè),通過啟用 Visual Studio中“查看空格(Ctrl + R,Ctrl + W)”或“編輯->高級(jí)->查看空格”。
10、隱式類型
僅在明顯可以知道對(duì)象類型時(shí),可以使用 var ,如 var stream = new FileStream(...) 。在無(wú)法明顯知道對(duì)象類型時(shí),不可以使用 var ,如 var stream = OpenStandardInput() 。
11、關(guān)鍵字
使用語(yǔ)言的關(guān)鍵字代替 BCL 類型,如使用 int, string, float 代替 Int32,String,Single 。
12、常量命名
我們使用 PascalCasing 風(fēng)格來命名所有常量局部變量和字段。唯一的例外是互操作代碼,其中常量值應(yīng)與您通過互操作調(diào)用的代碼的名稱和值完全匹配。
13、變量名字符串
如果使用變量名的常量,必須使用 nameof 關(guān)鍵字。
14、其它字符
在源代碼中包含非 ASCII 字符時(shí),需要使用 Unicode 轉(zhuǎn)義序列(\uXXXX)代替文字字符。文字非 ASCII 字符有時(shí)會(huì)被工具或編輯器弄亂。
15、條件約定
如果使用條件語(yǔ)句,則遵循以下約定:
if(source == null) throw new ArgumentNullException("source")if/else if/.../elseif/else if/.../else
16、代碼格式工具
我們也可以使用 .NET Codeformatter 工具 來確保代碼庫(kù)隨時(shí)間推移保持一致的樣式,該工具會(huì)自動(dòng)修復(fù)代碼庫(kù)以符合上述準(zhǔn)則。
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)。
聲明:發(fā)布此文是出于傳遞更多知識(shí)以供交流學(xué)習(xí)之目的。若有來源標(biāo)注錯(cuò)誤或侵犯了您的合法權(quán)益,請(qǐng)作者持權(quán)屬證明與我們聯(lián)系,我們將及時(shí)更正、刪除,謝謝。
作者:彭智勇
來源
https://pzy.io/archives/2019/11/csharp-coding-guidelines.html?utm_source=tuicool&utm_medium=referral


又來一個(gè)神奇的網(wǎng)站!

人人影視字幕組涼了,這款美劇APP不能錯(cuò)過!
