Natasha 高级编译类 (五)- 第一部分_环球新视野
来源:博客园 时间:2023-04-24 21:09:41
【资料图】
模板类的使用,类似于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 高级编译类 (五)- 第一部分_环球新视野
- 识货app(识货app)_天天微动态
- 无海胜似海 江西这个宝藏旅游地藏不住啦 世界速看料
- 绿军在拿到2比1大比分领先的情况下前往客场挑战老鹰队
- 金地为西安项目公司7.5亿元贷款融资提供担保-今日热搜
- 时间和空间折叠_空间折叠_每日速读
- 安阳县白璧镇:农机服务送下乡 购置补贴进家门
- 每日视点!拟IPO|树根互联:根云实力迸发!加快数字化转型,提升企业竞争力
- 【新视野】sss级死而复生第160章
- 时光小镇女友家好玩吗 时光小镇女友家玩法简介
- 环球微动态丨【风口解读】河钢股份发行不超100亿元公司债券获批,或短期偿债压力较大
- 研究证实蔓越莓产品可预防女性尿路感染 观热点
- 港股异动 | 浪潮数字企业(00596)再跌超7% 3月至今累跌近40% 机构称华为自研ERP或重塑行业格局
- NVIDIA GeForce RTX 4070 与 4070 Ti:哪个 GPU 更有价值
- 财经周周看:宝马市值一夜蒸发约183亿
- 急诊室故事电视剧剧情_急诊室故事剧情介绍_每日关注
- 环球热资讯!*ST新文(300336)4月24日主力资金净买入273.35万元
- 信用卡暂时没有还款能力怎么办?会坐牢吗?
- Jiangsu holds variety of activities for reading festival
- 世界简讯:保利发展:一季度营收净利双增 货币资金降逾200亿
- 4月24日 11:03分 久其软件(002279)股价快速拉升
- 武清区故意伤害罪怎么判|世界头条
- 世界热推荐:自信心起来了!森林狼主场球迷高喊“抢七晋级!”
- 天天播报:合肥市庐阳区:“三个聚焦”激活机关党建新动能
- 宜丰县气象台发布雷电黄色预警信号【III级/较重】|世界快消息
- 信达证券:给予中际旭创评级
- 四川四姑娘山海子沟景区门票价格(附优惠政策)-全球速讯
- 东吴证券:给予桐昆股份买入评级
- 每日消息!宁德时代:公司正致力推进钠离子电池在2023年实现产业化 将首发奇瑞车型
- 匠心家居:4月21日融资买入554.38万元,融资融券余额3462.52万元
x
广告
x
广告