读 构建高质量的C#代码

本文探讨了在C#开发中构建高质量代码的关键准则和实践,包括语句控制、异常处理、设计模式、类与方法的设计、代码调试和重构等方面。强调了模块化、可读性和可维护性的重要性,并提供了各种最佳实践示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在实际的项目开发过程中,每一个组件或模块都可以拿来作为单独的一块系统的学习,比如:异常处理、流操作、配置管理、基础代码库、通用代码处理、静态资源管理、代码调试(高级调试)、数据处理、编码习惯、高质量代码的准则、文件 网络操作、日志记录等,组件和模块逐步细化 持续构建成整个软件系统,不管是web开发、客户端还是手机等其他应用类软件,模块化和多层架构都是不可少的。下面记录了一些代码的准则和凌乱的知识清单,看书时记录的一些关键字,没有梳理清楚写出来,有的还只是标题 。详细的请参照: 《构建高质量的C#代码》 曹华宇 这本书

一、语句控制
if语句
1、将最常见的条件放到第一个if语句后,这样代码的逻辑关系会更直观;
2、对于非常复杂的逻辑判断可以考虑用一个方法来替换;
3、考虑到条件判断的每一种情况;
4、对于有一个条件而有多个结果的情况 使用switch代替if;
5、嵌套使用中 处理完一个语句后注意适时退出;

switch语句
1、跳出循环break,直接退出时用return语句;
2、case  ...case 保证每一个case语句都能够准确贯穿或结束;
3、按一定的顺序排列每一个值,比如按照数字、字母的顺序或按照数字可能出现的频率,如下:
case 1:
case 2:
...

todo
break;
4、应使用defaul语句处理所列值之外的情况,比如默认处理方式、处理异常等;


while语句
1、防止无限循环;
2、再循环体内注意条件的变化,确保能够结束循环;
3、若要使用无限循环应保证在某一个条件时能够终止循环;



软件开发的一般流程
1、获取用户需求并逐步细化,找到行业用户;
2、正确设计架构
当确认用户需求后,还需要熟悉用户的计算机环境、平台、内部网络,综合业务流程进行软件的架构设计,这还包括:基本功能代码库、通用代码库、业务流程代码库、数据管理模式等;
3、编写高质量的代码并持续构建;
4、进行完整有效的测试并进行高质量的集成;
5、保留代码记录,使用项目文档、代码注释、代码管理工具如svn或git;
6、项目跟进与代码整理,原则:正确性、稳定性、高性能;
7、模式化相同或相似类型项目的开发,有效提高开发效率,应充分利用基础代码和软件架构来实现高质量专业化的软件。


高质量代码准则:
1、可阅读
2、可维护性  (注释你的代码、重构你的代码)
3、用实践证明一切
4、参照msdn帮助文档



代码的进化
代码都是由无到集成,如下:
无->有->基础代码->代码单元->组件{对象、类、接口、集合 }->代码集成->架构->整个软件系统

设计模式:对开发中不断出现的问题、相同不同的问题进行总结、实践整理出来的一系列的相对应的解决方案。借助设计模式的特点来提高代码的质量。

改进代码的过程:
1、实现功能
2、备份代码
3、找出一个不足的地方,尝试新的设计方案比如去除应用去除模式
4、验证合理性和有效性


C#预处理
C#代码的组织形式,namespace 、.cs文件、类文件中有方法 属性 字段等,类中的代码才是最终要执行的;
项目中的property文件 ,有关项目的属性、参数设置如启动资源管理、编译设置等


迭代器模式
提供一种方法顺序访问集合中的各个元素,而又不需要暴露该对象的内部表示,即是实现IEnumable接口。
使用者无须了解内部即可遍历或处理这些集合成员

迭代器和枚举器可以参照:System.Collection  下的IEnumable  IEnumberator
system.collection.Generic 下的集合Ienumable<T>  IEnumberator<T>


模板方法模式
主要功能就是制定一系列算法的结构,然后由不同的子类分别实现这些算法,使用者可以使用相同的方法使用这些组件  ,以减少学习成本比如ADO.net下的Command类,如下图:



适配器模式
创建一个适配器组件作为一个“中间人” 它将提供接口转换功能,使两个不相关或不兼容的组件可以一起工作,比如手机充电器、SqlDataAdapter类等
可以参照微软的SqlDataAdapter、OracleDataAdapter、OledbAdapter等


适配器就是用于做接口转换操作,它本身也可以做具体的工作


异常处理
1、try  catch finally ,发生异常且无return突然中断时,finally最终都要执行的,内做一些相同的操作比如清理工作、文件、流关闭等
2、throw语句 向上层抛出异常,外层无catch捕获时只能由系统捕获异常了
3、异常分为两大类,可以预知的错误、真正的异常情况;Exception类是所有异常类的基类,无特殊情况下又是可预知类异常,为了解异常的详细信息使用具体的异常类进行捕获;
4、项目中使用统一的异常处理机制
在一定规模的软件项目中,随心所欲的处理异常的形式可能会带来代码上的混乱,并且导致难以阅读和调试,应该使用统一的机制,考虑以下几个问题:
(1)信息的呈现方式,winform中可以是直接message.box提示,web中就不支持这种,在不同的项目中使用合适的方式呈现给用户;
(2)正确的处理用户的信息
(3)统一的异常处理方法,可以大量重用代码,便于维护


