环球今日讯!Natasha 高级编译类 (五)- 第一部分
2023-04-24 21:58:54 来源:博客园


(资料图)

模板类的使用,类似于Lambda

类名作用命名空间操作类型
NAssembly快速创建同程序集的 oop 及委托等操作类全局静态初始化,动态实例化
NInstance根据类型,提供一个初始化实例的委托全局静态
NDelegate快速创建指定域的 Action/Func 委托全局静态初始化,动态实例化
NClass快速创建一个公有类全局静态初始化,动态实例化
NInterface快速创建一个公有接口全局静态初始化,动态实例化
NEnum快速创建一个枚举类全局静态初始化,动态实例化
NRecord快速创建一个记录类全局静态初始化,动态实例化
NStruct快速创建一个结构体全局静态初始化,动态实例化
FakeMethodOperator仿造 MethodInfo 创建方法Natasha.CSharp静态初始化,动态实例化
FastMethodOperator快速创建方法Natasha.CSharp静态初始化,动态实例化

NClass

感觉该类的使用频率会比较高

注意:NClass可以通过获得Method后在进行方法调用,或者实例化以后

使用自带方法进行创建

NatashaManagement.Preheating();using (NatashaManagement.CreateDomain("Test").CreateScope()){    // 创建class    NClass builder = NClass.UseScope();    var type = builder        // 不包含全局using        .NoGlobalUsing()        // 隐藏命名空间        .HiddenNamespace()        // 类的访问权限        .Access(AccessFlags.Public)        // 名称        .Name("Demo5")        // 带参构造函数        .Ctor(item => item.Public().Param("test").Body("int _test  = test;"))        // 属性        .Field(item => { item.Public().Name("Age").Type(); })        // 属性        .Field(item => { item.Public().Name("Name").Type(); })        // 封装的方法        .Property(item => { item.Public().Name("Obj").Type(); })        .GetType();    var script = builder.AssemblyBuilder.SyntaxTrees[0].ToString();    System.Console.WriteLine(script);}

运行结果

另外附上一个较为全面的例子

//构建二 使用了上面例子的type//添加了该引用一直无效果,因此直接将TestAttribute放到了代码中NatashaManagement.AddGlobalReference(typeof(TestAttribute));NClass builder2 = NClass.UseScope();var type2 = builder2    .Public()    // 类名称    .Name("Demo51")    // 注释    .Summary("This is a test class;")    // 添加只读的int变量ReadonlyField    .PublicReadonlyField("ReadonlyField")    // 声明一个构造函数    .Ctor(item => item.Public().Body("ReadonlyField = 10;"))    // 私有变量声明    .PrivateField("_name", "[TestAttribute]")    // 声明了TestAttribute属性的Get方法    .Property(item => item        .Public()        .Attribute()        .Type()        .Name("NameProperty")        .OnlyGetter("return _name;"))    // Get/Set方法    .Property(item => item        .Public()        .Type("AnotherClass")        .Name("AnotherProperty"))    // 名为SetName,参数为string的返回值为_name的虚方法    .Method(item => item        .Public()        .Virtrual()        .Async()        .Name("SetName")        .Param("name")        .Body(@"_name = name;                            return _name;")        .Return>())    // 在命名空间中额外添加一个AnotherClass方法    .NamespaceBodyAppend("public class AnotherClass{}")    .NamespaceBodyAppend("public class TestAttribute : Attribute { }")    .GetType();var script2 = builder2.AssemblyBuilder.SyntaxTrees[0].ToString();// 打印System.Console.WriteLine(script2);

运行结果

NEnum

枚举类

//没啥好说的。。。。NEnum builder = NEnum.DefaultDomain();var type = builder    .NoGlobalUsing()    .HiddenNamespace()    .Access(AccessFlags.Public)    .Name("EnumDemo")    .EnumField("Apple", 1, "苹果")    .EnumField("Orange", 2)    .EnumField("Banana", 4)    .GetType();System.Console.Write(builder.AssemblyBuilder.SyntaxTrees[0].ToString());

运行结果

NRecord

应该是快速生成C# 9 的Record类型

NRecord builder = NRecord.DefaultDomain();var type = builder    .HiddenNamespace()    .AttributeAppend("[StructLayout(LayoutKind.Explicit)]")    .Access(AccessFlags.Public)    .Name("RecordTest")    .Field(item => { item.AttributeAppend("0").Public().Name("Apple").Type(); })    .Field(item => { item.AttributeAppend("0").Public().Name("Orange").Type(); })    .GetType();System.Console.WriteLine(builder.AssemblyBuilder.SyntaxTrees[0].ToString());

执行结果

未完待续。。。

环球今日讯!Natasha 高级编译类 (五)- 第一部分

2023-04-24

首个皮肤互联网医院上线 专家:有助于引领专科医疗模式的创新-最新快讯

2023-04-24

管理层变阵与合并传言里的中国金茂|热点

2023-04-24

世界播报:小课屏开启“械”字号护眼时代

2023-04-24

河南:在郑州市区购房,公积金贷款最高额度统一调整为100万元

2023-04-24

印度组合淘汰张本美和,王曼昱闺蜜晋级,打进女双正赛

2023-04-24

如何设置显示桌面图标 焦点热讯

2023-04-24

当前要闻:房东涨价现象增加,深圳中介平台房源价格被要求仍按指导价公示

2023-04-24

阿尔特: 2023年一季度报告|全球快看点

2023-04-24

【环球快播报】马上动!泰州这幅地块新消息!

2023-04-24

浙矿股份2022年度拟10派3元

2023-04-24

NBA季后赛:森林狼加时险胜掘金总分1-3 爱德华兹34+6送制胜三分

2023-04-24

赫什:援乌武器流入黑市,西方心知肚明却缄口不言

2023-04-24

子建指的是谁_子建

2023-04-24

小三阳是指哪三项阳性_乙型肝炎病毒表面抗体高是什么意思 每日看点

2023-04-24

宣泰医药(688247)4月24日主力资金净买入1503.75万元_天天新视野

2023-04-24

沈阳市到鞍山千山自驾游线路(沈阳到鞍山自驾的费用)|环球新视野

2023-04-24

人间仙境,诗画桃源欢迎您|新要闻

2023-04-24

春日骑行感受虹口魅力,这家商场开启户外生活季|全球热头条

2023-04-24

观热点:2023年中国现代养殖业市场现状及发展趋势分析 发展模式已成型【组图】

2023-04-24

世界简讯:中金公司:丁基胶有望成光伏封装领域重要材料

2023-04-24

“新冠”冲上热搜,多地网友“二阳”了? 今日热议

2023-04-24

类似顾漫的小说作家_类似顾漫的小说

2023-04-24

富德生命人寿呼伦贝尔中支快速理赔11万元

2023-04-24

天天观速讯丨是否惊讶维金斯复出后的表现?卢尼:不 他是超人

2023-04-24

喝红枣水会减肥吗_饮用红枣水有减肥瘦身效果吗

2023-04-24

不负春光加速跑 常州一季度经济指标增幅持续领跑苏南

2023-04-24

“倍轻松”不轻松!上市第二年就巨亏了-每日速看

2023-04-24

全球即时看!天风证券给予天奈科技买入评级,23Q1 利润率下降明显,看好后续单壁管放量

2023-04-24

山东德州天衢新区颁发首张“集群注册”营业执照

2023-04-24

常熟5月起试点发数字人民币工资 数字人民币落地实现新突破

2023-04-24

卢克-肖:我更愿意第一个罚点球 我们知道必须反弹|全球视点

2023-04-24

拾起一路的记忆-今日热闻

2023-04-24

出圈类似的网络词汇_出圈是什么意思

2023-04-24

香港笼屋纪录片视频_香港笼屋|全球时讯

2023-04-24

天天最新:8部门发文推进IPv6技术演进和应用创新发展

2023-04-24

潮菜文化内涵_关于潮菜文化内涵介绍_环球新要闻

2023-04-24

每日看点!郝怎么读拼音是什么字(郝怎么读)

2023-04-24

天天速看:范丞丞坐小卡车走红毯 究竟为了什么?

2023-04-24

环球最资讯丨律师解读企业要求员工更换宝马车具体详细内容是什么

2023-04-24

冰箱温度怎么调最佳又省电_冰箱温度怎么调-当前报道

2023-04-23

老人称借名购房因女儿涉案被查封,提执行异议被驳回后上诉-焦点快看

2023-04-23

全球热议:王一博《长空之王》独白曲MV 毛不易演唱、韩寒作词

2023-04-23

焦点要闻:梁平区启动“4·23”全民阅读系列活动

2023-04-23

环球速递!厦门保障房剩余房源查询官网

2023-04-23

页游助手哪个好 每日速看

2023-04-23

拾花摄婚纱摄影STUDIOS 当前观点

2023-04-23

花蛤的清洗和制作_花蛤的清洗

2023-04-23

当前视点!新浪微博注册必须身份认证_新浪微博注册

2023-04-23

世界百事通!祝福祖国的成语接龙_祝福祖国的成语

2023-04-23

中新网直播完整视频!全国烧烤大PK 延吉烧烤申请出战-微动态

2023-04-23

坚持“智能+双碳”发展战略 昇辉科技氢能业务获阶段性进展 快报

2023-04-23

全球最资讯丨3dmax怎么读_max怎么读

2023-04-23

世界热推荐:成本结构怎么写--模板(成本结构)

2023-04-23

赣锋锂业董秘回复:公司利润分配预案尚待提交2022年度股东大会审议,具体信息请留意公司后续披露的相关公告

2023-04-23

构建数据中台:提高企业数据价值的关键_全球快看

2023-04-23

弱碱性矿泉水和苏打水的区别_弱碱性矿泉水_快播报

2023-04-23

9年造出一辆车,贾跃亭的造车梦,是否让你“窒息”?

2023-04-23

怀孕吃西红柿对宝宝有什么好处和坏处_怀孕吃西红柿有什么好处

2023-04-23

赛尔号网址是什么(赛尔号网址) 全球热头条

2023-04-23

天天观速讯丨阿根廷总统费尔南德斯宣布不寻求连任

2023-04-23

小孩上初一叛逆期怎么管教? 世界微资讯

2023-04-23

每日信息:紧急!路口轿车突然冒烟“蹿火”,他们迅速冲了过去……

2023-04-23

手机细菌的存在情况是什么?手机细菌的危害有多大?

2023-04-23

武警第一机动总队:用强军文化滋养官兵心田

2023-04-23

热症漫画_热症

2023-04-23

每日看点!牛油果发黑可以吃吗?牛油果怎么保存的时间更长?

2023-04-23

全球热门:国乒大获全胜!外战2连胜,王楚钦4-0暴击日本一哥,马龙4-1黑马

2023-04-23

现代IONIQ 5 N将于今年7月首发亮相 搭载前后双电机

2023-04-23

频发的枪支暴力 撕裂的美式民主|世界简讯

2023-04-23

全球即时:展现经济活力,众多新产品集中亮相第133届广交会

2023-04-23

全国生态保护红线全面划定 全线不低于315万平方公里 动态

2023-04-23

立体画怎么画 房子 立体画怎么画 世界看点

2023-04-23

过去24小时全网爆仓3591.68万美元

2023-04-23

天眼查登记的诉讼信息何时消除(天眼查登录入口) 每日观点

2023-04-23

小学生零花钱调查报告表_小学生零花钱调查报告-世界快资讯

2023-04-23

环球热文:如何建造嵌入式储物柜_圣诞节送男朋友的手工礼物

2023-04-23

热讯:中航货运航空有限公司_航空运输公司

2023-04-23

四川新闻联播|超百亿元化工新材料项目落户达州 全球快播报

2023-04-23

真我11 Pro+真机照出炉:圆形镜组、白色素皮后盖

2023-04-23

看点:淀粉和生粉的区别_淀粉和生粉的区别是什么

2023-04-23

预计将有近百家品牌亮相!海口国兴里计划今年秋季前开业_热点

2023-04-23

当前消息!现代项目管理(第三版) 戴大双

2023-04-23

2023上海车展:奥迪S4 Avant正式首发亮相-今日看点

2023-04-23

当前看点!公司传真号码怎么查询 传真号码大全

2023-04-23

全球即时看!俄罗斯国防部22日发布战报称,俄军经过激战控制了巴赫穆特市西部的三个街区

2023-04-23

住房公积金查询账户明细(住房公积金查询账户)

2023-04-23

斯科特·齐佩菲尔德_关于斯科特·齐佩菲尔德简介|热消息

2023-04-23

嫩红素可靠吗_嫩红素知乎-环球观天下

2023-04-22

新资讯:雁塔二中召开初2023届中考体育考试动员大会

2023-04-22

今年一季度新疆霍尔果斯口岸进出口货运量超800万吨

2023-04-22

当前聚焦:电影活埋剧情解析_电影活埋结局是什么

2023-04-22

暴雪!大雪!重大气象信息专报,气温还要再降 每日关注

2023-04-22

珍爱地球 人与自然和谐共生!广东科学中心举办世界地球日环保主题活动_今日热闻

2023-04-22

全球今日报丨童心绘绿色 迎接地球日

2023-04-22

水落石出的意思10字_水落石出的意思

2023-04-22

环球实时:俄罗斯别尔哥罗德市又现爆炸物 约3000名居民被转移

2023-04-22

3年内培训乡村农业人才500万 中公教育推出“未来乡村计划”

2023-04-22

缅怀!林巧稚逝世40周年

2023-04-22

黄山市公积金管理中心汪秀美_黄山市公积金管理中心 焦点速递

2023-04-22