C#使用ILGenerator动态生成函数的简单代码

发布时间 - 2026-01-11 03:02:22    点击率:

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

总结

以上所述是小编给大家介绍的C#使用ILGenerator动态生成函数的简单代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# c#  # 动态生成函数  # ILGenerator  # C# ODP.NET 调用Oracle函数返回值时报错的一个解决方案  # C#中字段、属性、只读、构造函数赋值、反射赋值的问题  # C# 中如何取绝对值函数  # C#函数式编程中的惰性求值详解  # asp.net(c#)获取内容第一张图片地址的函数  # C#关于Task.Yeild()函数的讨论  # C# 构造函数如何调用虚方法  # 浅谈C# 构造方法(函数)  # C#后台调用前台JS函数方法  # C#中加载dll并调用其函数的实现方法  # 浅析C# 函数的传值与传址  # 的是  # 微软  # 序列化  # 小编  # 配置文件  # 这是  # 有一  # 让我  # 是在  # 还没有  # 就能  # 他是  # 在此  # 我有  # 是怎么  # 不是很  # 你自己  # 一遍  # 给大家  # 而我 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  jQuery中的100个技巧汇总  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  浅谈javascript alert和confirm的美化  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Laravel如何使用Blade模板引擎?(完整语法和示例)  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  Laravel怎么为数据库表字段添加索引以优化查询  如何在IIS中新建站点并配置端口与物理路径?  详解jQuery中基本的动画方法  如何快速搭建高效服务器建站系统?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  Internet Explorer官网直接进入 IE浏览器在线体验版网址  JavaScript如何实现音频处理_Web Audio API如何工作?  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  使用豆包 AI 辅助进行简单网页 HTML 结构设计  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  Laravel如何优化应用性能?(缓存和优化命令)  Laravel如何创建自定义Artisan命令?(代码示例)  Python文件流缓冲机制_IO性能解析【教程】  java中使用zxing批量生成二维码立牌  如何用景安虚拟主机手机版绑定域名建站?  英语简历制作免费网站推荐,如何将简历翻译成英文?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  如何快速搭建二级域名独立网站?  Laravel如何使用模型观察者?(Observer代码示例)  微信小程序 闭包写法详细介绍  如何在云主机快速搭建网站站点?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  如何在服务器上配置二级域名建站?  bootstrap日历插件datetimepicker使用方法  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  linux top下的 minerd 木马清除方法  Laravel API资源类怎么用_Laravel API Resource数据转换  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  太平洋网站制作公司,网络用语太平洋是什么意思?  Python3.6正式版新特性预览  Laravel如何使用Collections进行数据处理?(实用方法示例)  简历在线制作网站免费版,如何创建个人简历?  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  如何自定义建站之星网站的导航菜单样式?  javascript中对象的定义、使用以及对象和原型链操作小结  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析