Effective c# and More Effective c# 文摘

Effective c#

 

第一章 c#语言元素

 

条款一使用属性代替可访问的数据成员

 

public int this[int index]
{
    get{ return _theValues[index];}
    set{ _theValues[index] = value;}
}

索引器---含参属性

 

条款二运行时常量readonly优于编译时常量 const

 

条款三操作符is as优于强制类型

 

条款四使用conditional特性代替 #if条件编译

[Conditional("DEBUG")]
private void CheckState()
{

}

 

条款五总是提供tostring()方法

public override string ToString(){
}

 

条款六明辩值类型和引用类型的使用场合

 

条款七将值类型尽可能实现为具有常量性和原子性的类型

 

条款八确保0为值类型的有效状态

[Flags]
public enum Styles
{
  None = 0,
  .....
}


 

条款九理解几个相等判断之间的关系

对于值类型  都要重写Equals()

同时重写Equals() 和 GetHashCode()

 

条款十理解GetHashCode()方法的缺陷

 

条款十一优先采用foreach循环语句

集合类:

1.类型具备一个公有的GetEnumerator();

2.类型显示实现了IEnumerable接口

3.类型实现了IEnumerator接口     

 

第二章 .net资源管理

 

条款十二变量初始化器优于赋值语句

 

条款十三使用静态构造器初始化静态类成员

 

条款十四利用构造器链

 

条款十五利用using try/finally语句来清理资源

 

条款十六尽量减少内存垃圾

 

条款十七尽量减少装箱和拆箱

 

条款十八实现标准Dispose模式

 

第三章使用c#表达设计

 

条款十九定义并实现接口优于继承类型

 

条款二十明辩接口实现和虚方法重写

 

条款二十一使用委托表达回调

 

条款二十二使用事件定义外发接口

 

条款二十三避免返回内部类对象的引用

 

条款二十四声明式编程优于命令式编程

 

条款二十五尽可能将类型实现为可序列化的类型

 

条款二十六使用IComparable IComparer接口实现排序关系

 

条款二十七避免ICloneable接口

 

条款二十八避免强制转换操作符

 

条款二十九只有当新版基类导致问题时才考虑使用new修饰符

 

第四章创建二进制组件

 

条款三十尽可能实现cls兼容的程序集

 

条款三十一尽可能实现短小简洁的函数

 

条款三十二尽可能实现小尺寸,高内聚的程序集

 

条款三十三限制类型的可见性

 

条款三十四创建大粒度的 web api

 

第五章使用框架

 

条款三十五重写优于事件处理器

 

条款三十六合理使用.net运行时诊断

 

条款三十七使用标准配置机制

 

条款三十八定制和支持数据绑定

 

条款三十九使用.net验证

 

条款四十根据需要选用恰当的集合

 

条款四十一   dataset优于自定义结构

 

条款四十二利用特性简化反射

 

条款四十三 避免过度使用反射

 

条款四十四为应用程序创建特定的异常类

 

第六章杂项讨论

 

条款四十五优先选择强异常安全保证

 

条款四十六最小化互操作

 

条款四十七优先选择安全代码

 

条款四十八掌握相关工具与资源

 

条款四十九C#20做准备

 

条款五十了解ECMA标准

 

More Effective c#

 

第一章 使用泛型

 

条目1 使用1.x框架API的泛型版本

条目2 恰到好处的定义约束

条目3 运行时检查参数的类型并提供特定的算法

条目4 使用泛型强制编译期类型推断

条目5 确保泛型类型支持可销毁对象

条目6 使用委托定义类型参数上的方法约束

条目7 不要为基类或接口创建泛型的特殊实现

条目8 尽可能使用泛型方法,除非需要将类型参数用于实例的字段中

条目9 使用泛型元祖代替out和ref参数

条目10  在实现泛型接口的同时也实现传统接口

 

第二章 C#中的多线程

条目11 :使用线程池而不是创建线程

条目12 :使用BackgroundWorker实现线程间通信

条目13 :lock()作为同步的第一选择

条目14 :尽可能地减小锁对象的作用范围

条目15 :避免在锁定区域内调用外部代码

条目16 :理解 windows窗体和 wpf中的跨线程调用

 

第三章 c#设计实践

条目17 :为序列创建可组合的API

条目18 :将遍历和操作,谓词以及函数分开

条目19 :根据需要生成序列中的元素

条目20 :使用函数参数降低耦合

条目21 :让重载方法组尽可能清晰最小化且完整

条目22 :定义方法后再重载操作符

条目23 :理解事件是如何增加对象间运行时耦合的

条目24 :仅声明非虚的事件

条目25 :使用异常来报告方法的调用失败

条目26 :确保属性的行为与数据类似

条目27 :区分继承和组合

 

第四章 c#3.0语言增强

 

条目28 使用扩展方法增强现有接口

条目29 使用扩展方法增强现有类型

条目30 推荐使用隐式类型局部变量

条目31 使用匿名类型限制类型的作用域

条目32 为外部组件创建可组合的API

条目33 避免修改绑定变量

条目34 为匿名类型定义局部函数

条目35 不要在不同命名空间中声明同名的扩展方法

 

第五章 使用Linq

条目36 理解查询表达式与方法调用之间的映射

条目37 推荐使用延迟求值查询

条目38 推荐使用Lambda表达式而不是方法

条目39 避免在函数或操作中抛出异常

条目40 区分早期执行和延迟执行

条目41 避免在闭包中捕获昂贵的外部资源

条目42 区分IEnumerable 和 IQueryable

条目43 使用Single()和First()来明确给出对查询结果的期待

条目44 推荐保存Expression<>而不是Func<>

 

第六章 杂项

条目45 最小化可空类型的可见范围

条目46 为部分类的构造函数,修改方法以及事件处理程序提供部分方法

条目47 仅在需要parms数组时才使用数组作为参数

条目48 避免在构造函数中调用虚方法

条目49 考虑为大型对象使用弱引用

条目50 使用隐式属性表示可变但不可序列化的数据 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Effective C”是指使用C语言进行编程时,在代码的编写和设计中遵循的一些有效原则和最佳实践。以下是关于如何编写高效的C代码的一些重要原则。 首先,关注代码的可读和可维护。良好的代码应该易于阅读和理解,使得其他开发人员能够轻松地理解代码的意图和执行流程。为了提高代码的可读,应该使用有意义的变量和函数名,并适当地注释代码。 其次,避免过度优化。当编写C代码时,可能会有一种倾向,即过度优化以提高代码的执行速度。然而,这往往会使代码变得复杂和难以维护。在大多数情况下,应该首先写出能正常工作的代码,然后在必要时进行优化。 另外,内存管理是编写高效C代码的关键。正确地分配和释放内存,避免内存泄漏和内存访问错误是至关重要的。可以使用malloc和free函数进行动态内存分配和释放,但是一定要注意释放已经分配的内存,以避免内存泄漏问题。 此外,避免使用过多的全局变量。全局变量的使用可能会导致代码的不可预测和可维护的降低。应该尽可能地将变量的作用范围限制在函数内部,并使用参数传递数据。 最后,进行适当的错误处理和异常处理。有效的C代码应该能够处理各种可能的错误情况,并提供适当的错误消息和恢复机制,以保证程序的稳定和可靠。 总之,“Effective C”是通过遵循一些有效的编程原则和最佳实践,以提高C代码的质量和效率。这些原则包括关注代码的可读和可维护,避免过度优化,正确地进行内存管理,避免过多的全局变量,以及进行适当的错误处理和异常处理。遵循这些原则可以帮助开发人员编写高效、可扩展和可维护的C代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值