.net 读 dot net
using System ; //引用头文件 namespace 控制台 ; //命名空间 【Program的命名空间就是:控制台】 class Program ; //class 用于声明一个类
使用中建议、类名称与文件名保持一样 尽量一个类一个文件
OrderService、GetUserInfo()、UserNameuserId, totalCount_logger, _cachestatic readonly 字段DEFAULT_BUFFER_SIZE;IList, ILoggerFactoryEnum_)enum FileState { Open, Closed, Locked }
Microsoft.Extensions.Logging, ; { } 后加空格;方法调用括号内无空格DoWork(item, index);
使用 Allman 风格(每个 { 独占一行):
public void Run() { ... }
类内部成员推荐顺序:
# region 常量 # endregion # region 静态字段 # endregion # region 字段 # endregion # region 构造函数 # endregion # region 属性 # endregion # region 事件 # endregion # region 方法 # endregion # region 嵌套类型 # endregion
public int Count => _items.Count; public override string ToString() => Name;
items.Where(x => { return x.Enabled; });
CancellationToken 必须是最后一个参数:public Task RunAsync(int id, CancellationToken cancellationToken);
isReady, hasValue, canExecuteisNotValid, noItems公共 API 必须有 XML 注释:
/// <summary> /// 获取用户信息。 /// </summary> public User GetUser(int id) { ... }
只用于解释复杂逻辑,避免写显而易见的注释。
继承 Exception 且名称以 Exception 结尾
class InvalidConfigurationException : Exception { }
避免:
try { ... } catch { ... } // 控制逻辑
异常应该保留给意外情况,而不是正常控制流程。
因为异常的代价比较高
除非:
文件名与主类名一致:
OrderService.cs
按以下顺序分组——每组之间空一行:
示例:
using System; using System.Collections.Generic; using Newtonsoft.Json; using MyApp.Core;
public Task SaveAsync();
库代码中使用:
await task.ConfigureAwait(false);
private readonly ILogger _logger;
避免暴露可变集合类型。