记录 编码约定 学习过程。
命名空间约定
如果没有使用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)); }