深入理解C#:15个实用C#编程技巧总结

C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。

同时。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

本文整理了C#开发和使用过程中的15个小技巧,希望能对大家的实际开发带来真正的方便。

1、使用StringBuilder代替使用string 连接符 "+"

说明:String类对象是不可变的(只读),一旦创建该对象,就不能修改该对象的值。

对象String对象的重新赋值,本质上是重新创建了一个String对象并将新的值赋值给该对象。如果字符串存在较多次的拼接时候,最后使用StringBuilder类,需要引用命名空间 System.Text。

该类不是创建新的对象,而是通过Append、Insert、Remove等方法对字符串直接进行操作,最后通过ToString方法返回操作结果。从而避免创建大量对象,造成资源浪费、性能降低。

不要这样写:

推荐这样写:

2、用foreach 代替 for 循环

如果是可以使用foreach的时候,尽量用foreach,而不是 for。前者的效率比后者要高很多。

3、使用HashTable 代替其他字典集合类型(如 StringDictionary、NameValueCollection),存放少量数据的时候可以使用HashTable。

4、避免使用ArrayList

因为ArrayList使用的时候存在装箱、拆箱会造成性能的损失,可以用泛型来代替。

5、如果是字符进行比较的时候可以采用String.Compare,它会忽略大小写进行比较,而不要使用UpperCase、Lowercase转换后进行比较。

6、如果只是从xml对象中读取数据,可以用只读的XPathDocument代替XMLDocument,可以提高性能。

7、C#捕获异常的时候,不要使用通用的System.Exception。可以根据程序逻辑考虑可能出现的异常进行控制。

8、要避免在循环体内声明变量,如果可以的化,最好放在循环体外声明,在循环体内初始化。

9、采用using和try/finaly来做资源清理。

10、不要使用异常(Exception)来控制程序的流程。因为捕获异常对性能的损耗很大,最好不要用异常去控制程序的流程。

11、使用值类型的ToString方法避免装箱操作。

因为值类型到引用类型会造成性能的损耗,所以使用值类型的ToString方法可以避免装箱造成的性能损耗。

12、避免滥用反射,反射也是比较浪费性能的操作

当使用反射来调用类型或者触发方法,或者访问一个字段或者属性是,CLR需要做很多工作:校验参数、检查权限……所以非常耗时,因此这样的情况下要尽量避免反射的使用。

13.使用using语句进行别名,这个方法适合针对结构体。

因为很多时候编程上需要做Win32平台相关的一些工作,比如我要读取一个Unicode字符,但C#并没有双字Word类型,如果我们要支持双字,那么就需要自己定义类或者结构体,但实际上在C++里面,双字实际上是unsigned short,也就是说我们可以用UInt 16来实现对Word关键字的支持,但这里有一个小小的纠结,那就是我知道Word是Unsigned Int16,但是能不能定义成Word呢?这样方便我们记忆啊。

但是有的,这时候我们只需要使用using语句就可以了。做法是这样子的:

这样就可以使用Word关键字声明变量了。

14.定义值类型时,它的大小不要超过16字节,否则影响性能(频繁复制时),要么改为使用引用类型,要么让它按ref引用传递。

15.字符串操作

●字符串字面量、字符串常量,直接用"+"相连效率高,因为:string str = "srf"+"ttt"+"ccc";会直接编译成string str = "srftttccc";,同样适用于字符串常量。

●尽量避免对变量的装箱:字符串+变量,较好的做法是:字符串+变量.ToString()

●频繁操作字符串时用StringBuilder,并制定足够大的容量,而string.Format("{0}{1}{2}",str1,str2,str3);内部也是用StringBuilder。

