这篇文章主要介绍了C#使用ILGenerator动态生成函数的简单代码,需要的朋友可以参考下

游戏服务器里面总是有一大堆的配置文件需要读取, 而且这些配置文件的读取: * 要不然做成弱类型的, 就是一堆字符串或者数字, 不能看出来错误(需要重新检测一次) * 要不然做成强类型的, 每种类型都需要自己Parse一下

我个人比较喜欢后者, 因为前者LoadConfig的代码简单, 但是写逻辑的时候代码不简单.


class Config1 : public IConfig { public void Fill(EntryLine& line); int32_t param1; string param2; std::vector<int32_t> param3;};void Config1::Fill(EntryLine& line) { this->param1 = line.ReadInt32(); this->param2 = line.ReadString(); this->param3 = line.ReadVectorInt32();}

大概的填充函数就上上面写的那样, 只是ReadInt32这种函数是虚构的, 需要你自己去实现(哼)

然后这种代码写起来很烦, 我不是很想写. 这是本文产生的原因.

C#里面有XML反序列化, 我定义一个类:


class Config1 { int32 param1; string param2; int[] param3;}XmlSerializer serializer = new XmlSerializer(typeof(Config1));var obj = (Config1)serializer.Deserialize(stream);

这个反序列化就非常简单, 我其实要的就是这个东西, 只是Xml反序列化用的是Node, 而我想用属性, 另外一个就是属性的值我有一些自己个性化的东西在里面.

感谢微软提供了调试.NET Framework的功能, 让我可以调试.NET源码, 看看微软是怎么实现的.

研究了一番发现, 他居然是在XmlSerializer构造的时候, 把Config1分析了一遍, 然后生成的一些元数据, 和Read/Write方法, Deserialize只是调用了一下Read方法而已.

既然知道他是怎么实现的, 想必你研究一会儿, 也就能撸出来一个.

基本上你得先撸出来一个原型, 然后再把原型程序化.

PS: 暂时还没有测试性能, 应该不会太差, 最差就是服务器启动的是慢几秒.

XmlSerializationReaderILGen.cs

总结

更多相关文章

  1. C#中使用反射以及特性简化的实例代码
  2. 介绍有关C++中继承与多态的基础虚函数类
  3. .Net实现微信JS-SDK分享功能代码展示
  4. C#中关于程序功能实现以及对代码选择的思考
  5. .net中关于异步性能测试的示例代码
  6. ASP.NET Core中用户登录验证实现最低配置的示例代码
  7. 代码详解AVL树的插入
  8. 厌倦写代码的人是如何做软件开发的
  9. 实例详解sort()函数的原理和使用方法

随机推荐

  1. 如何在php中实现construct构造方法
  2. PHP中三种设置脚本最大执行时间的方法
  3. 在PHP中通过GD库创建简单的图片(图文详解)
  4. 如何将curl获取到的json对象转成数组
  5. php如何修改数组的值?
  6. PHP在图片中用 imagettftext() 添加水印(
  7. 如何解决php中curl传递数据太慢
  8. php如何设置权限?
  9. php代码如何在html文件里面执行(详解)
  10. 如何解决php中curl_init()函数不可用