2012年10月24日
摘要: 垃圾回收器在管理应用程序的内存上确实很高效。但请记住,创建和释放堆对象还是很 占时间的。避免创 建大量的对象,也不要创建你不使用的对象 。也要避免在局部函数上多次创建引用对象 。相反,把局部变 量提供为类型成员变量,或者把你最常用的对象实例创建为静态对象 。最后,考虑使用可变对象创建器来 构造恒定对象 阅读全文
posted @ 2012-10-24 09:33 Q&A 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 只有是实现了IDispose接口的类型的调用都应使用using 或者try/finally释放对象。 阅读全文
posted @ 2012-10-24 09:23 Q&A 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 这是C#里的最后一个关于对象构造的原则,是时候复习一下,一个类型在构造时的整个事件顺序了。你须 要同时 明白一个对象 的操作顺序和默认的预置方法的顺序。你构造过程中,你应该努力使所有的成员变量 只精确的初始化一次。最好的完成这个 目标的方法就是尽快的完成变量的初始化 。这是某个类型第一次构 造一个实例时的顺序: 1、静态变量存储位置0 。 2 、静态变量预置方法执行 。 3、基类 的静态构造函数执行 。 4 、静态构造函数执行 。 5、实例变量存储位置0 。 6、实例变量预置方法执行 。7、恰当 的基类实例构造函数执行 。 8、实例构造函数执行 。 后续的同样类型的实例从... 阅读全文
posted @ 2012-10-24 09:11 Q&A 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 用静态构造函数初始化类的静态成员 阅读全文
posted @ 2012-10-24 09:00 Q&A 阅读(117) 评论(0) 推荐(0) 编辑
  2012年10月23日
摘要: 这个我保留意见,我觉得有点时候用构造函数更好。 阅读全文
posted @ 2012-10-23 20:49 Q&A 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 对于文件句柄,数据库链接,GDI+等非托管资源,建议实现IDisposeable接口。 阅读全文
posted @ 2012-10-23 20:36 Q&A 阅读(159) 评论(0) 推荐(0) 编辑
摘要: foreach是一个应用广泛的语句 。它为数组的上下限 自成正确的代码,迭代多维数组,强制转化为恰当 的类 型 使用最有效的结构 ,还有,这是最重要的,生成最有效的循环结构。这是迭代集合最有效的方法。这 ( ) 样,你写出的代码更持久 译注 :就是不会因为错误而改动太多的代码 ,第一次写代码的时候更简洁。这 ( ) 对生产力是一个小的进步,随着时间的推移会累加起来 阅读全文
posted @ 2012-10-23 20:00 Q&A 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 1、对于引用类型,GetHashCode()函数返回当前对象的ID。(对象的ID在对象创建时自动分配)2、对于值类型,GetHashCode()返回类型的第一个字段的散列值。 public struct MyStruct { private string _msg; private int _id; private DateTime _epoch; } 从MyStruct 对象上返回的散列值是从该对象的_msg 成员上生成的。下面的代码片断总是返回trueMyStruct s = new MyStruct( ); return s.GetHashCode( ) == s._msg... 阅读全文
posted @ 2012-10-23 19:50 Q&A 阅读(177) 评论(0) 推荐(0) 编辑
摘要: Object.ReferenceEquals(Object left,Object right) :判断两个对象的ID是否相同。Object .Equals(Object left,Object right):当不知道两个对象的类型时判断这两个对象是否相同,它是原理是基于“==”和第一个对象的Equals()。实例的Equals(Object right)方法: 原则是不管什么时候,在创建一个值类型时重载Equals()方法,并且你不想让引用类型遵从默认引用类型 的 语义时也重载Equals(),就像System.Object定义的那样 。当你写你 自己的Equals() 时,遵从要点里实现. 阅读全文
posted @ 2012-10-23 15:44 Q&A 阅读(136) 评论(0) 推荐(0) 编辑
  2012年10月22日
摘要: 确保0对于值类型是有效的 阅读全文
posted @ 2012-10-22 16:51 Q&A 阅读(104) 评论(0) 推荐(0) 编辑