C#编码规范

news2024/12/23 13:34:58

一、 命名惯例和规范

注:

Pascal:大小写形式-所有单词第一个字母大写,其他字母小写。
驼峰式:大小写形式-除了第一个单词,所有单词第一个字母大写,其他字母小写。

1:类名使用 Pascal 大小写形式

public class HelloWorld{ ...}

2:方法使用 Pascal 大小写形式

public class HelloWorld{ void SayHello(string name) {  ... }}

3:变量和方法参数使用 驼峰式 大小写形式

Public int totalCount = 0;

4:根据类的具体情况进行合理的命名

以Class声明的类,都必须以名词或名词短语命名,体现类的作用。如:

Class Indicator {}

当类只需有一个对象实例(全局对象,比如Application等),必须以Class结尾,如

Class ScreenClass

当类只用于作为其他类的基类,根据情况,以Base结尾:

Class IndicatorBase

5:不要使用匈牙利方法来命名变量 (m_xxxx)

string m_sName; int nAge;

6:用有意义的,描述性的词语来命名变量

别用缩写。用name, address, salary等代替 nam, addr, sal

别使用单个字母的变量象i, n, x 等. 使用 index, temp等

用于循环迭代的变量例外:

string m_sName; int nAge;

7:文件名要和类名匹配

例如,对于类HelloWorld, 相应的文件名应为 HelloWorld.cs

8:接口的名称前加上I

interface ImyInterface   {……}

9:在私有成员变量前面加上m_。对于m_后面的变量名使用骆驼命名方法:(注意第五条)

public class SomeClass  
{  
    private int m_Number;   
}

二、 良好的编程习惯

1:避免使用大文件。如果一个文件里的代码超过300~400行,必须考虑将代码分开到不同类中。

2:避免写太长的方法。一个典型的方法代码在1~50行之间。如果一个方法发代码超过50行,应该考虑将其分解为不同的方法。

3:方法名需能看出它作什么。别使用会引起误解的名字。如果名字一目了然,就无需用文档来解释方法的功能了。

public class SomeClass   <br>{  <br>    private int m_Number;   <br>}

4: 一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小。

5:别在程序中使用固定数值,用常量代替。

6:必要时使用enum 。别用数字或字符串来指示离散值。

例如:正确

Public enum MailType {  Html,  PlainText,  Attachment }
public void SendMail (string message, MailType mailType)
{ 
       switch ( mailType ) 
       {  
              case MailType.Html:   
                   // Do something   
                   break;  
              case MailType.PlainText:   
                   // Do something   
                   break;  
              case MailType.Attachment:   
                   // Do something   
                   break;  
              default:   
                   // Do something   
                   break; 
        }
}

不正确:

        public void SendMail (string message, string mailType)
        { 
                    switch ( mailType ) 
                    {  
                               case "Html":   
                                         // Do something   
                                         break;  
                               case "PlainText":   
                                         // Do something   
                                         break;  
                               case "Attachment":   
                                         // Do something   
                                         break;  
                               default:   
                                         // Do something   
                                         break; 
                    }
         }

7:别把成员变量声明为 public 或 protected。都声明为 private

8:不在代码中使用具体的路径和驱动器名。 使用相对路径,并使路径可编程。

9:视情况使用StringBuilder替代String

String对象是不可改变的。每次使用System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。

在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类。

例如,当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提升性能。

10:所有的类成员变量应该被声明在类的顶部,并用一个空行把它们和方法以及属性的声明区分开

11:避免在同一个文件中放置多个类

12:一个文件应该只向在一个名称空间内定义类型。避免在一个文件中使用多个名称空间

13:避免写超过5个参数的方法。如果要传递多个参数,使用结构。

14:不要手动去修改任何机器生成的代码

15:只对那些亘古不变的数值使用const关键字,例如一周的天数。

16:避免显式指定枚举的值(不要直接给枚举赋值)

例如:正确

public enum Color   
{   
    Red,Green,Blue   
}

不正确

public enum Color   
{   
Red=1,Green=2,Blue=3   
}

17:避免为枚举指定一个类型

避免

public enum Color:long   
{   
Red,Green,Blue   
}

18:对于if语句,总使用一对{}把下面的语句块包含起来,哪怕只有一条语句也是如此。

推荐:

If(1 == 1)
{
       Console.WriteLine(“正确”);
}

不推荐:

If(1 == 1)
       Console.WriteLine(“正确”);

19:避免使用三元条件操作符。

20:避免显示类型转换。使用as关键字安全的转换到另一个类型。

Dog dog=new GermanShepherd();   
GermanShepherd shepherd=dog as GermanShepherd;  
if (shepherd!=null)   
{}

21:在使用一个对象、数组或代理之前,总要检查其是否为null

22:避免在接口中包含事件。

23:当使用抽象类的时候,提供一个接口。

24:使用String.Empty取代””

//避免  
string name=””;   
//正确  
string name=String.Empty;

