第1章 C#语言元素...... 1
条款1:使用属性代替可访问的数据成员.. 1
条款2:运行时常量(readonly)优于编译时常量(const).. 12
条款3:操作符is或as优于强制转型.. 17
条款4:使用Conditional特性代替#if条件编译.. 25
条款5:总是提供ToString()方法.. 31
条款6:明辨值类型和引用类型的使用场合.. 38
条款7:将值类型尽可能实现为具有常量性和原子性的类型.. 44
条款8:确保0为值类型的有效状态.. 51
条款9:理解几个相等判断之间的关系.. 56
条款10:理解GetHashCode()方法的缺陷.. 63
条款11:优先采用foreach循环语句.. 70
第2章 .NET资源管理...... 77
条款12:变量初始化器优于赋值语句.. 82
条款13:使用静态构造器初始化静态类成员.. 84
条款14:利用构造器链.. 87
条款15:利用using和try/finally语句来清理资源.. 93
条款16:尽量减少内存垃圾.. 100
条款17:尽量减少装箱与拆箱.. 103
条款18:实现标准Dispose模式.. 109
第3章 使用C#表达设计...... 117
条款19:定义并实现接口优于继承类型.. 118
条款20:明辨接口实现和虚方法重写.. 125
条款21:使用委托表达回调.. 129
条款22:使用事件定义外发接口.. 131
条款23:避免返回内部类对象的引用.. 137
条款24:声明式编程优于命令式编程.. 142
条款25:尽可能将类型实现为可序列化的类型.. 148
条款26:使用IComparable和IComparer接口实现排序关系.. 156
条款27:避免ICloneable接口.. 163
条款28:避免强制转换操作符.. 167
条款29:只有当新版基类导致问题时才考虑使用new修饰符.. 172
第4章 创建二进制组件...... 177
条款30:尽可能实现CLS兼容的程序集.. 181
条款31:尽可能实现短小简洁的函数.. 186
条款32:尽可能实现小尺寸、高内聚的程序集.. 190
条款33:限制类型的可见性.. 194
条款34:创建大粒度的Web API. 198
第5章 使用框架...... 205
条款35:重写优于事件处理器.. 205
条款36:合理使用.NET运行时诊断.. 208
条款37:使用标准配置机制.. 213
条款38:定制和支持数据绑定.. 217
条款39:使用.NET验证.. 224
条款40:根据需要选用恰当的集合.. 229
条款41:DataSet优于自定义结构.. 237
条款42:利用特性简化反射.. 246
条款43:避免过度使用反射.. 253
条款44:为应用程序创建特定的异常类.. 258
第6章 杂项讨论...... 265
条款45:优先选择强异常安全保证.. 265
条款46:最小化互操作.. 270
条款47:优先选择安全代码.. 277
条款48:掌握相关工具与资源.. 281
条款49:为C# 2.0做准备.. 284
条款50:了解ECMA标准.. 293
索引...... 295