摘要: .net的引用类型相互赋值是使他们的引用指向同一个堆栈。如:Object A=new Object(); Object B=A;这是A和B的引用时指向同一个堆地址的。如果我们想实现在堆上分配相同结构的堆,但是地址不同,这就需要借助到浅拷贝和深拷贝了。浅拷贝通过object的MemberwiseClone 方法创建一个浅表副本,方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。public object NoDeepClone(){ClassA cla. 阅读全文
posted @ 2011-03-09 22:10 雁北飞 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 在.NET中,系统资源是分为两种的,一种是托管资源,一个是非托管资源。对于托管资源,.NET的GC回收器能在某些特定的时刻(如内存不足的时候)对其进行回收。而非托管资源是必须进行显示释放的,GC回收器并不能对其进行回收。在.NET下,对一个类声明虚构函数的时候,C#编译器会将其编译为对Finalizer方法的调用。而有实现Finalizer方法和没有实现Finalizer方法在GC的回收过程中是有区别的。没有显示Finalizer的情况下:GC在回收的过程中,会去扫描一张表,该表记录着有实现Finalizer的类,若发现该类的实列没有再被引用并且在表中找不到记录,则直接对其进行回收。如果类实. 阅读全文
posted @ 2011-03-09 12:25 雁北飞 阅读(186) 评论(0) 推荐(0) 编辑