25:使用条件方法来取代显式进行方法调用排除的代码(#if…#endif)

三、 注释

1: 文件头部注释

在代码文件的头部进行注释,标注出创始人、创始时间、修改人、修改时间、代码的功能,这在团队开发中必不可少,它们可以使后来维护/修改的同伴在遇到问题时,在第一时间知道他应该向谁去寻求帮助,并且知道这个文件经历了多少次迭代、经历了多少个程序员的手。
示例:


/******************************************************************************** 
 ** 作者: Eunge 
 ** 创始时间:2004-6-8 
 ** 修改人:Koffer 
 ** 修改时间:2004-12-9 
 ** 修改人:Ken 
 ** 修改时间:2005-01-29 
 ** 描述: 
 ** 主要用于产品信息的资料录入,… 
 *********************************************************************************/

我们甚至可以在这段文件头注释中加入版权信息、文件名、版本信息等。

2:函数、属性、类、公共变量注释

请使用///三斜线注释,这种注释是基于XML的,不仅能导出XML制作帮助文档,而且在各个函数、属性、类等的使用中,编辑环境会自动带出注释,方便你的开发。以protected,protected Internal,public声明的定义注释请都以这样命名方法。
例如:

/// <summary> 
 /// 用于从ERP系统中捞出产品信息的类 
 /// </summary> 
 class ProductTypeCollector 
 {
     /// <summary> 
     /// 保存C扫数据
     /// </summary> 
     public void SaveCScanData(){}
 }

3:/**/注释

不建议过多的使用此注释。

4:注释说明

注释应该只说明操作的一些前提假设、算法的内部信息等内容。

四、 异常处理

1:不要“捕捉了异常却什么也不做“。如果隐藏了一个异常,你将永远不知道异常到底发生了没有。

2:发生异常时,给出友好的消息给用户,但要精确记录错误的所有可能细节,包括发生的时间,和相关方法,类名等。

3:只捕捉特定的异常,而不是一般的异常。

4:不必在所有方法中捕捉一般异常。不管它,让程序崩溃。这将帮助你在开发周期发现大多数的错误。

5:不必每个方法都用try-catch。当特定的异常可能发生时才使用。比如,当你写文件时,处理异常FileIOException。

6:别写太大的 try-catch 模块。如果需要,为每个执行的任务编写单独的 try-catch 模块。 这将帮你找出哪一段代码产生异常,并给用户发出特定的错误消息

如果应用程序需要,可以编写自己的异常类。自定义异常不应从基类SystemException派生,而要继承于IApplicationException。

有好的建议,请在下方输入你的评论。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 动态规划 Leetcode 213. 打家劫舍 II

代码展示&#xff1a; class Solution {public int rob(int[] nums) {int nnums.length;return Math.max(nums[0]childRob(nums,2,n-2),childRob(nums,1,n-1));}public int childRob(int[]nums,int left,int right){if(left>right){return 0;}int nnums.length;//创建数组i…

Unity基础 物理系统 铰链关节 Hinge Joint

铰链关节是一种模拟物理系统中的连接方式&#xff0c;它允许两个物体围绕一个共同的轴点旋转。这种连接方式可以用于模拟门、摆钟、机器人手臂等各种物理运动。 Connected Body&#xff08;连接体&#xff09;&#xff1a;这是铰链关节连接的另一个刚体。通过设置这个属性&…

谷歌自研芯片秘辛首次曝光;黑客要价 10 万美元出售雷蛇源代码等数据;百川智能发布 Baichuan-13B大模型(提供源码)

2023年7月12日科技新闻要点&#xff01;10秒概览&#xff01; 1.科大讯飞&#xff1a;下半年 all in 星火大模型 2.百川智能发布 Baichuan-13B&#xff08;源代码和安装及训练教程作为福利在文章最后告诉获取方式&#xff09; 3.谷歌自研芯片秘辛首次曝光 4.黑客要价 10 万…

第二十五章:InnoDB的数据存储结构

第二十五章&#xff1a;InnoDB的数据存储结构 25.1&#xff1a;数据库的存储结构&#xff1a;页 ​ 索引结构给我们提供了高效的索引方式&#xff0c;不过索引信息以及数据记录都是保存在文件上的&#xff0c;确切说是存储在页结构中。另一方面&#xff0c;索引是在存储引擎中…

N天爆肝数据库——MySQL(3)

本篇文章&#xff0c;主要对DCL、 函数、 约束和多表查询进行知识总结和学习。 期待和大家一起学习进步。DCL DCL-介绍 数据控制语言&#xff0c;用来管理数据库用户、控制数据库的访问权限。DCL-管理用户 查询用户 USE mysql; SELECT * FROM user; 创建用户 CREATE US…

Overleaf论文投稿

1.Overleaf 具体投稿 一步一步教&#xff01;&#xff01;&#xff01;以Springer Nature为例 2.如何在overleaf上寻找会议或期刊的模板 LaTex期刊模板下载与使用

Mocha Pro 2023 v10.0.2(win/mac)无套路安装教程

Mocha Pro 2023 Mocha Pro是一款世界知名的软件和插件&#xff0c;用于平面运动跟踪、旋转描记、对象移除、图像稳定和PowerMesh有机扭曲跟踪。 Mocha的工具对于视觉效果和后期制作至关重要&#xff0c;在最近每一部获得奥斯卡最佳视觉效果提名的电影中都发挥了重要作用。了解…

天翎MyApps低代码平台案例分享—阿米检测设备管理系统

项目背景&#xff1a;阿米检测技术有限公司&#xff08;以下简称为“阿米检测”&#xff09;隶属于中国航天科技集团&#xff0c;是北京航天计量测试技术研究所下属全资公司&#xff0c;2018年由国家财政部正式发文批准成立。司转化航天高端技术&#xff0c;开展测量方法应用、…

【dij变形】牛客练习赛93 C

C-点权_牛客练习赛93 (nowcoder.com) 题意&#xff1a; 思路&#xff1a; 重要的是在松弛的时候要满足什么条件才开始松弛 这里是用两个点来松弛一个点 Code&#xff1a; #include <bits/stdc.h>//#define int long longusing namespace std;const int mxn1e510; co…

Android的内存泄漏分析

目录 1、内存详情 1.1、内存溢出 1.2 、内存泄漏 1.3、内存抖动 2、垃圾回收机制 2.1、垃圾回收算法&#xff08;标记--清除&#xff09; 2.2、垃圾回收算法&#xff08;标记--整理&#xff09; 2.3、复制算法 2.4、分代回收算法 3.GCRoot原理 3.1、可达性分析法…

VSCODE 设置同步network Error 问题

前言 这个问题等解决方法如下&#xff1a; 获取到github以及vscode-auth.github.com的ip&#xff0c;添加到host&#xff0c;随后使用命令行刷新host&#xff0c;重新认证即可 第一步&#xff0c;查看log文件&#xff0c; 打开 vscode&#xff0c;使用快捷指令ctrl(command)…

对象池介绍

对象池介绍 对象池是一种常见的优化技术&#xff0c;用于减少游戏运行时的内存分配和垃圾回收。对象池维护了一组已经创建的对象实例&#xff0c;这些对象可以被多次重复使用&#xff0c;而不需要每次都重新创建和销毁。对象池的主要优点是可以减少内存分配和垃圾回收的次数&a…

第一百零四天学习记录:C++核心:类和对象Ⅶ(五星重要)继承下

继承同名成员处理方式 1、访问子类同名成员&#xff0c;直接访问即可 2、访问父类同名成员&#xff0c;需要加作用域 #include<iostream> using namespace std; class Base { public:Base(){m_A 100;}int m_A;void func(){cout << "Base - func()调用"…

途乐证券-逆市拉升!这一板块超10股涨停

7月12日&#xff0c;A股商场全体走低&#xff0c;个股跌多涨少&#xff0c;厄尔尼诺的冲击波也“搅动”了A股商场&#xff0c;种业、虚拟电厂等概念股纷繁走强。轿车产业链个股继续活泼&#xff0c;超10股涨停。 2023年中期成绩预告仍如火如荼发表中&#xff0c;成绩“预喜”股…

SpringCloud入门实战(十三)Nacos服务注册与发现+配置管理详解

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我&#xff0c;不迷路 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术…

电脑网络最基本的常识简介(合集)

电脑网络最基本的常识简介 什么是HTML? HTML(Hyper Text Mark-up Language )即超文本标记语言&#xff0c;是 WWW 的描述语言&#xff0c;由 Tim Berners-lee提出。设计 HTML 语言的目的是为了能把存放在一台电脑中的文本或图形与另一台电脑中的文本或图形方便地联系在一起&a…

蚁群算法—ACA

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录 一、蚁群算法简介&#x1f353;1.ACA基本思想2.ACA基本原理3.ACA基本步骤 二、算法求解TSP问题&#x1f34e;1.导入数据2.计算城市间相互距离3.初始化参数4.迭代寻找最佳路径5.结果显示End 一、蚁群算法简介&a…

软件 - 配置安装 Photoshop 的 RID 独立运行版本

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131673004 Adobe Photoshop 是一款专业的图像处理软件,广泛应用于平面设计、摄影、插画、视频制作等领域,可以对各种格式的图片进行编辑、修饰、合成、优化等操作,创…

SpringBoot + Vue 实现酒店客房管理系统

目录 1 问题的提出 5 2系统开发的可行性研究 6 2.1 技术上可行性分析 6 系统现阶段的发展过程中&#xff0c;利用现有人力和物力是完全具备的能力开发出来 6 2.2 经济的可行性分析 6 2.3 操作可行性分析 6 3 需求分析 7 3.1 需求描述 7 3.2 功能需求分析 7 3.3 非功能需求分析…