C#的开发是一个长期的工作,从基础开始,把握好一些技巧的应用,相信通过你的努力,一定能开发出有创意的C#程序。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第21章 打印与报表技术 579 21.1 报表设计技术 580 0994 如何快速创建水晶报表 580 0995 如何编写带图片的报表 582 0996 如何使图片成为整个报表的背景 583 0997 如何设置水晶报表中节的背景图片 583 0998 如何设置水晶报表中节的背景色 584 0999 如何设置水晶报表的页面 584 1000 如何在报表中添加节 584 1001 如何在报表中移动节的顺序 585 1002 如何在报表中合并节 585 1003 如何在报表中册除节 585 1004 如何在报表中显示与隐藏节 586 1005 如何设置多列样式报表 586 1006 如何设置报表中节的高度 587 1007 如何设置报表的摘要信息 587 1008 如何设置报表的打印日期与时间 587 21.2 报表格式化类对象技巧 588 1009 如何在报表中使用文本对象 588 1010 如何移动对象操作 588 1011 如何对齐多个对象 589 1012 如何使用公式字段 589 1013 如何在报表中使用线 590 1014 如何在报表中使用方框 590 21.3 报表数据排序与分组技巧 591 1015 如何排序报表数据 591 1016 如何报表数据分组 591 1017 如何报表中筛选数据 592 1018 如何对分组报表中的页码进行设置 592 21.4 报表的应用技巧 593 1019 如何在水晶报表中使用交叉表 593 1020 如何在水晶报表中使用子报表 594 1021 如何动态显示子报表 596 1022 如何删除子报表 597 1023 如何在报表中计算百分比 597 21.5 Windows打印控件应用技巧 599 1024 如何使用PrintDocument控件打印窗体数据 599 1025 如何使用PrintPreviewContronl控件预览 599 1026 使用PrintPreviewDialog对话框 600 1027 如何使用PrintDialog对话框打印 601 1028 如何使用PageSetupDialog对话框设置页面 601 1029 如何使用PrintDocument控件打印文本文件 602 第22章 C#高级应用开发 605 22.1 线程的使用 606 1030 如何开始一个线程 606 1031 如何结束一个线程 606 1032 如何使线程休眠 606 1033 如何挂起一个线程 606 1034 如何判断线程的状态 606 1035 如何实现线程的同步 607 1036 如何避免死锁 607 22.2 .NET 2.0的新特性 607 1037 如何使用泛型 607 1038 如何使用匿名方法 608 1039 如何使用迭代器 609 1040 如何使用分部类 610 22.3 C#WebService 610 1041 建立SQL Server返回数据集WebService 610 1042 利用WebService传送图片 611 22.4 文件监视 611 1043 如何监视文件的创建 611 1044 如何监视文件的改变 612 1045 如何监视文件的重命名 612 1046 如何监视文件的删除 613 22.5 C#高级应用 613 1047 如何将聊天程序做成Windows服务 613 1048 COM+服务解决同时访问大量数据并发性 615 1049 COM+服务实现银行转账系统 617 1050 如何用Remoting技术传送文件 619 1051 大规模数据访问时缓解服务器压力 620 第23章 硬件及相关开发技术 623 23.1 语音卡、IC卡、神龙卡的使用 624 1052 利用语音卡拨打电话 624 1053 客户来电查询系统 625 1054 向IC卡中写入数据 626 1055 从IC卡中读取数据 627 1056 利用IC卡制作考勤程序 628 1057 利用神龙卡制作练歌房点歌程序 629 23.2 串口技术与加密狗技术 631 1058 使用串口传输数据 631 1059 通过串口控制对方计算机 631 1060 密码写入与读出加密狗 633 1061 利用加密狗制作登录程序 634 1062 利用条形码销售商品 635 23.3 其他 636 1063 简易摄像头程序 636 1064 超市摄像头定时监控系统 638 1065 利用短信猫收发短信息 639 1066 利用短信远程关闭计算机 641 1067 短信息采集烟草销售数据 643 第24章 网络开发相关技术 645 24.1 Windows服务控制 646 1068 如何暂停IIS的默认网站 646 1069 如何继续IIS的默认网站 646 1070 如何启
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值