编写高质量代码:改善C程序代码的125个建议
- 格式:pptx
- 大小:3.59 MB
- 文档页数:85
编写⾼质量代码改善C#程序的157个建议[动态数组、循环遍历、对象集合初始化] 软件开发过程中,不可避免会⽤到集合,C#中的集合表现为数组和若⼲集合类。
不管是数组还是集合类,它们都有各⾃的优缺点。
如何使⽤好集合是我们在开发过程中必须掌握的技巧。
不要⼩看这些技巧,⼀旦在开发中使⽤了错误的集合或针对集合的⽅法,应⽤程序将会背离你的预想⽽运⾏。
本⽂已更新⾄。
本⽂主要学习记录以下内容: 建议16、元素数量可变的情况下不应使⽤数组 建议17、在多数情况下使⽤foreach进⾏循环遍历 建议18、foreach不能代替for 建议19、使⽤更有效的对象和集合初始化16 在C#中,数组⼀旦被创建,长度就不能改变。
如果我们需要⼀个动态且可变长度的集合,就应该使⽤ArrayList或List<T>来创建。
⽽数组本⾝,尤其是⼀维数组,在遇到要求⾼效率的算法时,则会专门被优化以提升其效率。
⼀维数组也成为向量,其性能是最佳的,在IL中使⽤了专门的指令来处理它们。
从内存使⽤的⾓度来讲,数组具有以下特点: 1、数组在创建时被分配了⼀段固定长度的内存。
2、如果数组元素是值类型,则每个元素的长度等于相应的值类型的长度 3、如果数组的元素是引⽤类型,则每个元素的长度为该引⽤类型的IntPtr.Size。
4、数组的存储结构⼀旦被分配,就不能再变化。
⽽ArryaList是这样的: 1、ArrayList是链表结构,可以动态增减内存空间。
2、如果ArrayList存储的是值类型,则会为每个元素增加12字节的空间,其中4字节⽤于对象引⽤,8字节是元素装箱时引⼊的对象头。
⽽List<T>是ArrayList的泛型实现,它省去了拆箱和装箱带来的开销。
如果⼀定要动态改变数组的长度,⼀种⽅法是将数组转换为ArrayList或List<T>,如下⾯的代码所⽰:///定义⼀个⼀维数组int[] iArr = { 0,1,3,4,6,7,9};///将数组转换为ArrayListArrayList arrayListInt = ArrayList.Adapter(iArr);arrayListInt.Add(11);///将数组转换为List<T>List<int> listInt = iArr.ToList<int>();listInt.Add(11); 还有⼀种⽅法是⽤数组的复制功能。
第一部分语 法 篇本部分内容第1章 从C继承而来的第2章 从C到C++,需要做出一些改变第3章 说一说“内存管理”的那点事儿第4章 重中之重的类第5章 用好模板,向着GP开进第6章 让神秘的异常处理不再神秘第7章 用好STL这个大轮子第1章 从C继承而来的C和C++可以说是所有编程语言中关系最为紧密的两个。
在目标上,C++被定位为“a better C”;在名称上,C++有一个乳名叫做“C with classes”;在语法上,C更是C++的一个子集,C++几乎支持C语言的全部功能。
如果采用C++的方法来描述,以下方式恰如其分:class C{};class CPlusPlus :public C {};C++继承自C。
正是这种难以割舍的紧密联系使得C/C++程序员必须对C有所重视。
所以,本章就从C++的前身—C语言说起。
在开始这段学习旅程前,先分享一个只有程序员才明白的幽默:有一次,她开玩笑似地问他:“我在你心里排第几?”他回头微笑着摸了摸她的头,用手指比划了个鸭蛋。
她知道他在开玩笑,打了他一巴掌,尽管有些郁闷,但还是尽量避免流露出失望的神色。
其实,因为她是文科生,所以她并不知道:在程序员的眼中,所有的数组、列表、容器的下标都是从0开始的。
所以,我们的建议也从0开始。
建议0:不要让main函数返回void同C程序一样,每个C++ 程序都包含一个或多个函数,而且必须有一个函数命名为main,并且每个函数都由具有一定功能的语句序列组成。
操作系统将main作为程序入口,调用main函数来执行程序;main函数执行其语句序列,并返回一个值给操作系统。
在大多数系统中,main 函数的返回值用于说明程序的退出状态。
如果返回0,则代表main函数成功执行完毕,程序正常退出,否则代表程序异常退出。
然而在编写C++程序入口函数main的时候,很多程序员,特别是一些具有C基础的C++ 程序员时经常会写出如下格式的main函数:void main(){// some code ...}第1章 从C继承而来的 3上述代码在VC++中是可以正确编译、链接、执行的。
编程技巧:提高代码质量的十大方法编程是一项需要技巧和智慧的艺术。
写出高质量的代码是每个程序员都渴望实现的目标。
良好的代码质量不仅能提高软件的可维护性和可读性,还能减少错误和提高性能。
本文将介绍十种提高代码质量的方法,帮助程序员们写出更好的代码。
让我们一起来看看吧!1. 选择有意义的命名变量、函数和类的命名应具有清晰和有意义。
好的命名可以使代码更易读,降低开发和维护的难度。
避免使用单个字母或晦涩难懂的缩写作为命名,而是选择能够准确描述其用途的名称。
通过使用有意义的命名,可以使其他人更容易理解和使用你的代码。
2. 减少代码的冗余冗余的代码不仅浪费空间,还增加了维护和调试的难度。
避免重复的代码块,可以通过使用函数和类来提取公共代码,实现代码的重用性。
另外,使用循环和条件语句来替代重复的代码块,可以减少代码冗余。
冗余的代码往往也会增加错误的发生几率,因此减少代码的冗余对于提高代码质量非常重要。
3. 编写清晰的注释和文档良好的注释和文档可以帮助其他人更好地理解和使用你的代码。
在编写代码时,应当养成良好的注释和文档习惯。
对于每个函数和类,都应该编写清晰的注释,解释其功能和参数的含义。
此外,在代码中使用适当的注释,可以帮助其他人更好地理解代码的逻辑和设计思路。
4. 使用一致的代码风格一致的代码风格有助于提高代码的可读性和可维护性。
在开发项目中,应当约定好统一的代码风格,并且在整个项目中保持一致。
这包括缩进、命名规范、空格和换行等方面。
使用代码格式化工具可以帮助自动化这个过程,确保代码风格的一致性。
5. 编写可读性高的代码可读性是评估代码质量的一个重要指标。
可读性高的代码可以更容易被理解和维护。
为了编写可读性高的代码,应当遵循一些基本原则。
例如,使用有意义的变量名和函数名,避免过长的函数和复杂的嵌套结构,以及注释和文档的使用等。
通过编写可读性高的代码,可以大大提高代码的质量和可维护性。
6. 进行代码复审和单元测试代码复审和单元测试是确保代码质量的重要手段。
C语言中的代码优化技巧在C语言中,代码优化技巧是提高程序性能和效率的关键。
通过优化代码,可以在不改变程序功能的情况下,使程序运行更快、占用更少的内存空间。
下面介绍一些C语言中常用的代码优化技巧:1. 减少函数调用:函数调用是一种很消耗资源的操作,因为需要保存现场和恢复现场。
可以通过将多个函数调用合并成一个函数,减少函数嵌套的层数,避免过度的函数调用来提高程序的性能。
2. 使用适当的数据类型:在C语言中,选择适当的数据类型可以减少内存占用和提高运行速度。
比如使用整型数据类型int来代替浮点型数据类型float,可以减少内存占用和提高运行速度。
3. 避免使用过多的指针:指针操作虽然可以提高程序的效率,但是过多的指针操作会增加程序的复杂性和出错的可能性。
可以尽量减少指针的使用,使用数组或者结构体来代替指针操作。
4. 减少循环的次数:循环是程序中占用时间最多的部分,可以通过减少循环的次数或者优化循环体内部的代码来提高程序的性能。
5. 避免使用全局变量:全局变量会增加程序的耦合性和复杂度,可以尽量减少全局变量的使用,使用局部变量来代替全局变量。
6. 使用预处理器宏:使用预处理器宏可以在编译阶段进行代码替换,提高程序的性能。
可以将一些常量或者简单的函数用宏来替代,减少函数调用和代码量。
7. 减少内存拷贝操作:内存拷贝操作是一种消耗资源的操作,可以通过使用指针来避免过多的内存拷贝操作。
8. 编译器优化选项:编译器提供了很多优化选项来帮助优化代码,比如-O2、-O3等级别的优化选项可以提高程序的性能。
总之,代码优化是一个综合性的工作,需要综合考虑程序的结构、算法和编译器的优化选项。
通过合理的优化技巧,可以使程序更加高效和优化,提高程序的性能和效率。
希望以上介绍的C语言中的代码优化技巧能够帮助您优化您的程序。
1.记住阿姆达尔定律:∙func cost是函数func运行时间百分比,func speedup是你优化函数的运行的系数。
∙所以,如果你优化了函数TriangleIntersect执行40%的运行时间,使它运行快了近两倍,而你的程序会运行快25%。
∙这意味着不经常使用的代码不需要做较多优化考虑(或者完全不优化)。
∙这里有句俗语:让经常执行的路径运行更加高效,而运行稀少的路径正确运行。
2.代码先保证正确,然后再考虑优化∙这并不意味着用8周时间写一个全功能的射线追踪算法,然后用8周时间去优化它。
∙分多步来做性能优化。
∙先写正确的代码,当你意识到这个函数可能会被经常调用,进行明显的优化。
∙然后再寻找算法的瓶颈,并解决(通过优化或者改进算法)。
通常,改进算法能显著地改进瓶颈——也许是采用一个你还没有预想到的方法。
所有频繁调用的函数,都需要优化。
3.我所了解的那些写出非常高效代码的人说,他们优化代码的时间,是写代码时间的两倍。
4.跳转和分支执行代价高,如果可能,尽量少用。
∙函数调用需要两次跳转,外加栈内存操作。
∙优先使用迭代而不是递归。
∙使用内联函数处理短小的函数来消除函数调用开销。
∙将循环内的函数调用移动到循环外(例如,将for(i=0;i<100;i++)DoSomething();改为DoSomething(){for(i=0;i<100;i++){…}})。
∙if…else if…else if…else if…很长的分支链执行到最后的分支需要很多的跳转。
如果可能,将其转换为一个switch声明语句,编译器有时候会将其转换为一个表查询单次跳转。
如果switch声明不可行,将最常见的场景放在if分支链的最前面。
5.仔细思考函数下标的顺序。
∙两阶或更高阶的数组在内存中还是以一维的方式在存储在内存中,这意味着(对于C/C++数组)array[i][j]和array[i][j+1]是相邻的,但是array[i][j]和array[i+1][j]可能相距很远。
编程技巧:提高代码质量的十个技巧作为一个程序员,我们都希望能写出高质量的代码。
优秀的代码不仅可以提高程序的可读性和可维护性,还可以提高代码的性能和效率。
那么应该如何提高代码的质量呢?下面是我总结的十个编程技巧,希望对你提高代码质量有所帮助。
1. 命名规范良好的命名规范是编写高质量代码的基础。
一个好的命名能够清晰地传达变量、函数和类的用途和含义。
遵循命名规范可以让代码更易读、易懂。
所以,在编程过程中,我们要尽量避免使用无意义的变量名,而要使用有描述性的命名,避免使用缩写和单个字母作为变量名。
2. 注释和文档良好的注释和文档非常重要,可以使其他人更好地理解你的代码。
在编写代码时,适当地添加注释,解释代码的功能和实现逻辑,对于复杂的逻辑,还可以加入代码注释,方便后续的维护和修改。
此外,编写详细的文档也是十分重要的,它不仅能让其他人了解你的代码,也能帮助你自己更好地理清代码的思路。
3. 异常处理异常处理是编写高质量代码的关键之一。
优秀的代码应该能够处理各种可能的异常情况,并给出相应的错误提示。
合理地使用 try-catch 语句可以帮助我们捕获和处理异常,避免程序崩溃,增强代码的健壮性。
此外,要记得在 catch 块中处理异常,而不是简单地忽略它们,这样可以更好地排查问题。
4. 代码复用代码复用是提高代码质量的重要手段之一。
通过合理地设计和使用函数、类和模块等可以实现代码的复用。
这样不仅可以减少代码的重复,还可以提高代码的可读性和可维护性。
因此,在编写代码时,我们要尽量避免重复造轮子,而是要善于利用已有的代码资源。
5. 模块化设计模块化设计是编写可维护性高的代码的关键。
将代码分割成独立的模块,每个模块只负责解决一个问题,可以使代码更易于阅读、测试和维护。
通过合理的模块化设计,我们可以将复杂的问题简化成多个小问题,分而治之。
所以,在编写代码时,要注重模块的划分,保持模块间的内聚性和低耦合性。
6. 优化算法和数据结构编写高效的代码需要优化算法和数据结构的选择。
C 代码优化1. 重要的80-20规则不要忘记由经验确定的80-20 规则,它宣称一个典型的程序用80% 的时间执行20% 的代码。
这是一个重要的规则,因为它提醒你作为一个软件开发者的目标是识别出能全面提升你的程序性能的20% 的代码。
你可以用各种方式无限期地优化你的函数,但除非你将精力集中在正确的函数上,否则就是白白浪费精力。
2. 用指针运算代替数组索引这样做常常能产生又快又短的代码。
与数组索引相比,指针一般能使代码速度更快,占用空间更少。
使用多维数组时差异更明显。
下面的代码作用是相同的,但是效率不一样。
1. 数组索引2. f or(;;){3. a = array[t++];4. ……5. }1. 指针运算2. p = array;3. f or(;;){4. a = *(p++);5. ……6. }指针方法的优点是,array的地址每次装入地址p后,在每次循环中只需对p增量操作。
在数组索引方法中,每次循环中都必须根据t值求数组下标的复杂运算。
3. 查表(游戏程序员必修课)一个聪明的游戏大虾,基本上不会在自己的主循环里搞什么运算工作,绝对是先计算好了,再到循环里查表。
看下面的例子:旧代码:1. l ong factorial(int i)2. {3. if (i == 0)4. return 1;5. e lse6. return i * factorial(i - 1);7. }新代码:1. s tatic long factorial_table[] = {1, 1, 2, 6, 24, 120, 720 /* etc */ };2. l ong factorial(int i)3. {4. r eturn factorial_table[i];5. }如果表很大,不好写,就写一个init函数,在循环外临时生成表格。
4. 结构体成员的布局把长的类型放在短的前面, 可以避免内存的空洞.5. 提升循环的性能要提升循环的性能,减少多余的常量计算非常有用(比如,不随循环变化的计算)。
五个改善代码可维护性的实用建议改善代码可维护性是每个程序员都应该关注的问题。
在开发过程中,编写易于理解、修改和维护的代码是至关重要的。
本文将介绍五个实用的建议,帮助您提高代码的可维护性。
1. 保持代码简洁明了代码的可读性对于提高代码可维护性至关重要。
使用适当的命名规范、注释和缩进,使代码易于理解。
避免冗余的代码和不必要的复杂性,保持代码简洁明了。
同时,注意代码的组织结构,将功能相关的代码块进行逻辑分组,以便于后续修改和维护。
2. 使用有意义的命名变量、函数和类的命名应当具有描述性,并能清楚地表达其功能和用途。
避免使用不具备实际含义的名称,如单个字母或无意义的缩写,这会增加其他开发人员理解和修改代码的难度。
另外,遵循一致的命名规范,有助于提高代码的可读性和可维护性。
3. 模块化和重用代码将功能相关的代码模块化,使用函数、类和模块等方式进行封装,以便于重复使用和维护。
模块化的代码结构可以让开发人员更好地理解整个系统的结构和功能,同时也方便后续的修改和扩展。
避免代码的重复,可以使用函数库或公共模块来封装经常使用的功能,提高代码的重用性和维护性。
4. 编写清晰的文档良好的文档可以让其他开发人员更好地理解代码的功能和结构,有助于后续的维护工作。
编写注释、文档和说明,描述代码的输入输出、使用方法和重要逻辑,以便于他人理解和修改。
此外,及时更新文档,保持与代码的一致性,确保文档的准确性和可用性。
5. 引入自动化测试自动化测试是保证代码质量和可维护性的重要手段。
编写适当的单元测试、集成测试和功能测试,覆盖代码的各个部分,及时发现和修复潜在的问题。
测试用例不仅可以验证代码的正确性,还能提供一个安全的修改环境,确保修改代码不会对其他部分造成不可预料的影响。
通过以上五个实用建议,您可以改善代码的可维护性。
保持代码的简洁明了,使用有意义的命名,模块化和重用代码,编写清晰的文档,以及引入自动化测试,都能有效减少代码的复杂性,降低代码维护的成本,并提高开发效率和代码的可靠性。
C代码优化技巧详解代码优化是提高程序性能和效率的重要手段,对于C语言这样的系统编程语言尤为重要。
本文将详细介绍几种C代码优化技巧,帮助读者提升程序的执行效率和性能。
一、减少循环次数循环是编程中常用的结构之一,但是过多的循环次数会导致程序执行速度变慢。
因此,在编写C代码时,应尽量减少循环次数。
具体优化方法包括:1. 使用更有效率的循环结构,如for循环比while循环效率更高;2. 避免在循环内部声明大量变量,可以将其移到循环外部,减少变量的创建和销毁次数;3. 对于循环中的重复计算,可以使用临时变量保存结果,避免重复计算。
二、适当使用位运算C语言提供了丰富的位运算符,适当使用位运算可以提高程序的执行效率。
位运算包括按位与、按位或、按位取反等,其优点在于执行速度快。
在C代码中,可以通过位运算来替代一些简单的数学运算。
三、优化内存访问内存访问是程序性能的瓶颈之一,良好的内存访问方式可以提高程序的效率。
以下是一些优化内存访问的技巧:1. 使用局部变量代替全局变量,因为局部变量存储在栈上,访问速度更快;2. 使用数组代替指针,因为数组在内存中是连续存储的,访问速度更快;3. 减少内存访问次数,可以通过合并变量、减少内存占用等方式来实现。
四、避免浮点数运算浮点数运算相比整数运算,消耗更多的时间和资源。
因此,在C代码中应尽量避免使用浮点数运算,尤其在循环中使用。
可以通过一些技巧来避免浮点数运算,比如使用整数运算代替浮点数运算、使用移位运算等。
五、合理使用预处理指令C语言的预处理指令可以优化代码的编译过程,提高程序的执行效率。
在使用预处理指令时,需要注意以下几点:1. 尽量减少头文件的引用,只引用必要的头文件,避免编译器需要处理过多的代码;2. 合理使用条件编译语句,避免无用的代码被编译;3. 使用内联函数代替宏定义,内联函数有更好的类型安全性和代码可读性。
六、使用优化编译选项编译器提供了各种优化选项,可以根据不同的需求选择适合的优化选项。
C语言编写高质量代码设计思想在软件开发中,编写高质量的代码是非常重要的。
高质量的代码能够提高程序的性能、可维护性和可读性,从而更好地满足用户需求。
本文将介绍一些C语言编写高质量代码的设计思想。
1. 使用有意义的变量和函数命名在编写代码时,变量和函数的命名应该具有明确的含义,能够准确地反映其所代表的内容。
避免使用单个字母或者无意义的缩写作为命名,这样会给代码的理解和维护带来困扰。
例如,将“i”命名为“index”,将“num”命名为“count”等等。
2. 适当注释代码注释的作用在代码中起着非常重要的作用。
合理的注释能够帮助他人理解代码的目的和功能,提高代码的可读性。
在关键的代码段或者逻辑上加入注释,能够让代码更清晰易懂。
但是要注意,注释应该明确、简洁,并且不应重复已经清晰表达的代码。
3. 避免使用魔术数字魔术数字指的是在代码中直接出现的没有明确含义的数字。
这些数字使代码难以理解和维护。
应该将魔术数字定义为常量或者枚举类型,并给它们起一个有意义的名字。
这样不仅提高了代码的可读性,还方便了后续的修改和调试。
4. 使用适当的数据结构和算法在解决问题时,选择合适的数据结构和算法对程序的效率至关重要。
在C语言中,使用合适的数组、链表、队列、堆栈等数据结构,结合适当的算法,能够提高程序的性能和可维护性。
因此,在编写代码前,应该充分了解问题的特点,选择适当的数据结构和算法。
5. 错误处理与异常处理在编写代码时,要考虑各种可能出现的错误情况,进行错误处理和异常处理。
通过合理使用错误码、返回值、异常机制等方式,能够提高程序的容错性和稳定性。
同时,对于一些可能出现的异常情况,要做好相关的防范和处理措施。
6. 代码复用与模块化设计高质量代码的一个重要特征是可重用和模块化。
通过将功能相似的代码抽象出来,形成独立的模块,可以在不同的程序中进行复用。
模块化设计也能够提高代码的可读性和维护性,降低代码的耦合度。
因此,在编写代码时,应该善于封装和抽象,将代码划分为独立的模块。
代码设计方面的建议代码设计方面的建议代码设计是软件开发中非常重要的一个环节,好的代码设计可以提高软件的可维护性、可扩展性和可重用性。
以下是一些关于代码设计方面的建议。
一、遵循 SOLID 原则SOLID 是面向对象编程中常用的五个原则,分别为单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。
遵循这些原则可以使得代码更加清晰、易于维护和扩展。
二、使用设计模式设计模式是在软件开发中常用的一种解决方案,它提供了经过验证的解决方案,可以帮助我们解决各种常见问题。
常用的设计模式包括工厂模式、单例模式、适配器模式等等。
使用这些模式可以使得代码更加灵活、易于维护和扩展。
三、避免硬编码硬编码是指在代码中直接写入数值或字符串等数据,这样做会导致代码难以维护和扩展。
应该将这些数据定义为常量或配置文件中的参数,并且应该将它们集中管理。
四、避免过度设计过度设计是指在设计时考虑过多的细节和情况,导致代码变得复杂、难以理解和维护。
应该在保证代码质量的前提下,尽可能简化代码。
五、注重命名规范良好的命名规范可以使得代码更加易于理解和维护。
应该使用有意义的变量名、函数名和类名,并且要保证命名一致性。
六、避免重复代码重复代码是指在不同地方出现相同或相似的代码,这样做会导致代码冗余,难以维护。
应该将这些相同或相似的代码封装成函数或类,并且尽可能地复用它们。
七、注重异常处理良好的异常处理可以使得程序更加健壮和可靠。
应该捕获并处理所有可能出现的异常,并且要注意异常处理时不要影响程序正常执行。
总结以上是一些关于代码设计方面的建议,遵循这些建议可以使得我们编写出更加高质量、易于维护和扩展的软件。
当然,在实际编写中还需要根据具体情况进行调整和优化。
编程技巧:提高代码质量的五个方法在编程的世界里,编写高质量的代码是每个开发人员都渴望达到的目标。
高质量的代码不仅能够运行稳定,还易于理解和维护。
然而,要想编写出高质量的代码,并不是一件容易的事情。
在本文中,我将分享五个提高代码质量的方法,帮助您写出更优秀的代码。
1. 命名规范和注释在编写代码时,良好的命名规范是非常重要的。
变量、函数和类的命名应该具有描述性,能够清晰地表达其用途和功能。
遵循常见的命名约定,例如使用驼峰式命名法或下划线命名法,可以增加代码的可读性。
除了良好的命名规范,注释也是提高代码质量的重要因素之一。
注释能够帮助他人理解你的代码,也方便自己在以后的开发中迅速回顾代码逻辑。
在编写注释时,应该注重描述代码的目的、思路和功能,而不仅仅是重复代码本身已经表达的内容。
2. 单一职责原则单一职责原则是面向对象编程中的重要原则之一。
它要求每个类或函数只负责一个明确的功能或任务。
将功能拆分成小而独立的模块,可以提高代码的可读性和可维护性。
当一个类或函数过于复杂,承担了过多的责任时,往往会导致代码难以理解和修改。
因此,在编写代码时,应该尽量遵循单一职责原则。
当一个类或函数变得过于庞大时,可以考虑将其拆分成多个小的模块,每个模块只负责一个明确的功能。
3. 异常处理与错误处理异常处理是编程中不可或缺的一部分。
良好的异常处理机制可以提高代码的健壮性和可靠性。
在编写代码时,应该充分考虑可能出现的异常情况,并在合适的地方进行捕获和处理。
在处理异常时,应该遵循一些常见的最佳实践。
首先,应该根据具体的异常类型进行捕获,而不是使用一个通用的异常处理块。
这样可以使得代码更加可控,同时也能够提供更准确的错误提示信息。
此外,错误处理也是很重要的一部分。
当出现错误时,应该及时向用户提供明确的错误信息,帮助用户理解并解决问题。
合理的错误处理可以提高用户体验,同时也有助于定位和修复问题。
4. 测试和调试测试和调试是保证代码质量的重要手段。
改善C#程序,提⾼程序运⾏效率的50种⽅法 ⼀、⽤属性代替可访问的字段 1、.NET数据绑定只⽀持数据绑定,使⽤属性可以获得数据绑定的好处; 2、在属性的get和set访问器重可使⽤lock添加多线程的⽀持。
⼆、readonly(运⾏时常量)和const(编译时常量) 1、const只可⽤于基元类型、枚举、字符串,⽽readonly则可以是任何的类型; 2、const在编译时将替换成具体的常量,这样如果在引⽤中同时使⽤了const和readonly两种值,则对readonly的再次改变将会改变设计的初衷,这是需要重新编译所更改的程序集,以重新引⽤新的常量值。
3、const⽐readonly效率⾼,但失去了应⽤的灵活性。
三、is与as 1、两者都是在运⾏时进⾏类型的转换,as操作符只能使⽤在引⽤类型,⽽is可以使⽤值和引⽤类型; 2、通常的做法是⽤is判断类型,然后选择使⽤as或强类型转换操作符(⽤operater定义的转换)有选择地进⾏。
四、ConditionalAttribute代替#if #endif条件编译 1、ConditionalAttribute只⽤于⽅法级,对其他的如类型、属性等的添加都是⽆效的;⽽#if #endif则不受此限制; 2、ConditionalAttribute可以添加多个编译条件的或(OR)操作,⽽#if #endif则可以添加与(AND)[这⾥可以完全定义为另⼀个单独的符号]; 3、ConditioanlAttribute定义可以放在⼀个单独的⽅法中,使得程序更为灵活。
五、提供ToString()⽅法 1、可以更友好的⽅式提供⽤户详细的信息; 2、使⽤IFormatter.ToString()⽅法提供更灵活的定制,如果添加IFormatProvider 和ICustomFormatter接⼝则更有意义的定制消息输出。
六、值和引⽤类型的区别 1、值类型不⽀持多态,适合存储应⽤程序操作的数据,⽽引⽤则⽀持多态,适⽤于定义应⽤程序的⾏为; 2、对于数组定义为值类型可以显著提⾼程序的性能; 3、值类型具有较少的堆内存碎⽚、内存垃圾和间接访问时间,其在⽅法中的返回是以复制的⽅式进⾏,避免暴露内部结构到外界; 4、值类型应⽤在如下的场景中:类型的职责主要是⽤于数据存储;公共接⼝完全由⼀些数据成员存取属性定义;永远没有⼦类;永远没有多态⾏为。