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 身份认证的正确实践与常见误区解析

