Effective C# 摘录(5) - 使用框架

简介:

35.重写函数优于事件处理器。
   Prefer Overrides to Event Handlers。
   e.g.:实现Form实例时,选择重写OnMouseDown()方法而不是添加事件句柄OnMouseDown()。使用事件有更大的伸缩性,可以在一个事件上添加多个句柄;当有一个派生类中只有一个函数来处理一个事件时,最好用重载太提高可维护性。


36.合理使用.NET运行时诊断。
   Leverage .NET Runtime Diagnostics。
   System.Diagnostics.Debug, System.Diagnostics.Trace和System.Diagnostics.EventLog类可以在程序运行时创建诊断信息。Trace类是由预处理符TRACE进行控制;Debug类是由DEBUG预处理符进行控制;EventLog类可以写一些系统日志,EventLog类不支持运行时配置,但可以把它封装到一个统一的简单接口中。

37.使用标准配置机制。
   Use the Standard Configuration Mechanism。
   在WinForm应用程序中,每个应用程序域最多只有一个应用程序程序配置文件,默认的配置文件应该与应用程序位于同一个目录中,而且以<应用程序名>.<扩展名>.config来命名。Web应用程序相对而言就比较灵活,每个目录都可以有一个自己的配置文件,以web.config来命名。

38.定制和支持数据绑定。
   Utilize and Support Data Binding。
   使用数据绑定比自己写代码要简单得多;在对文字元素通过属性来显示时,尽可能的使用数据绑定而不是显式赋值;在WinForm中,可以对同步的对绑定在多控件上的数据进行相关数据源的检测。.Net框架支持把一个对象的属性映射到控件的属性上(e.g:textBoxName.DataBindings.Add("Text",myDataValue, "Name");可以把textBoxName控件的“Text”属性上绑定了MyDataValue对象的"Name"属性。)。

39.使用.NET验证。
   Use .NET Validation。
   Web应用程序应该在浏览器上进行数据验证,一般是使用JavaScript,一些Web验证控件在生成HTML页面中生成一些JS代码,当每一项输入时,不用每次返回数据到服务器上。但这还不够,我们还是要在服务器端做一些额外的验证,以免受到程序式的攻击。WinForm中用户的输入可以直接用C#代码来验证,所有的Windows控件都是可验证的,一般使用属性访问时的异常来指示非法的输入。

40.根据需要选用恰当的集合。
   Match Your Collection to Your Needs。
   访问多维数组比访问锯齿数组的效率高,访问多维数组时编译器在数组的每个维上是使用的是指针算法,而锯齿数组则要为每个一维数组查找正确的(指针引用)值。
   ArrayList的效率和数组差不多,其优点是可以在运行时动态调整容量大小;队列(Queue)和栈(Stack)是在System.Array类上提供了特殊的接口,它们的内部存储都是基于数组的,修改容量大小时同样会带来性能损失;队列的默认大小是32(0x20,乘2增长),而栈的默认大小是10(乘2增长),ArrayList默认是0(0-4-8-16……乘2增长);
   ListDictionary类用键/值对方式实现了单向链表;
   SortedList 和Hashtable都包含键/值对,SortedList以键进行排序,提供了基于键的有序迭代;而Hashtable在给定的键上进行查找时更快,可以通过键的散列值进行查找(O(1)算法);HashTable的默认大小为11,SortedList的默认大小为0(0-16-32……乘2增长);
   BitArray存储位数组,它是以整数的数组来存储数据的;不要用它来替换一般的图和Boolean数组;
   CollectionBase和ReadOnlyCollectionBase提供了列表和向量结构的基类,DictionaryBase提供了键/值对应的基类,DictionaryBase类是建立在Hashtable上的,它的性能与Hashtable是一致的;
   定长buffer使得我们可以在unsafe结构里声明C风格的数组(e.g:unsafe struct MyClass{public fixed int x[5];}),其主要应用在托管代码和非托管代码互操作的情况,除此之外,我们一般使用托管数组。


41.优先选择DataSet,而不是使用自定义结构。
   Prefer DataSets to Custom Structures。
   如果我们要创建的集合是一个基于某些算法的、对性能要求严格的集合,或者必须有轻便的格式,则我们就要使用自定义结构,否则最好使用DataSet,尤其是类型化的DataSet。


