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,如需转载请自行联系原作者

相关文章
|
6月前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
196 1
|
27天前
|
测试技术 C# 数据库
C# 单元测试框架 NUnit 一分钟浅谈
【10月更文挑战第17天】单元测试是软件开发中重要的质量保证手段,NUnit 是一个广泛使用的 .NET 单元测试框架。本文从基础到进阶介绍了 NUnit 的使用方法,包括安装、基本用法、参数化测试、异步测试等,并探讨了常见问题和易错点,旨在帮助开发者有效利用单元测试提高代码质量和开发效率。
137 64
|
8天前
|
开发框架 C# iOS开发
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
|
8天前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
8天前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
1月前
|
开发框架 前端开发 API
C#/.NET/.NET Core优秀项目和框架2024年9月简报
C#/.NET/.NET Core优秀项目和框架2024年9月简报
|
2月前
|
编译器 C# Android开发
Uno Platform 是一个用于构建跨平台应用程序的强大框架,它允许开发者使用 C# 和 XAML 来创建适用于多个平台的应用
Uno Platform 是一个用于构建跨平台应用程序的强大框架,它允许开发者使用 C# 和 XAML 来创建适用于多个平台的应用
269 8
|
1月前
|
边缘计算 开发框架 人工智能
C#/.NET/.NET Core优秀项目和框架2024年8月简报
C#/.NET/.NET Core优秀项目和框架2024年8月简报
|
2月前
|
JSON 测试技术 C#
C#/.NET/.NET Core优秀项目框架推荐榜单
C#/.NET/.NET Core优秀项目框架推荐榜单
151 0
|
3月前
|
开发者 C# Android开发
Xamarin 与 .NET:解锁现代化移动应用开发的超级武器——深入探讨C#与.NET框架如何赋能跨平台应用,实现高效编码与卓越性能
【8月更文挑战第31天】Xamarin 与 .NET 的结合为开发者提供了强大的平台,用于构建现代化移动应用。通过 C# 和 .NET 框架,Xamarin 可以实现一次编写、多平台运行,覆盖 iOS、Android 和 Windows。这种方式不仅节省了开发时间和成本,还保证了应用的一致性和高质量。Xamarin 是一个开源框架,专为跨平台移动应用开发设计,允许使用 C# 语言和 .NET 核心库构建原生应用,并访问各平台特定功能。微软维护的 Xamarin 是 Visual Studio 生态系统的一部分,极大地提高了开发效率。
84 0