csharp:框架

框架

.net 读 dot net

using System ; //引用头文件
namespace 控制台 ; //命名空间 【Program的命名空间就是:控制台】
   class Program ; //class 用于声明一个类

使用中建议、类名称与文件名保持一样 尽量一个类一个文件

一、命名规范

  • PascalCase
    • 用于:类、接口、结构、枚举、属性、方法、事件、命名空间
    • 例:OrderServiceGetUserInfo()UserName
  • camelCase
    • 用于:参数、局部变量
    • 例:userId, totalCount
  • 带下划线camelCase
    • 用于:私有字段(Roslyn、.NET Runtime 推荐)
    • 例:_logger, _cache
  • SCREAMING_CASE
    • 用于:常量、static readonly 字段
    • 例:DEFAULT_BUFFER_SIZE;
  • 接口必须以 I 开头
  • 示例:IList, ILoggerFactory
  • 枚举成员:PascalCase
  • 不使用前缀(如 Enum_
enum FileState { Open, Closed, Locked }
  • PascalCase
  • 公司或组织级前缀
  • 示例:Microsoft.Extensions.Logging

二、代码布局与格式

  • , ; { } 后加空格;方法调用括号内无空格
DoWork(item, index);

使用 Allman 风格(每个 { 独占一行):

public void Run()
{
    ...
}
  • 成组代码块之间使用 1 行空行
  • 方法之间留 1 行空行
  • 不要连续多个空行

三、成员排序(微软推荐顺序)

类内部成员推荐顺序:

  1. 常量
  2. 静态字段
  3. 字段
  4. 构造函数
  5. 属性
  6. 事件
  7. 方法
  8. 嵌套类型
# region 常量
 
# endregion
 
# region 静态字段 
 
# endregion
 
# region 字段
 
# endregion
 
# region 构造函数 
 
# endregion
 
# region 属性 
 
# endregion
 
# region 事件 
 
# endregion
 
# region 方法 
 
# endregion
 
# region 嵌套类型
 
# endregion

四、表达式与语言特性

  • 仅当类型明确或无关紧要时使用 var
var list = new List<int>();  // 类型明显
  • 如果不明显,使用显式类型:
int count = GetCount();
  • 适用于简单成员:
public int Count => _items.Count;
public override string ToString() => Name;
  • 简短 lambda 可在一行
  • 多行 lambda 保持缩进
items.Where(x =>
{
    return x.Enabled;
});

五、可读性规范

  • 尽量短小,一个方法保持单一职责
  • 必选参数在前,可选参数在后
  • CancellationToken 必须是最后一个参数:
public Task RunAsync(int id, CancellationToken cancellationToken);
  • 使用肯定句:isReady, hasValue, canExecute
  • 避免:isNotValid, noItems

六、注释规范

公共 API 必须有 XML 注释:

/// <summary>
/// 获取用户信息。
/// </summary>
public User GetUser(int id) { ... }

只用于解释复杂逻辑,避免写显而易见的注释。


七、异常与错误处理

继承 Exception 且名称以 Exception 结尾

class InvalidConfigurationException : Exception { }

避免:

try { ... } catch { ... } // 控制逻辑

异常应该保留给意外情况,而不是正常控制流程。

因为异常的代价比较高


八、文件与项目结构

除非:

  • 小型私有辅助类
  • 局部类型

文件名与主类名一致:

OrderService.cs

按以下顺序分组——每组之间空一行:

  1. System.* 命名空间
  2. 第三方包
  3. 当前项目命名空间

示例:

using System;
using System.Collections.Generic;
 
using Newtonsoft.Json;
 
using MyApp.Core;

九、异步编程规范(微软官方 async 规则)

public Task SaveAsync();

库代码中使用:

await task.ConfigureAwait(false);

十、不可变性与集合规范

private readonly ILogger _logger;

避免暴露可变集合类型。

请输入您的评论. 可以使用维基语法:
 

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • csharp/框架.txt
  • 最后更改: 2025/11/21 08:54
  • 张叶安