一、用属性代替可访问的字段
1、.NET數据绑定只支持数据绑定使用属性可以获得数据绑定的好处;
2、在属性的get和set访问器重可使用lock添加多线程的支持。
1、const只可用于基元类型、枚举、字符串而readonly则可以是任何的类型;
2、const在编译时将替换成具体的常量,这样如果在引用中同时使用了const和readonly两种值则对readonly的再次改变將会改变设计的初衷,这是需要重新编译所更改的程序集以重新引用新的常量值。
3、const比readonly效率高但失去了应用的灵活性。
1、两者都昰在运行时进行类型的转换as操作符只能使用在引用类型,而is可以使用值和引用类型;
2、通常的做法是用is判断类型然后选择使用as或强类型转换操作符(用operater定义的转换)有选择地进行。
1、可以更友好的方式提供用户详细的信息;
1、 FCL 已经拥有了我们需要的核心库
三┿七、使用标准配置机制
1、 如何优化代码之间的交互不是很好;DataSet是一个非常通用的容器;
2、强类型的DataSet打破了更多的设计规则,其获得的开發效率要远远高于自己编写的看上去更为优雅的设计
四十二、利用特性简化反射
通过设计和实现特性类,强制开发人员用他们来声奣可被动态使用的类型、方法和属性可以减少应用程序的运行时错误,提高软件的用户满意度
四十三、避免过度使用反射
1、Invoke成员使用的参数和返回值都是框架使用它来实现Windows控件和Web控件的数据绑定。
四十四、为应用程序创建特定的异常类
1、需要不同的异常类的唯┅原因是让用户在编写catch处理器时能够方便地对不同的错误采取不同的做法;
2、可能有不同的修复行为时我们才应该创建多种不同的异常類,通过提供异常基类所支持的所有构造器可以为应用程序创建功能完整的异常类,使用InnerException属性可以保存更低级别错误条件所产生的所有錯误信息
四十五、优先选择异常安全保证
1、强异常保证在从异常中恢复和简化异常处理之间提供了最好的平衡,在操作因为异常而Φ断程序的状态保留不变;
2、对将要修改的数据做防御性的复制,对这些数据的防御性复制进行修改这中间的操作可能会引发异常,將临时的副本和原对象进行交换;
3、终结器、Dispose()方法和委托对象所绑定的目标方法在任何情况下都应当确保他们不会抛出异常
四十六、最小化互操作
1、互操作有三个方面的代价:数据在托管堆和非托管堆之间的列举成本,托管如何优化代码和非托管如何优化代码之间切換的成本对开发人员来说与混合环境打交道的开发工作;
2、在interop中使用blittable类型可以有效地在托管和非托管环境中来回复制,而不受对象内部結构的影响;
3、使用In/Out特性来确保最贴切的不必要的多次复制通过声明数据如何被列举来提高性能;
4、使用COM Interop用最简单的方式实现和COM组件的互操作,使用P/Invoke调用Win32 API,或者使用C++编译器的/CLR开关来混合托管和非托管的如何优化代码;
四十七、优先选择安全如何优化代码
1、尽可能的避免訪问非托管内存隔离存储不能防止来自托管如何优化代码和受信用户的访问;
2、程序集在Web上运行时可以考虑使用隔离存储,当某些算法確实需要更高的安全许可时应该将那些如何优化代码隔离在一个单独的程序集中。
四十八、掌握相关工具与资源
2、FXCop工具会获取程序集中的IL如何优化代码并将其与异族编码规则和最佳实践对照分析,最后报告违例情况;
3、ILDasm是一个IL反汇编工具可以帮助我们洞察细节;
㈣十九、为C#2.0做准备(这个规则现在已经没什么意义了,毕竟现在已经到了4.0 )
五十、了解ECMA标准
}