【.NET Core】C#编程规范

简介: 【.NET Core】C#编程规范

一、概述

为提高产品代码质量,指导广大软件开发人员编写出简洁、可维护、可靠、可测试、高效、可移植的代码,编程规范修订工作组分析、总结各种典型编码问题,并参考了业界编程规范近年来的成果,重新进行了梳理、优化、刷新,微软官方给出一下C#编程规范。

1.1 结构清晰第一

清晰性是易于维护、易于重构的程序必需具备的特征。代码首先是给人读的,好的代码应当可以像文章一样发声朗诵出来。


目前软件维护期成本占整个生命周期成本的40%~90%。根据业界经验,维护期变更代码的成本,小型系统是开发期的5倍,大型系统(100万行代码以上)可以达到100倍。业界的调查指出,开发组平均大约一半的人力用于弥补过去的错误,而不是添加新的功能来帮助公司提高竞争力。


“程序必须为阅读它的人而编写,只是顺便用于机器执行。”——Harold Abelson 和 Gerald Jay Sussman


“编写程序应该以人为本,计算机第二。”——Steve McConnell


一般情况下,代码的可读性高于性能,只有确定性能是瓶颈时,才应该主动优化。


1.2 简洁之风

简洁是易于理解并且易于实现。代码越长越难以看懂,也就越容易在修改时引入错误。写的代码越多,意味着出错的地方越多,也就意味着代码的可靠性越低。因此,我们提倡大家通过编写简洁明了的代码来提升代码可靠性。


废弃的代码(没有被调用的函数和全局变量)要及时清除,重复代码应该尽可能提炼成函数。


本规范通过后文中的原则(如文件应当职责单一/一个函数仅完成一件功能)、规则(重复代码应该尽可能提炼成函数/避免函数过长,新增函数不超过50行)等说明简洁的重要性。


1.3 代码风格保持一致性

产品所有人共同分享同一种风格所带来的好处,远远超出为了统一而付出的代价。在公司已有编码规范的指导下,审慎地编排代码以使代码尽可能清晰,是一项非常重要的技能。**如果重构/修改其他风格的代码时,比较明智的做法是根据现有代码的现有风格继续编写代码,**或者使用格式转换工具进行转换成公司内部风格。

二、命名约定

微软官方规定,C#程序对类型名称、命名空间和所有公共成员使用PascalCase命名规范。此外DotNet团队使用从DotNet Runtime团队的编码风格中吸收的以下约定:

  • 接口名称以大写字母I开头
  • 属性类型以单词Attribute结尾
  • 枚举类型对非标记使用单数名词,对标记使用复数名词
  • 标识符不应包含两个连续的下划线 (_) 字符。 这些名称保留给编译器生成的标识符
  • 对变量、方法和类使用有意义的描述性名称
  • 清晰胜于简洁
  • 将 PascalCase 用于类名和方法名称
  • 将 camelCase 用于方法参数、局部变量和专用字段
  • 将 PascalCase 用于常量名,包括字段和局部常量
  • 专用实例字段以下划线(_)开头
  • 静态字段以s_开头。此约定不是默认行为
  • 避免在名称中使用缩写或首字母缩略词,但广为人知和广泛接受的缩写除外
  • 使用遵循反向域名表示法的有意义的描述性命名空间
  • 选择表示程序集主要用途的程序集名称,语法示例是规则的例外
  • 将 S 用于结构,将 C 用于类。
  • 将 M 用于方法。
  • 将 v 用于变量,将 p 用于参数。
  • 将 r 用于 ref 参数。


三、类型参数命名指南

以下准则适用于泛型类型参数上的类型参数。类型参数是泛型类型或泛型方法中参数的占位符。

3.1 请使用描述性名称命名泛型类型参数,除非单个字面名称完全具有自我说明性且描述性名称不会增加任何作用。

public interface ISessionChannel<TSession> { /*...*/ }
public delegate TOutput Converter<TInput, TOutput>(TInput from);
public class List<T> { /*...*/ }

3.2 对具有单个字面类型参数的类型,考虑使用T作为类型参数名称

public int IComparer<T>() { return 0; }
public delegate bool Predicate<T>(T item);
public struct Nullable<T> where T : struct { /*...*/ }

3.3 在类型参数描述性名称前添加前缀 “T”

public interface ISessionChannel<TSession>
{
    TSession Session { get; }
}
3.4 考虑在参数名称中指示出类型参数的约束

四、总结

代码标准对于在开发团队中维护代码可读性、一致性和协作至关重要。 遵循行业实践和既定准则的代码更易于理解、维护和扩展。 大多数项目通过代码约定强制要求样式一致。使用命名空间限定。 如果你知道命名空间默认导入项目中,则不必完全限定来自该命名空间的名称。 如果对于单行来说过长,则可以在点 (.) 后中断限定名称。

目录
相关文章
|
23天前
|
开发框架 .NET C#
ASP.NET Core Blazor 路由配置和导航
大家好,我是码农刚子。本文系统介绍Blazor单页应用的路由机制,涵盖基础配置、路由参数、编程式导航及高级功能。通过@page指令定义路由,支持参数约束、可选参数与通配符捕获,结合NavigationManager实现页面跳转与参数传递,并演示用户管理、产品展示等典型场景,全面掌握Blazor路由从入门到实战的完整方案。
156 6
|
11月前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
273 5
|
7月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
272 0
|
11月前
|
开发框架 搜索推荐 算法
一个包含了 50+ C#/.NET编程技巧实战练习教程
一个包含了 50+ C#/.NET编程技巧实战练习教程
313 18
|
11月前
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
330 12
|
12月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
248 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
11月前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
164 6
|
11月前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
166 6
|
11月前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
170 6
|
11月前
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
242 1

热门文章

最新文章