記錄 編碼約定 學習過程。 命名空間約定 如果沒有使用using指令,項目也沒有預設導入合適的命名空間,訪問這些命名空間或者類型時,則需要“完全限定名稱”。 namespace ConsoleApp4 { class Program { static void Main(string[] args) ...
記錄 編碼約定 學習過程。
命名空間約定
如果沒有使用using指令,項目也沒有預設導入合適的命名空間,訪問這些命名空間或者類型時,則需要“完全限定名稱”。
namespace ConsoleApp4 { class Program { static void Main(string[] args) { // 在這裡System.Diagnostics是“完全限定名稱” var traceSource = new System.Diagnostics.TraceSource(""); } } }
如果使用了Using指令,則不需要“完全限定名稱”。
using System.Diagnostics; namespace ConsoleApp4 { class Program { static void Main(string[] args) { var traceSource = new TraceSource(""); } } }
代碼佈局約定
- 不輕易更改編輯器的設置,通常使用預設的,特別是格式設置和製表符。
- 每行一條語句,每行一個聲明。
string[] strs = new string[] { "AA","BB","CC"}; string str = "hello"; int num = 4; if (num == 9) { }
- 一行寫不完的語句,分開寫則需要縮進一個製表符位。
string[] strs = new string[] { "AA","BB","CC"}; var query = strs.Where(x => x.Length == 2 && x.Contains("B")). Select(x => new { Name = x, Age = 8 });
- 屬性和方法之間至少一個空行
public int MyProperty { get; set; } public int MyProperty1 { get; set; } void Test() { }
- 使用括弧突出表達式的字句。
int val1 = 1; int val2 = 3; int val3 = 4; if ((val1 > val2) && (val1 > val3)) { }
註釋約定
單獨的行,而非代碼末尾;大寫字母開頭,斷行換小寫;句點結束註釋文本;註釋和文本之間留一個空格。
不要在註釋周圍創建格式化的星號塊???沒看懂。
下麵放一段ILSpy源碼
/// <summary> /// Sets the value of a dependency property on <paramref name="targetObject"/> using a markup extension. /// </summary> /// <remarks>This method does not support markup extensions like x:Static that depend on /// having a XAML file as context.</remarks> public static void SetValueToExtension(this DependencyObject targetObject, DependencyProperty property, MarkupExtension markupExtension) { // This method was copied from ICSharpCode.Core.Presentation (with permission to switch license to X11) if (targetObject == null) throw new ArgumentNullException(nameof(targetObject)); if (property == null) throw new ArgumentNullException(nameof(property)); if (markupExtension == null) throw new ArgumentNullException(nameof(markupExtension)); var serviceProvider = new SetValueToExtensionServiceProvider(targetObject, property); targetObject.SetValue(property, markupExtension.ProvideValue(serviceProvider)); }