Monthly Archives: October 2007

昨天通过了MCPD考试

xiaxia

Posted in Uncategorized | Leave a comment

用BinaryFormatter序列化一个含有event的对象

  某一个对象,原先是用xml来序列化,意在保存状态,不做传输用.只需要把相关的信息写成public即可,必要时再加上一些attribute.后来为了提高执行效率,采用了BinaryFormatter进行序列化,这时产生了一个问题,要序列化的对象中的event会产生一个复杂的对象图,当中一些对象不能够被序列化也不需要被序列化,这就需要不对event进行序列化.但没有哪个序列化相关的attribute能在event上使用.看了相关的文档后得出两种方法:1. 实现ISerializable接口,并实现序列化构造函数. 这种方法可以对序列化进行完全的控制.它的问题在于如果对象比较复杂,自定义序列化的代码也比较复杂. 2. 清空event的订阅. 取消一个事件的订阅用-=操作符,它其实对应到RemoveEvent方法.这两种方法都需要将取消订阅的delegate作为参数.但对象本身无法掌管订阅它的事件的对象,而且如果用到了数据绑定,订阅事件的对象更难去获得,因此不能直接取消订阅. .NET在实现事件时其实使用了delegate,也就是对于每个event,编译器都会生成一个同名的delegate作为具体的操作对象,因此将该delegate设为null即可. 代码如下: [OnSerializing]public void ClearEvent(StreamingContext sc){    typeof(YourObject).GetField("EventName", BindingFlags.Instance |BindingFlags.NonPublic).SetValue(this, null);}

Posted in Uncategorized | 1 Comment