【C#】Conventions(惯例)最佳实践和准则
在C#中,Conventions(惯例)是指编写代码时的一套最佳实践和准则。这些惯例旨在提高代码的可读性、一致性和可维护性。虽然这些惯例不是语言的强制规则,但遵循它们可以使你的代码更加清晰和专业。
以下是一些常见的C#编码惯例:
- 命名约定:
- 使用有意义的、描述性的名称。
类名和公共成员使用帕斯卡命名法(PascalCase),如MyClass,PublicMethod。私有成员使用驼峰命名法(camelCase),如privateField,localVariable。- 接口名以 “I” 开头,如
IDisposable,IEnumerable。 - 方法名使用动词或动词短语,如
GetValue,CalculateSum。
帕斯卡命名法(PascalCase)是一种命名约定,用于标识类名MyClass和公共成员PublicMethod(方法、属性、字段等)。在帕斯卡命名法中,每个单词的首字母大写,没有使用下划线或其他分隔符。以下是帕斯卡命名法的示例:
- MyClass
- PublicMethod
- CustomerAccount
- BankTransaction
这种命名风格被广泛采用,特别是在许多编程语言和框架中,如
C#,Java和C++等。它有助于提高代码的可读性和一致性,并使类名和公共成员在代码中更加显眼和易于识别。至于接口名以"I"开头的约定,这是一种常见的命名习惯,但并不是强制性的规则。根据
.NET Framework设计准则,在C#中,建议接口名称以"I"开头,以便更清晰地区分接口和类。例如,"IDisposable"和"IEnumerable"都是以"I"开头的接口名。
下划线命名法(underscore_case)是一种命名约定,其中单词之间使用下划线作为分隔符。在这种命名风格中,所有字母通常小写。以下是下划线命名法的示例:
- my_variable
- public_method
- customer_account
- bank_transaction
下划线命名法在一些编程语言和项目中被广泛使用,具有以下特点和用途:
- 可读性:使用下划线作为分隔符可以使标识符更易于阅读和理解,特别是在较长的标识符中。
- 兼容性:下划线命名法适用于许多编程语言,包括早期的编程语言和一些现代语言,如python。
- 与文件系统一致:在一些情况下,下划线命名法被用于命名文件和目录,以保持一致性。
- 避免命名冲突:使用下划线作为分隔符可以帮助避免与编程语言关键字或保留字的命名冲突。
需要注意的是,选择命名风格时应与项目团队达成共识,并遵循所使用编程语言或项目的约定。尽管下划线命名法在某些情况下被广泛接受,但在其他项目中可能更倾向于使用帕斯卡命名法或驼峰命名法。重要的是保持一致性和代码可读性,以及与团队成员一起制定并遵循一致的命名约定。
-
代码格式:
- 使用一致的缩进(通常为4个空格)。
- 使用大括号({})来分隔代码块,即使只有一条语句。
- 在运算符和逗号后面添加空格。
- 在方法和类的定义之间添加空行。
-
注释:
- 使用
XML文档注释来描述类、方法和属性的用途。 - 对
复杂的逻辑或算法使用内联注释进行解释。 - 避免不必要或多余的注释。
- 使用
-
异常处理:
- 使用 try-catch 块来处理异常。
- 在适当的级别捕获异常,并提供有意义的错误消息。
- 避免捕获通用的
Exception类,而是捕获特定的异常类型。
-
类和方法设计:
- 遵循
单一职责原则(SRP),每个类和方法应该只负责一项功能。 - 使用访问修饰符(如
public,private)来控制成员的可见性。 - 使用
属性而不是公共字段来封装数据。 - 考虑可读性和可维护性,将长方法分解为更小、更集中的方法。
- 遵循
-
文件组织:
每个类都应该在单独的文件中定义。- 使用
命名空间来组织相关的类和类型。 - 将相关的
文件组织到适当的文件夹中。
这些只是一些常见的C#编码惯例示例。不同的组织或项目可能有自己特定的惯例和风格指南。重要的是要保持一致性,并与团队中的其他开发人员协调,以确保代码的可读性和可维护性。
相关文章:
【C#】Conventions(惯例)最佳实践和准则
在C#中,Conventions(惯例)是指编写代码时的一套最佳实践和准则。这些惯例旨在提高代码的可读性、一致性和可维护性。虽然这些惯例不是语言的强制规则,但遵循它们可以使你的代码更加清晰和专业。 以下是一些常见的C#编码惯例: 命名约定: 使用有意义的、描述性的名称。类名和公…...
vue3中使用cesium
vue3中使用cesium Cesium是一个开源的JavaScript库,专门用于创建3D地球和2D地图的Web应用程序。它提供了丰富的功能和工具,使得开发人员能够轻松地构建出高质量的地理空间可视化应用。 1. 安装cesium包 npm install cesium2. 复制node_modules中的Ces…...
arduino ide 开发esp8266注意事项
1.引脚序列号必须是常量来定义,否则会无限重启。 #define p2 2 const int Pin2p2; pinMode(Pin2, OUTPUT); 2.关于wifi的模式,ap,sta,apsta三种模式的初始化必须放在void set_up(){}这个函数里,不能额外搞个自定义函数…...
RTC协议与算法基础 - RTP/RTCP
首先,需要说明下,webrtc的核心音视频传输是通过RTP/RTCP协议实现的,源码位于src/modules/rtp_rtcp目录下: 下面让我们对相关的内容基础进行简要分析与说明: 一、TCP与UDP协议 1.1、TCP协议 TCP为了实现数据传输的可…...
c语言游戏实战(8):飞机大作战
前言: 飞机大作战游戏是一种非常受欢迎的射击类游戏,玩家需要控制一架战斗机在屏幕上移动,击落敌机以获得分数。本游戏使用C语言编写,旨在帮助初学者了解游戏开发的基本概念和技巧。 在开始编写代码之前,我们需要先了…...
docker 部署k8s相关命令操作
1.安装docket 可参考其他网站 2.docker ps 3.docker images 4.docker ps -all 5.docker pull openjdk:8 安装jdk8 6.docker load < jdk.tar 自己有jdk8 7.打包jar服务 ,需要依赖一个打包文件Dockerfile,如下 文件内容如下 FROM openjdk:8u275-j…...
使用Tesseract识别中文 并提高精度
1. 使用中文训练数据 在使用pytesseract进行中文文本识别时,确保安装了中文的训练数据文件。在Tesseract的安装目录下的tessdata文件夹中应包含一个名为chi_sim.traineddata(简体中文)或chi_tra.traineddata(繁体中文)…...
基于Jenkins + Argo 实现多集群的持续交付
作者:周靖峰,青云科技容器顾问,云原生爱好者,目前专注于 DevOps,云原生领域技术涉及 Kubernetes、KubeSphere、Argo。 前文概述 前面我们已经掌握了如何通过 Jenkins Argo CD 的方式实现单集群的持续交付,…...
关于javascript数字精度丢失的解决办法
分析原因 众所周知,在JavaScript中计算两个十进制数的和,有时候会出现令人惊讶的结果,主要原因是计算机将数据存储为二进制所引起的,所以这并不是javascript存在的缺陷,而在其他语言中也有类似的问题。 例如下面的例子…...
每日一题 第二十一期 洛谷 组合的输出
组合的输出 题目描述 排列与组合是常用的数学方法,其中组合就是从 n n n 个元素中抽出 r r r 个元素(不分顺序且 r ≤ n r \le n r≤n),我们可以简单地将 n n n 个元素理解为自然数 1 , 2 , … , n 1,2,\dots,n 1,2,…,n&a…...
JavaScript 面试题
问题 1 // 请解释什么是 JavaScript 中的原型继承,以及原型链的概念答案 1 原型继承是 JavaScript 中实现继承的一种方式,每个对象都有一个指向另一个对象的引用,这个对象就是原型。当访问对象的属性或方法时,如果对象本身没有该…...
java输入语句scanner
在Java中,Scanner 类是 java.util 包中的一个类,它用于获取用户的输入。要使用 Scanner 类,你首先需要导入这个类,然后创建一个 Scanner 对象,通常命名为 scanner。你可以使用这个对象来读取用户从键盘输入的数据。 以…...
Python从入门到精通秘籍十一
一、Python之自定义模块并导入 在Python中,我们可以自定义模块并将其导入到其他Python程序中使用。自定义模块可以包含函数、类、常量等,便于组织和重用代码。 下面是使用Python代码详细讲解自定义模块的创建和导入的例子: 假设我们有两个…...
WRF模型教程(ububtu系统)-WPS(WRF Pre-Processing System)概述
一、WPS简介 WRF 预处理系统 (WRF Pre-Processing System,WPS) ,集成了基于Fortran和C编写的程序,这些程序主要用于处理输入到real.exe的数据。WPS主要有三个程序和一些辅助程序。 二、各程序介绍 主要的程序为geogrid.exe、ungrib.exe、met…...
C语言向C++过渡的基础知识(一)
目录 C关键字 C命名空间 命名空间的介绍 域作用限定符 命名空间的使用 C的输入以及输出 C中的缺省参数 缺省参数的介绍 缺省参数的使用 缺省参数的分类 全缺省参数 半缺省参数 C关键字 在C中,有63个关键字,而C语言只有32个关键字 asm do i…...
GEE遥感云大数据林业应用典型案例及GPT模型应用
近年来遥感技术得到了突飞猛进的发展,航天、航空、临近空间等多遥感平台不断增加,数据的空间、时间、光谱分辨率不断提高,数据量猛增,遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇…...
macOS Ventura 13.6.5 (22G621) Boot ISO 原版可引导镜像下载
macOS Ventura 13.6.5 (22G621) Boot ISO 原版可引导镜像下载 3 月 8 日凌晨,macOS Sonoma 14.4 发布,同时带来了 macOS Ventru 13.6.5 和 macOS Monterey 12.7.4 安全更新。 macOS Ventura 13.6 及更新版本,如无特殊说明皆为安全更新&…...
数据结构面试常见问题之Insert or Merge
😀前言 本文将讨论如何区分插入排序和归并排序两种排序算法。我们将通过判断序列的有序性来确定使用哪种算法进行排序。具体而言,我们将介绍判断插入排序和归并排序的方法,并讨论最小和最大的能区分两种算法的序列长度。 🏠个人主…...
perl 用 XML::LibXML 解析 Freeplane.mm文件,XML文件
Perl 官网 www.cpan.org 从 https://strawberryperl.com/ 下载网速太慢了 建议从 https://download.csdn.net/download/qq_36286161/87892419 下载 strawberry-perl-5.32.1.1-64bit.zip 约105MB 解压后安装.msi,装完后有520MB,建议安装在D:盘 在云计算…...
Spring Cloud Alibaba微服务从入门到进阶(七)(服务容错-Sentinel)
雪崩效应 我们把基础服务故障,导致上层服务故障,并且这个故障不断放大的过程,成为雪崩效应。 雪崩效应,往往是因为服务没有做好容错造成的。 微服务常见容错方案 仓壁模式 比如让controller有自己独立的线程池,线程池满…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
