发现很多 C# 开发者对命名规范不是很清楚,特地列出来。

大驼峰

  • 说明:每个单词首字母都大写,单词直接连写。
  • 在 C# 中常用于:类型(class/struct/enum/delegate)、接口(以 I 开头)、方法、属性、事件、常量、枚举成员、特性类(类名以 Attribute 结尾)

示例:

public class CustomerOrder { }
public interface IRepository { }
public enum Color { Red, Green, Blue }
public string GetName() { ... }
public int ItemCount { get; set; }
public const int DefaultTimeout = 30;
[Serializable]
public class MyCustomAttribute : Attribute { }

小驼峰

  • 说明:第一个单词首字母小写,后续单词首字母大写。
  • 在 C# 中常用于:方法参数、局部变量、私有方法的参数/局部变量(但字段多用下划线前缀变体)

示例:

void Save(string fileName) {
var localCount = 0;
}
public void DoSomething(int retryCount) { ... }

下划线小驼峰

  • 说明:私有实例字段常用下划线前缀 + 小驼峰(这是社区与官方样式指南常见/推荐的实践)。
  • 在 C# 中常用于:​私有字段(instance fields)

示例:

private int _retryCount;
private readonly ILogger _logger;

C# 特有命名规范

  • 接口(Interface)必须以 I 开头
public interface IUnitOfWork { }
public interface ILogger { }
  • Attribute 类必须以 Attribute 结尾
public class AuditAttribute : Attribute { }
  • 扩展方法(Extension Method)所在类应以 Extensions 结尾
public static class DateTimeExtensions
{
    public static bool IsWeekend(this DateTime date) => ...
}
  • 异步方法必须以 Async 结尾
public async Task SaveAsync() { }
public ValueTask<bool> ExistsAsync() { }
  • 泛型类型参数用 T 前缀(PascalCase)
public interface IRepository<T> { }
public class Result<TData> { }
  • 事件处理方法命名格式:On + EventName
protected virtual void OnOrderCompleted() { }
  • 私有方法、受保护方法仍用 PascalCase
private void LoadCache() { }
protected void ValidateOrder() { }
  • 命名空间采用 PascalCase,使用公司或组织反向域名
namespace MyCompany.ProjectName.Services
{
}

速查表

命名方式用途
PascalCase类、接口(I)、结构体、枚举、属性、事件、方法、常量、委托、命名空间、扩展类(Extensions)、Attribute 类
camelCase参数、局部变量
_camelCase私有字段(含 readonly)
Async 结尾异步方法
Attribute 结尾特性类
Extensions 结尾扩展方法类
T 开头(泛型)泛型类型参数
On + EventName事件处理方法