# 1.1 命名风格 --- ## 1. 通用命名原则 - 使用有意义且可读的名称 ```csharp // ❌ 不建议:缩写和无意义的名称 var d = DateTime.Now; var usr = new User(); int n = 100; // ✅ 建议:清晰表达意图 var currentDate = DateTime.Now; var newUser = new User(); int maxRetryCount = 100; ``` - 不建议使用拼音和中文 ```csharp // ❌ 不建议 var yongHu = new User(); string xingMing = "张三"; var keHuMingCheng = "张三"; var 订单数量 = 10; // ✅ 建议 var user = new User(); string fullName = "张三"; ``` - 不建议过度缩写 ```csharp // ❌ 不建议 var cSvc = new CustomerService(); var ordMgr = new OrderManager(); // ✅ 建议 var customerService = new CustomerService(); var orderManager = new OrderManager(); // ✅ 可接受含义广为人知的缩写 var customerId = 1; // Id var htmlContent = ""; // Html var xmlDocument = ""; // Xml var urlAddress = ""; // Url var httpClient = new HttpClient(); // Http ``` - 不建议使用下划线开头(除私有字段外) ```csharp // ❌ 不建议 public string _customerName; public void _ProcessOrder() { } // ✅ 建议 public string CustomerName { get; set; } private string _customerName; // 私有字段可以使用 public void ProcessOrder() { } ``` ## 2. 命名约定 ### 2.1 类 - 使用 PascalCase(帕斯卡命名法) ```csharp // ✅ 建议的类命名 public class Customer { } public class OrderService { } public class ProductRepository { } public class PaymentProcessor { } ``` - 使用名词或名词短语 ```csharp // ✅ 建议:名词形式 public class Invoice { } public class ShoppingCart { } public class UserProfile { } public class EmailValidator { } public class UserAuthentication { } // ❌ 不建议:动词形式 public class ProcessOrder { } // 应该是 OrderProcessor public class ValidateUser { } // 应该是 UserValidator public class Calculate { } // 适用于方法命名 ``` - 建议的命名方式 ```csharp // 服务类 // ✅ 以 Service 结尾 public class CustomerService { } public class EmailService { } // ✅ 以职责命名 public class OrderProcessor { } public class EmailSender { } public class PaymentGateway { } public class CacheManager { } // 仓储类 // ✅ 以 Repository 结尾 public class OrderRepository { } public class ProductRepository { } // ✅ Provider public class AuthenticationProvider { } public class DataProvider { } // ✅ Helper/Utility public class StringHelper { } public class DateTimeUtility { } // 异常类 // ✅ 以 Exception 结尾 public class OrderNotFoundException { } public class InvalidOperationException { } // ✅ Attribute public class ValidateAttribute { } public class AuthorizeAttribute { } // ✅ DTO/ViewModel public class CustomerDto { } public class OrderViewModel { } public class CreateProductRequest { } public class ProductResponse { } public class DoSomethingInput { } public class DoSomethingOutput { } // ✅ Entity/Model public class Order { } public class Product { } public class Customer { } // 验证器 // ✅ 以 Validator 结尾 public class OrderValidator { } public class EmailValidator { } public class CreateOrderRequestValidator { } ``` - 不建议的命名方式 ```csharp // ❌ 不建议:使用下划线或特殊字符 public class Order_Service { } public class Product$Manager { } // ❌ 不建议:使用前缀 public class COrder { } public class TCustomer { } // ❌ 不建议:过于通用 public class Data { } public class Info { } public class Manager { } // 太宽泛,应该是具体的 xxxManager ``` ### 2.2 接口 - 使用 `I` 前缀 + PascalCase ```csharp // ✅ 正确的接口命名 public interface ICustomerService { } public interface IOrderRepository { } public interface IPaymentProcessor { } public interface ILogger { } ``` - 使用名词、名词短语或形容词 ```csharp // ✅ 建议:名词 (一般表示为业务接口) public interface IRepository { } public interface IValidator { } public interface IOrderService { } public interface ILogger { } public interface ICache { } // ✅ 建议:形容词(一般表示为能力接口) public interface IComparable { } public interface IDisposable { } public interface IEnumerable { } public interface IQueryable { } // ✅ 建议:名词短语 public interface IDataAccess { } public interface IUserAuthentication { } ``` - 避免使用 Interface 后缀 ```csharp // ❌ 不建议 public interface IOrderServiceInterface { } // ✅ 建议 public interface IOrderService { } ``` ### 2.3 方法 - 使用 PascalCase ```csharp public class CustomerService { // ✅ 建议 public void CreateCustomer() { } public Customer GetCustomerById(int id) { } public void UpdateCustomerProfile() { } public void DeleteCustomer() { } } ``` - 使用动词或动词短语 ```csharp // ✅ 建议:明确、清晰的动作 public void CreateOrder() { } public void UpdateCustomer() { } public void DeleteProduct() { } public Order GetOrderById(int id) { } public List GetOrdersByCustomer(int customerId) { } public bool ValidateEmail(string email) { } public decimal CalculateDiscount(Order order) { } // ❌ 不建议:名词形式 public void Order() { } // 应该是 CreateOrder 或 ProcessOrder public void Customer() { } ``` - 常用动词前缀 ```csharp // Get - 获取数据(通常有返回值) public Customer GetCustomerById(int id) { } public List GetOrders() { } // Find - 查找数据(可能返回 null) public Customer? FindCustomerByEmail(string email) { } // Create/Add - 创建新对象 public void CreateOrder(Order order) { } public void AddProduct(Product product) { } // Update/Modify - 更新现有对象 public void UpdateCustomer(Customer customer) { } public void ModifyOrderStatus(int orderId, OrderStatus status) { } // Delete/Remove - 删除对象 public void DeleteOrder(int orderId) { } public void RemoveProduct(int productId) { } // Save - 保存(创建或更新) public void SaveCustomer(Customer customer) { } // Validate - 验证 public bool ValidateOrder(Order order) { } public ValidationResult ValidateInput(string input) { } // Calculate/Compute - 计算 public decimal CalculateTotal(List items) { } public int ComputeAge(DateTime birthDate) { } // Process/Handle - 处理 public void ProcessOrder(Order order) { } public void ProcessPayment(Payment payment) { } // 布尔判断 // ✅ 建议: 使用 Is、Has、Can、Should 等前缀更能提高可读性 public bool IsValid() { } public bool IsActive() { } public bool HasPermission() { } public bool CanProcess() { } public bool ShouldRetry() { } public bool Exists(int id) { } public bool Contains(string value) { } // ❌ 不建议:不清晰的命名 public bool Valid() { } public bool Active() { } public bool Permission() { } // Convert/Transform - 转换 public OrderDto ConvertToDto(Order order) { } public string TransformToJson(object obj) { } // Send/Receive - 发送/接收 public void SendNotification(string message) { } public Message ReceiveMessage() { } `` - 常用查询方法命名方式 ```csharp // ✅ 单个对象 public Customer GetCustomerById(int id) { } public Order FindOrderByNumber(string orderNumber) { } // ✅ 集合 public List GetAllCustomers() { } public IEnumerable GetOrdersByCustomer(int customerId) { } public List FindProductsByCategory(string category) { } // ✅ 条件查询 public List GetActiveOrders() { } public List GetVipCustomers() { } // ✅ 分页查询 public PagedResult GetProducts(int pageIndex, int pageSize) { } public List GetOrdersByPage(int pageNumber, int pageSize) { } ``` - 私有方法也应该使用 PascalCase ```csharp public class OrderProcessor { // ✅ 私有方法也使用 PascalCase private void ValidateOrderItems(Order order) { } private decimal CalculateItemTotal(OrderItem item) { } private bool CheckInventory(int productId) { } } ``` ### 2.4 属性与字段 - 属性使用 PascalCase ```csharp public class Customer { // ✅ 建议的属性命名 public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public DateTime CreatedDate { get; set; } public bool IsActive { get; set; } public decimal TotalAmount { get; set; } } ``` - 私有字段使用 _camelCase ```csharp public class OrderService { // ✅ 建议的私有字段命名 private readonly IOrderRepository _orderRepository; private readonly ILogger _logger; private readonly IEmailService _emailService; private int _retryCount; private bool _isProcessing; } ``` - 只读字段 ```csharp public class Configuration { // ✅ 公共只读字段使用 PascalCase public readonly string DefaultCulture = "zh-CN"; //(公共只读字段建议改为属性方式使用) // ✅ 私有只读字段使用 _camelCase private readonly string _connectionString; private readonly int _maxRetryCount; } ``` - 静态字段 ```csharp public class AppConstants { // ✅ 公共静态字段使用 PascalCase public static readonly int MaxPageSize = 100; public static readonly string DefaultDateFormat = "yyyy-MM-dd"; // ✅ 私有静态字段使用 _camelCase private static readonly object _lockObject = new object(); } ``` - 布尔属性 ```csharp public class Order { // ✅ 建议使用 Is、Has、Can 等前缀提高可读性 public bool IsCompleted { get; set; } public bool IsPaid { get; set; } public bool HasDiscount { get; set; } public bool CanBeCancelled { get; set; } // ❌ 不建议 public bool Completed { get; set; } public bool Paid { get; set; } } ``` - 集合属性 ```csharp public class Order { // ✅ 建议:使用复数形式 public List Items { get; set; } public ICollection Payments { get; set; } public IEnumerable Comments { get; set; } // ❌ 不建议:使用单数 public List Item { get; set; } } ``` ### 2.5 变量与参数 - 局部变量使用 camelCase ```csharp public void ProcessOrder(int orderId) { // ✅ 建议的局部变量命名 var order = GetOrder(orderId); var totalAmount = CalculateTotal(order); var discountRate = GetDiscountRate(order); var finalPrice = totalAmount * (1 - discountRate); var isValid = ValidateOrder(order); } ``` - 方法参数使用 camelCase ```csharp // ✅ 建议的参数命名 public Order CreateOrder(int customerId, List items, decimal discountAmount, string shippingAddress) { // ...existing code... } // ✅ 布尔参数命名 public List GetOrders(int customerId, bool includeCompleted, bool includeCancelled) { // ...existing code... } ``` - 循环变量命名 ```csharp // ✅ 简单循环可以使用单字母 for (int i = 0; i < orders.Count; i++) { // ...existing code... } // ✅ 有意义的循环变量 foreach (var order in orders) { ProcessOrder(order); } foreach (var item in order.Items) { ValidateItem(item); } // ❌ 不建议:不清晰的变量名 foreach (var o in orders) // o 不如 order 清晰 { // ...existing code... } ``` - LINQ 查询变量命名 ```csharp // ✅ 建议 var activeCustomers = customers .Where(c => c.IsActive) .ToList(); var customerOrders = orders .Where(o => o.CustomerId == customerId) .OrderByDescending(o => o.CreatedDate) .ToList(); // ✅ 建议:复杂查询使用有意义的变量 var highValueOrders = orders .Where(order => order.TotalAmount > 1000) .Select(order => new { OrderId = order.Id, CustomerName = order.Customer.Name, TotalAmount = order.TotalAmount }) .ToList(); ``` - 临时变量命名 ```csharp public decimal CalculateOrderTotal(Order order) { // ✅ 建议:清晰的临时变量 var subtotal = order.Items.Sum(item => item.Price * item.Quantity); var taxAmount = subtotal * 0.1m; var shippingFee = CalculateShippingFee(order); var discountAmount = CalculateDiscount(order, subtotal); var total = subtotal + taxAmount + shippingFee - discountAmount; return total; } ``` - 避免使用无意义的变量名 ```csharp // ❌ 不建议 var temp = GetCustomer(); var data = ProcessData(); var obj = CreateObject(); var result = DoSomething(); // ✅ 建议 var customer = GetCustomer(); var processedOrders = ProcessOrders(); var paymentRecord = CreatePaymentRecord(); var validationResult = ValidateInput(); ``` ### 2.6 常量与枚举 - 常量命名 ```csharp // ✅ 方式一:PascalCase(推荐) public class OrderConstants { public const int MaxItemsPerOrder = 100; public const decimal MinOrderAmount = 10.0m; public const string DefaultCurrency = "CNY"; } // ✅ 方式二:UPPER_CASE(C# 中较少使用) public class AppSettings { public const int MAX_RETRY_COUNT = 3; public const string DEFAULT_CULTURE = "zh-CN"; } // ✅ 私有常量 private const int MaxRetryAttempts = 3; private const string ErrorMessageTemplate = "处理订单 {0} 时发生错误"; ``` - 枚举命名 ```csharp // ✅ 枚举类型使用 PascalCase,单数形式 public enum OrderStatus { Pending, // 枚举值使用 PascalCase Processing, Completed, Cancelled, Refunded } // ✅ 标志枚举使用复数 [Flags] public enum UserPermissions { None = 0, Read = 1, Write = 2, Delete = 4, Admin = 8 } // ❌ 不建议:使用复数(非标志枚举) public enum OrderStatuses { } // ❌ 不建议:枚举值使用前缀 public enum OrderStatus { OrderStatusPending, // 不需要前缀 OrderStatusCompleted } ``` - 常量类组织 ```csharp // ✅ 按功能组织常量 public static class ValidationConstants { public const int MinPasswordLength = 8; public const int MaxPasswordLength = 50; public const int MinUsernameLength = 3; public const int MaxUsernameLength = 20; } public static class CacheKeys { public const string CustomerPrefix = "customer_"; public const string OrderPrefix = "order_"; public const string ProductPrefix = "product_"; } public static class ErrorCodes { public const string OrderNotFound = "ORDER_NOT_FOUND"; public const string InsufficientStock = "INSUFFICIENT_STOCK"; public const string PaymentFailed = "PAYMENT_FAILED"; } ``` ### 2.7 布尔类型 - 使用肯定的命名方式 ```csharp // ✅ 建议:肯定形式 public bool IsActive { get; set; } public bool IsEnabled { get; set; } public bool HasPermission { get; set; } public bool CanEdit { get; set; } // ❌ 不建议:否定形式(增加理解难度) public bool IsNotActive { get; set; } public bool IsDisabled { get; set; } ``` - 常用布尔命名前缀 ```csharp public class Order { // Is - 状态判断 public bool IsCompleted { get; set; } public bool IsValid { get; set; } public bool IsPaid { get; set; } // Has - 拥有判断 public bool HasDiscount { get; set; } public bool HasShipped { get; set; } // Can - 能力判断 public bool CanBeCancelled { get; set; } public bool CanBeRefunded { get; set; } // Should - 应该判断 public bool ShouldSendEmail { get; set; } public bool ShouldApplyDiscount { get; set; } } ``` - 布尔方法命名 ```csharp public class OrderValidator { // ✅ 建议 public bool IsValidOrder(Order order) { } public bool HasSufficientStock(int productId, int quantity) { } public bool CanProcessPayment(Payment payment) { } public bool Exists(int orderId) { } // ✅ 验证方法也可以使用 Validate 开头,返回 bool public bool ValidateOrderItems(Order order) { } } ``` ### 2.8 集合类型 - 使用复数形式 ```csharp public class Customer { // ✅ 建议:使用复数 public List Orders { get; set; } public ICollection
Addresses { get; set; } public IEnumerable Payments { get; set; } // ❌ 不建议 public List OrderList { get; set; } // 不需要 List 后缀 public List Order { get; set; } // 应使用复数 } ``` - 集合局部变量命名 ```csharp public void ProcessOrders() { // ✅ 建议 var orders = GetOrders(); var activeOrders = orders.Where(o => o.IsActive).ToList(); var orderIds = orders.Select(o => o.Id).ToList(); var customerNames = customers.Select(c => c.Name).ToList(); // ❌ 不建议 var orderDictionary = orders.ToDictionary(o => o.Id); var customersByEmail = customers.ToDictionary(c => c.Email); } ``` - 特殊集合命名 ```csharp // ✅ 字典 private readonly Dictionary _orderCache; private readonly ConcurrentDictionary _customerLookup; // ✅ 队列 private readonly Queue _orderQueue; private readonly ConcurrentQueue _taskQueue; // ✅ 堆栈 private readonly Stack _commandHistory; ``` ### 2.9 异步方法 - 使用 `Async` 后缀 ```csharp // ✅ 异步方法使用 Async 后缀 public async Task GetOrderAsync(int orderId) { return await _repository.GetByIdAsync(orderId); } public async Task> GetOrdersAsync(int customerId) { return await _repository.GetOrdersByCustomerAsync(customerId); } public async Task CreateOrderAsync(CreateOrderRequest request) { await _repository.AddAsync(MapToOrder(request)); } public async Task UpdateOrderAsync(Order order) { await _repository.UpdateAsync(order); } public async Task DeleteOrderAsync(int orderId) { await _repository.DeleteAsync(orderId); } ``` - 异步方法返回类型 ```csharp // ✅ 返回 Task public async Task SendEmailAsync(string to, string subject) { await _emailService.SendAsync(to, subject); } // ✅ 返回 Task public async Task ValidateOrderAsync(Order order) { return await _validator.ValidateAsync(order); } // ✅ 返回 ValueTask(性能敏感场景) public async ValueTask GetCachedCountAsync() { if (_cache.TryGetValue("count", out int count)) { return count; } return await _repository.GetCountAsync(); } // ❌ 错误:避免使用 async void(除事件处理程序外) public async void ProcessOrderAsync(int orderId) // 错误! { await _service.ProcessAsync(orderId); } ```