代码调试
1、代码块先确定起始点终止点,在填写语句块
2、代码层次要清晰,复杂的逻辑处理超过一个屏的代码段不是很容易就能对应上,可以统一的在结束处加上注释;
3、代码调试,F11,F10,断点条件,使用即时调试窗口,监视等查看运行结果
4、添加测试代码,使用输出或提示方法,比如:Console.Write、alert,messagebox等,实现一个功能块时实例化一个对象并进行测试;做单元测试


类的作用
1、算法和逻辑的封装,隐藏细节 封闭 安全
2、模块化设计将程序代码和功能化整为零
3、模拟现实世界的操作方式
4、有利于代码的重复使用
5、创建复杂的数据类型,对逻辑封装简化操作
6、对功能代码进行分类包装


实例化类时需要初始化操作,销毁对象时需要释放清理操作,分别对应类中的构造函数和析构函数


构造函数链
前提:构造函数有很多重载,且都有初始化等重复操作,可以使用函数链处理
1、创建最完整的构造函数,并完成初始化操作;
2、创建其他参数列表的构造函数,并继承最完整的那个,对多出来的参数使用一个合适的默认值;
举例:  
 class human
   {
       string name;
       int age=0;
       public human(string name,int age)
        {
           this.name=name;
           this.age=age;
        }
        public human(string name):this(name,0){}
        public human(int age):this("",age)
   }
与
 class human
   {
       string name;
       int age=0;
       public human(string name,int age)
        {
           this.name=name;
           this.age=age;
        }
        public human(string name)
       {
           this.name=name;    
       }
        public human(int age)
       {
           this.age=age  
       }
   }
等价。


方法
1、方法的参数有值类型、引用类型、输出参数、参数数组
值类型的参数,使用过程中,将在方法内复制实参的数值进行处理 而不是直接操作实参的数据;
引用类型的参数则会直接操作参数的实参(即操作地址)

引用类型的参数和输出参数基本上是一样的,在调用时都会直接操作实参的地址,不同的是引用参数需要赋初始值,输出参数使用的场景:一个方法只能返回一个结果,但是还需要返回另一个结果时;

参数数组,比如控制台应用程序的入口函数的参数,方法的参数类型是一样的,只是数量上不一样,可以使用params + 数组(如string[]),参数数组应该放在所有参数的后面

  高质量方法的准则
1、起个好名字
2、参数也要有一个好名字
3、参数不宜过多,过多的情况下:(1)使用方法重载,(2)将参数包装成一个结构或类,使用时传递结构变量或对象
4、合理使用引用参数和输出参数,试想随便传过去一个参数,结果未知,造成方法不安全性,慎用
5、防御性编程,对入方法内的参数进行合法性检查
6、功能最小化,一个方法只做一件事


静态类
使用场景:创建功能性代码库,即对一些功能性的代码进行封装,很少变化的代码

高质量类准则
1、功能最小化
2、成员访问性最小化,应只为使用者提供最小功能接口
3、防御性编程,不要对使用者有任何假设
4、检查你的代码,即测试

重构:能够随时随地检查和分析你的代码,通过不断的重构来改进和优化代码,重要的是用实践来测试和验证改进的合理性、正确性、有效性

继承
作用:通过继承实现代码的复用最大化的目的,避免大量代码的重复书写;对一系列功能相同或相似的类的结构和功能进行规范,实现代码结构标准化

主要特点之一:可以对类的功能进行扩展

1、子类中使用基类同名的成员使用new进行隐藏
隐藏的方法可以使用关键字base/this来进行调用
2、virtual关键字修饰的成员称为虚成员,与隐藏不同,重写的只能是类的方法、属性、索引器、事件,隐藏可以是类的各种成员;
由于pdf太大,此处给出链接地址:https://pan.baidu.com/s/1O3WN_xe2S2wcBOF33K0dfQ,如果失效请留言 作为软件的基石,代码的质量决定了最终产品的质量,本书从这一点出发,介绍了高质量c#代码的成就过程,即从基础代码到软件结构,以及不断优化和重构的过程。 《构建高质量c#代码》主要内容包括c#的基本语法、结构与应用特点,常用开发资源与技术要点,设计模式在c#中的应用等,以及特别重要的一点,即我们应该养成良好的开发习惯,不仅要注重技术细节,还要从更宽阔的视野角度来重新审视代码构建工作。 无论你是c#初学者,还是正在应用c#开发者,如果你关注代码的质量,愿意进一步提高软件项目的质量,本书能为你提供帮助。 构建高质量c#代码目录: 第1章 开启c#之旅 1 第2章 处理数据 21 第3章 控制程序流程 69 第4章 处理异常 93 第5章 数组 106 第6章 结构 124 第7章 枚举 130 第8章 类 135 第9章 类的继承 170 第10章 接口 188 第11章 委托与事件 197 第12章 命名空间 207 第13章 泛型 217 第14章 运算符重载 221 第15章 资源同步与自动清理 226 第16章 关于c#的其他主题 235 第17章 代码的进化 251 第18章 策略模式 266 第19章 工厂方法模式 285 第20章 抽象工厂模式 304 第21章 生成器模式 319 第22章 单件模式 332 第23章 观察者模式 341 第24章 享元模式 359 第25章 组合模式 369 第26章 装饰者模式 378 第27章 状态模式 391 第28章 桥接模式 406 第29章 软件开发之路 420 附录a 设计模式名录 426
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值