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