天天热消息:Natasha 高级编译类 (五)- 第二部分
FakeMethodOperator
将以后的方法进行快速克隆,克隆时只会覆盖重新声明的信息,例如原来是public类型,不做定义的话,就直接拿过来使用。
好处:写好的模板不需要大变,变动的地方又代码进行修改
注意:使用Compile方法进行编译,参数为带入的参数,可通过调用.Compile().GetMethodInfo().Invoke()进行方法调用
(资料图)
需要克隆的类及用到的代理
///////////////需要使用的克隆类/////////////////////////
/// 等待克隆的类/// public class OopTestModel{ ////// 最基本的方法 /// public void ReWrite1() {} ////// 并发执行的方法 /// ///public async Task ReWrite2() {return this;} /// /// 虚方法,并带有ref和out /// /// /// ///public virtual ref int ReWrite3(ref int i, out string temp) { temp = default!; return ref i; }}/// /// 虚方法声明的代理类/// /// /// ///public delegate ref int TestDelegate1(ref int i, out string temp); 实现类
// 引用第一个方法,最简单的调用var builder1 = FakeMethodOperator.DefaultDomain();builder1 // 克隆OopTestModel的ReWrite1方法,加上!表示可以为null .UseMethod(typeof(OopTestModel).GetMethod("ReWrite1")!) // 方法体中加入下面方法 .MethodBody(@"Console.WriteLine(""hello world"");");System.Console.WriteLine(builder1.ScriptCache);// 引用第二个方法,并发执行的方法var builder2 = FakeMethodOperator.DefaultDomain() // 克隆OopTestModel的ReWrite2方法 .UseMethod(typeof(OopTestModel).GetMethod("ReWrite2")!) // 静态的方法体,注意,该处看不出是async的并发方法 .StaticMethodBody(@"Console.WriteLine(""hello world"");return default;");if (builder2.Compile() != null) { System.Console.WriteLine(builder2.ScriptCache);}else{ System.Console.WriteLine("未编译成功");}//引用第三个,改为静态方法var builder3 = FakeMethodOperator.DefaultDomain();builder3 // 克隆OopTestModel的ReWrite3方法 .UseMethod(typeof(OopTestModel).GetMethod("ReWrite3")!) // 改为静态方法并设置方法体 .StaticMethodBody(@"temp = default;return ref i;");//编译 加入代理if (builder3.Compile
() != null){ System.Console.WriteLine(builder3.ScriptCache);}else { System.Console.WriteLine("未编译成功");}
运行结果
FastMethodOperator
用于快速构建方法并执行
注意:实例化的方法为Invoke,类似于反射
//最简单的快速调用var delegateAction1 = FastMethodOperator .DefaultDomain() .Param("str1") .Param("str2") .Body(@" string result = str1 +"" ""+ str2; return result;") .Return() // 编译 .Compile>(); // 执行System.Console.WriteLine(delegateAction1.Invoke("Hello", "World1!"));// delegateAction1的简化版,无需Param和Resultvar delegateAction2 = FastMethodOperator.DefaultDomain() .Body(@"return arg1 +"" ""+ arg2;") .Compile>();System.Console.WriteLine(delegateAction2.Invoke("Hello", "World2!"));//并发执行的方法// 注意执行该方法时一定要使用await或者Sleep,否则不会输出var delegateAction3 = FastMethodOperator.DefaultDomain() .Async() .Body(@" await Task.Delay(100); string result = arg1 +"" ""+ arg2; return result;") .Compile>>();System.Console.Write
执行结果
NInterface
Natasha版本的接口快速构建
var builder = NInterface.DefaultDomain();builder.AssemblyBuilder.DisableSemanticCheck();var type = builder .NoGlobalUsing() .HiddenNamespace() .Access(AccessFlags.Public) .Name("Interface1") .Property(item => item.Type().Name("Abc")) .Method(item => item.Name("Test").Param("p").Return()) .GetType();System.Console.WriteLine(builder.AssemblyBuilder.SyntaxTrees[0].ToString());
执行结果
NInstance
直接实例化一个类NInstance.Creator
///待初始化类public class CallModel{ public CallModel() { Age = "World!"; CreateTime = DateTime.Now; } public string Age; public DateTime CreateTime; public String getCall() { return $"{Age}:{CreateTime}"; }}// 调用var instance = NInstance.Creator();var callModel = instance.Invoke();System.Console.WriteLine(callModel.getCall());
执行结果
未完待续。。。
标签:
为您推荐
广告
随机阅读
- 天天热消息:Natasha 高级编译类 (五)- 第二部分
- 有想要种牙的参保人吗?湖南医保给您“写了封信”……
- 弹力带的用法及锻炼的部位(弹力带锻炼方法图解)
- 更大力度吸引和利用外资-当前报道
- 巴基斯坦信德省两起车祸致19人死亡|天天最新
- 环球速看:山西省吕梁市原副市长杨巨才被“双开”
- 诚信通是什么意思_诚信通是什么
- 沙王冠决赛对阵:利雅得新月vs麦加统一,胜者将获得亚冠资格_精选
- 天天新消息丨悠然自得的心境的诗句_悠然自得
- 紫光国微:一季度净利润5.83亿元 今日热搜
- TTG“两分钟”拿下比赛胜利!TTG 1-0 AG确认晋级季后赛-快看点
- 导游证怎么考需要什么条件 + 导游证_导游证怎么考需要什么条件 当前观察
- 视焦点讯!药石科技龙虎榜:机构净卖出1.11亿元
- 莱伯泰科最新公告:一季度净利润1286.8万元 同比增7.99%-每日热文
- 有游客出现胃肠道症状到医院就诊?云南景洪市:患者无重症 开展流调等
- 全球今头条!4种WHO推荐的疫苗未纳入我国免疫规划,原因有哪些
- 王者荣耀电脑版直接玩_王者名字女生
- 焦点速递!推特网友赞中国高铁“舒适宽敞快速准时” 马斯克:是真的!
- 主力资金|百股主力净流出超1亿元,比亚迪仰望预售破万获主力抢筹,东方财富一季度业绩承压遭主力用脚投票|世界短讯
- 赣榆区石桥镇开展“春天里的读书声”主题阅读活动_全球滚动
- 1世界信息:【除隐患 铸平安】名为“养老”,实为“坑老”
- 2排球少年漫画全国大赛_排球少年漫画-即时
- 3世界即时看!中国星辰丨敢上九天揽月
- 4义务献血168次!一起来了解“共和国献血状元”的感人故事
- 5如何激励员工视频_如何激励员工
- 6环球热点评!长沙养老金一个月能拿多少 2022年每月基本领多少钱
- 7环球焦点!日内瓦大学简介
- 8天天观察:中国空间站 直播看“天宫”
- 9高校开设剧本杀学院,舆论不必“一棒打死” | 新京报评论-热消息
- 10冠盛股份2023年第一季度净利2802.39万 同比增加17.17%
- 1创业板核能概念上市公司排名(市值排行榜)|环球焦点
- 2环球快消息!股份回购岂能“说一套做一套”?东方集团被出具警示函
- 3【大国基理】浙江常山:“融治理”模式实现矛盾纠纷“应化尽化”
- 4今日快讯:上海建科4月24日快速回调
- 5【全球速看料】冠军公然违约,为何受伤的总是中国体育品牌?
- 6国企是国有独资公司吗_国有独资是不是国企|天天头条
- 7全球速讯:格力旗下天津新晖医疗拟注销
- 8“五一”已近 阳光几时再现 苏城本周仍有降水 气温逐步回升
- 9【世界聚看点】凤凰股份:一季度营收约2.16亿元 商品房合同销售面积同比涨739%
- 10世界新资讯:湖南省脑科医院(湖南省第二人民医院)专家团队到永州市脑科医院开展交流座谈、查房义诊
广告
财经
- 天天简讯:长城基金季报划重点:A股后市如何走?
- 斯道沃·陆道国际设计机构_关于斯道沃·陆道国际设计机构简介
- 皮奥利:在拉开进攻和角球时,莱奥应该更多出现在后门柱
- “高速飞车”未来运行速度将达每小时1000公里
- 全球头条:新西兰7.1级强震引发局地海啸 不会影响中国沿岸
- 宋江山
- 世界速递!共进股份4月24日盘中跌停
- 新世界小红袄是谁啊(新世界小红袄是谁真实身份揭秘) 全球看点
- 视频|网络假警察:你涉嫌洗钱速转70万以证清白 乐平真民警:你有事就到派出所来找我们!|天天即时
- 秋田微4月24日盘中涨幅达5%
- 类洛克人《超合金游侠》4月28日登陆Switch
- 当前讯息:宇智波斑真的强大到比拟仙人了吗?其实只是剧情保护罢了
- 全球今日讯!B站千万粉丝UP主回应停更传言 激励不够付房租
- 世界热讯:采矿权价款计算方法 采矿权价款
- 2022年成年国民综合阅读率持续稳定增长 阅读量保持总体稳定
- 工行安徽省分行成功举办“工银•皖美阅读”品牌发布暨“阅·见初心”线下读书分享会
- 当前热文:英媒:体型大需买两张票,多家航司新规招不满
- AI能生成超越自然界的新型蛋白质,可用于制造特定机械性能材料_世界速讯
- 超市员工透露:超市这3种东西,低价也不要回家,花的都是智商税|焦点速看
- 【世界速看料】错误代码0x80071ac3_错误码ux_timeout