【.NET Core】C#编程规范

【.NET Core】C#编程规范

文章目录

  • 【.NET Core】C#编程规范
    • 一、概述
      • 1.1 结构清晰第一
      • 1.2 简洁之风
      • 1.3 代码风格保持一致性
    • 二、命名约定
    • 三、类型参数命名指南
      • 3.1 请使用描述性名称命名泛型类型参数,除非单个字面名称完全具有自我说明性且描述性名称不会增加任何作用。
      • 3.2 对具有单个字面类型参数的类型,考虑使用`T`作为类型参数名称
      • 3.3 在类型参数描述性名称前添加前缀 "T"
        • 3.4 考虑在参数名称中指示出类型参数的约束
    • 四、总结

在这里插入图片描述

一、概述

为提高产品代码质量,指导广大软件开发人员编写出简洁、可维护、可靠、可测试、高效、可移植的代码,编程规范修订工作组分析、总结各种典型编码问题,并参考了业界编程规范近年来的成果,重新进行了梳理、优化、刷新,微软官方给出一下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 考虑在参数名称中指示出类型参数的约束

四、总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/479445.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当Diffusion遇到Transformer

Diffusion与Tranformer结合的代表性文章 一、DiT 题目: Scalable Diffusion Models with Transformers 机构&#xff1a;UC Berkeley&#xff0c;纽约大学 论文: https://arxiv.org/pdf/2212.09748.pdf 代码&#xff1a;https://github.com/facebookresearch/DiT 任务: 图像生…

SQL Developer 小贴士:显示RAC配置

前提&#xff1a; 已建立2节点RAC已在SQL Developer中建立了2个连接&#xff0c;分别到RAC的两个节点 然后单击菜单View>DBA&#xff0c;分别连接RAC节点1和节点2&#xff0c;并组织成目录&#xff08;不必须&#xff0c;但建议&#xff09;。 在两处可以体现为RAC配置。第…

第3.2章:Doris-2.0数据导入——Compaction机制

目录 一、Compaction概述 1.1 LSM-Tree概述 1.2 Compaction概述 1.3 Rowset数据版本 1.4 Compaction优点 1.5 Compaction问题 1.5.1 Compaction速度低 1.5.2 写放大问题 1.6 Compaction调优 1.6.1 业务侧 1.6.2 运维侧 二、Compaction执行方式 2.1 Vertical Com…

成都力寰璨泓科技有限公司抖音小店品质保障

在数字化浪潮席卷全球的今天&#xff0c;网络购物已成为人们日常生活的重要组成部分。抖音小店作为新兴的电商平台&#xff0c;凭借其独特的社交属性和个性化推荐机制&#xff0c;吸引了众多消费者的目光。在众多抖音小店中&#xff0c;成都力寰璨泓科技有限公司的店铺以其卓越…

春招面试准备笔记——NMS(非极大值抑制)算法

NMS&#xff08;非极大值抑制&#xff09;算法非极大值抑制是用于减少物体检测算法中重叠边界框或区域的数量的技术。通过对每个类别的检测框按置信度排序&#xff0c;然后逐个遍历&#xff0c;保留置信度最高的框&#xff0c;并抑制与其重叠且置信度低的框&#xff0c;从而得到…

打通全渠道,聚道云助力时尚巨头提升运营效能

客户介绍&#xff1a; 北京某时尚有限公司是一家集设计、生产、销售于一体的时尚产业领军企业。自成立以来&#xff0c;该公司一直秉承着对时尚的独特理解和不懈追求&#xff0c;以打造高品质、高品位的时尚产品为己任&#xff0c;深受国内外消费者的喜爱。 客户痛点&#xff…

23款奔驰GLC260L升级固定踏板 豪华氛围灯 浪漫的气氛

奔驰看内饰&#xff0c;但23款GLC260L十一月份后的车 减配了豪华氛围灯 &#xff0c;内饰瞬间少了点意思&#xff0c;所以车主过来升级一套豪华氛围灯 前后发光出风口 门板扶手也升级为发光的 顺带升级一套固定踏板 接下来看图&#xff0c;星骏汇小许Xjh15863

SG-8201CJA(汽车可编程晶体振荡器)

爱普生的SG-8021CJA是一款符合AEC-Q100标准的晶体振荡器&#xff0c;专为要求苛刻的汽车/ADAS应用&#xff08;如激光雷达和相机ECU&#xff09;而设计。它采用爱普生的内部低噪声小数NPLL&#xff0c;输出 频率高达170MHz&#xff0c;相位抖动小于1/25&#xff0c;稳定性比之前…

【4.3计算机网络】网络规划与设计

目录 1.网络规划2.逻辑网络设计3.物理网络设计 1.网络规划 需求分析->通信规范分析->逻辑网络设计->物理网络设计->实施阶段 2.逻辑网络设计 3.物理网络设计 例题1&#xff1a; 解析&#xff1a;选A。 例题2&#xff1a; 解析&#xff1a;选A。 例题3. 解析&am…

Java 反射 类加载阶段 类加载时机 Class类 Field类 Method类 Constructor类

JAVA反射机制是在运行状态中&#xff0c;对任意一个类&#xff0c;都能知道这个类的所有属性和方法&#xff1b;对任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff0c;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 反射(Reflect)是在运…

3dmax渲染有噪点的六大原因及解决方案

3dmax效果图渲染可以试试云渲染——渲染100&#xff08;支持批量渲染&#xff0c;不占用本地电脑资源&#xff0c;最高480线程大大提高渲染效率&#xff09; 问题一&#xff1a;图像尺寸过低导致渲染效果不佳 原因&#xff1a;3dmax中的图像尺寸过低&#xff0c;导致渲染后的效…

频段划分学习射频知识的意义

一、射频电路设计与低频电路设计的不同点 随着频率提高&#xff0c;相应电磁波的波长与变得可与分立电路元件的尺寸相比拟时&#xff0c;电阻、电容和电感这些元件的电响应&#xff0c;将偏离他们的理想频率特性。以 WIFI 2.4G 频段为例&#xff0c;当频率为 2437MHz&#xff0…