【资料图】
模板类的使用,类似于Lambda
| 类名 | 作用 | 命名空间 | 操作类型 |
|---|---|---|---|
| NAssembly | 快速创建同程序集的 oop 及委托等操作类 | 全局 | 静态初始化,动态实例化 |
| NInstance | 根据类型,提供一个初始化实例的委托 | 全局 | 静态 |
| NDelegate | 快速创建指定域的 Action/Func 委托 | 全局 | 静态初始化,动态实例化 |
| NClass | 快速创建一个公有类 | 全局 | 静态初始化,动态实例化 |
| NInterface | 快速创建一个公有接口 | 全局 | 静态初始化,动态实例化 |
| NEnum | 快速创建一个枚举类 | 全局 | 静态初始化,动态实例化 |
| NRecord | 快速创建一个记录类 | 全局 | 静态初始化,动态实例化 |
| NStruct | 快速创建一个结构体 | 全局 | 静态初始化,动态实例化 |
| FakeMethodOperator | 仿造 MethodInfo 创建方法 | Natasha.CSharp | 静态初始化,动态实例化 |
| FastMethodOperator | 快速创建方法 | Natasha.CSharp | 静态初始化,动态实例化 |
感觉该类的使用频率会比较高
注意: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 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());运行结果
应该是快速生成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()); 执行结果
未完待续。。。
下一篇:最后一页
X 关闭
X 关闭
中新网上海3月30日电 (记者 陈静)上海正面临常态化防控以来疫情形势最严峻复杂的挑战,单日新增阳性感染者数量不断刷新纪录。记者30
中新网3月30日电 据国家地震台网官方微博消息,中国地震台网正式测定:3月30日18时14分在新疆和田地区皮山县(北纬36 01度,东经77 89
上海市委常委会今天上午(3月30日)举行会议,听取当前疫情应急处置和核酸筛查相关工作汇报,研究部署下一步疫情防控重点工作。市委书记
(抗击新冠肺炎)江苏无锡一男子隐匿行程轨迹被警方立案侦查 中新网无锡3月30日电 (记者 孙权)3月30日,无锡市在“应检尽检”人员核
(抗击新冠肺炎)官方称吉林市疫情扩散势头得到遏制 中新网吉林3月30日电 (记者 石洪宇)记者30日从吉林市政府新闻办召开的疫情防控
中新网唐山3月30日电 (白云水 孟潮)3月30日,河北省唐山市召开新冠肺炎疫情防控工作新闻发布会通报称,3月29日0时至24时,唐山市新增
浙江省嘉兴市秀洲区新型冠状病毒感染肺炎疫情防控指挥部办公室发布通告: 3月30日上午,秀洲区发现1例新冠肺炎阳性感染者,该感染者
今天(3月30日)下午,新疆乌鲁木齐市人民政府新闻办公室召开疫情防控新闻发布会,通报乌鲁木齐市新冠肺炎疫情和疫情防控最新情况。会上
中新网天津3月30日电 (记者 王君妍)记者30日从天津市水务局获悉,为充分发挥河湖长制优势,近日,天津市将南水北调中线天津干线(天津
(抗击新冠肺炎)河北廊坊累计治愈出院673例 5县区恢复域内交通 中新网廊坊3月30日电 (宋敏涛 郭京泉)30日,河北省廊坊市召