42.利用特性简化反射。
   Utilize Attributes to Simplify Reflection.
   特性可以申明运行的意图,通过使用特性来标记一个元素,可以在运行时指示它的用处以及简化查找这个元素的工作(通过反射来判断类或成员上是否应有了某些特性,进而在实际运行中进行配置);通过使用特性来标记意图,就把大量的责任从开发者身上移到了编译器身上。

43.避免过度使用反射。
   Don't Overuse Reflection.
   使用反射,一个应用程序可以通过添加新的组件来更新功能,实现可动态配置的软件;但同时也带来安全性的问题(成员调用的参数和返回值是以System.Object类型存在的,我们必须在运行时确保这些类型是正确的)。反射应该只在某些调用目标不能清楚的用接口表示时才使用(e.g:.Net的数据绑定)。很多常规情况下很少用反射,而是使用类厂、委托以及接口来创建代码,这可以产生出更容易维护的系统。


44.为应用程序创建特定的异常类。
   Create Complete Application-Specific Exception Classes.
   让你的用户在写catch语句来处理错误时更简单,我们通常要自己创建不同的异常类。当且仅当对于错误有不同的行为要处理时,我们才应该创建不同的异常类(从ApplicationException继承而不是从Exception继承);可以通过提供所有基类支持的构造函数,来创建全功能的异常类;还可以使用InnerException属性来承载底层错误条件的所有错误信息。

 
文章来源:http://blog.csdn.net/happyhippy/archive/2007/04/09/1557696.aspx


本文转自Silent Void博客园博客,原文链接:http://www.cnblogs.com/happyhippy/archive/2007/04/09/710932.html,如需转载请自行联系原作者

相关文章
|
10天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
2月前
|
算法 BI API
C#/.NET/.NET Core优秀项目和框架2024年1月简报
C#/.NET/.NET Core优秀项目和框架2024年1月简报
|
8月前
|
开发框架 .NET C#
C#/.NET/.NET Core优秀项目和框架精选(坑已挖,欢迎大家踊跃提交PR或者Issues中留言)
C#/.NET/.NET Core优秀项目和框架精选(坑已挖,欢迎大家踊跃提交PR或者Issues中留言)
143 1
|
3月前
|
数据采集 开发框架 JavaScript
C#/.NET/.NET Core优秀项目和框架2023年12月简报
C#/.NET/.NET Core优秀项目和框架2023年12月简报
|
4月前
|
开发框架 数据可视化 C#
C# | 上位机开发新手指南(三)框架
在上位机开发中,Windows Forms是使用最广泛的C#框架之一。Windows Forms是.NET Framework中的一个GUI框架,提供了丰富的GUI控件和易于使用的编程模型,可以快速开发Windows桌面应用程序。Windows Forms已经存在多年,并且在.NET Framework中得到广泛的支持和优化,因此在上位机开发中得到了广泛应用。除此之外,随着.NET Core的不断发展,越来越多的开发人员开始使用跨平台的C#框架进行上位机开发,例如使用Electron或Avalonia等框架开发基于Web技术的桌面应用程序。
163 0
C# | 上位机开发新手指南(三)框架
|
4月前
|
Rust 算法 C#
C#/.NET/.NET Core优秀项目和框架2023年11月简报
C#/.NET/.NET Core优秀项目和框架2023年11月简报
|
6月前
|
开发框架 API C#
C#/.NET/.NET Core优秀项目和框架精选(23年10月更新,欢迎大家踊跃提交PR一起完善让优秀的项目和框架不被埋没)
C#/.NET/.NET Core优秀项目和框架精选(23年10月更新,欢迎大家踊跃提交PR一起完善让优秀的项目和框架不被埋没)
160 0
|
6月前
|
JavaScript C# 数据安全/隐私保护
C#/.NET/.NET Core优秀项目和框架2023年9月简报
C#/.NET/.NET Core优秀项目和框架2023年9月简报
|
7月前
|
JavaScript 小程序 API
C#/.NET/.NET Core优秀项目和框架8月简报
C#/.NET/.NET Core优秀项目和框架8月简报
|
7月前
|
Oracle 架构师 关系型数据库
C#反射应用之实现动态可配置可扩展框架的简单示例
C#反射应用之实现动态可配置可扩展框架的简单示例