利用C#特性优化AMF反序列化类
2015-06-09 12:18
190 查看
public delegate T AmfReadType<out T>(AMF0Reader instance,bool withType = false); private static readonly Dictionary<byte, Delegate> ReadMap = new Dictionary<byte, Delegate>(); static AMF0Reader() { var type = typeof(AMF0Reader); var amfReadTypeOf = typeof(AmfReadType<>); foreach (var method in type.GetMethods()) { var attribute = method.GetCustomAttribute<AmfReadTypeAttribute>(); if (attribute == null) continue; ReadMap[attribute.Type] = Delegate.CreateDelegate(amfReadTypeOf.MakeGenericType(method.ReturnType), method); } }
泛型委托定义,为了能绑定所有需要反序列化的方法,需要用到C#的一些特性,比如动态创建泛型类型,方法绑定到委托,特性反射等等
调用时
public T Read<T>() => ((AmfReadType<T>)ReadMap[ReadByte()])(this);
C#6.0的单行方法定义,代码更优雅
相关文章推荐
- c#调用COM组件
- JAVA泛型—— 3fe8 转
- JAVA泛型详解——转
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#通用邮件发送类分享
- C#中this的用法集锦
- C#中Equality和Identity浅析
- C#生成饼形图及添加文字说明实例代码
- C#判等对象是否相等的方法汇总
- C#简单的向量用法实例教程
- C#托管堆对象实例包含内容分析
- C#实现按照指定长度在数字前补0方法小结
- C#虚方法的声明和使用实例教程
- C#获取文件夹及文件的大小与占用空间的方法
- C#定义简单的反射工厂实例分析
- C#数字图象处理之肤色检测的方法
- C#实现用于操作wav声音文件的类实例