Natasha 4.0 探索之路系列(四) 模板 API
相關文章
Natasha 4.0 探索之路系列(一) 概況
Natasha 4.0 探索之路系列(二) 「域」與插件
Natasha 模板
Natasha 在編譯單元的基礎上進行了封裝整理, 并提供了多種模板幫助開發者構建功能.使用此篇的 API 前提是您對 C# 非常熟悉, 對系統的一些類型足夠了解.據此 Natasha 將拒絕與科普相關 C# 的 issue , 望諒解.目前已有的模板:
| NClass | 構建類型腳本 |
| NStuct | 構建結構體腳本 |
| NEnum | 構建枚舉腳本 |
| NInterface | 構建接口腳本 |
| NRecord | 構建記錄腳本 |
| NDelegate | 快速創建委托 |
| FastOperator | 快速創建方法的操作類 |
| FakeOperator | 方法復制的操作類 |
使用方法
創建類
//萬年不變的預熱NatashaInitializer.Preheating();//在隨機域內創建一個類型NClass?builder?=?NClass.RandomDomain();var?type?=?builder.Public().Summary("This is a test class;")/*namespace NatashaDynimacSpace{/// <summary>/// This is a test class;/// </summary>public class Nee7e202ee18c413dacae62af6b106c6e*/.PublicReadonlyField<int>("ReadonlyField")//public readonly System.Int32 ReadonlyField;.Ctor(item?=>?item.Public().Body("ReadonlyField = 10;"))/*public Nee7e202ee18c413dacae62af6b106c6e(){ReadonlyField = 10;}*/.PrivateField<string>("_name",?"[MyTestAttribute]")//[MyTestAttribute]//private System.String _name;.Property(item?=>?item.Public().Attribute<MyTestAttribute>().Type<string>().Name("NameProperty").OnlyGetter("return _name;"))/*[NatashaFunctionUT.Template.Compile.MyTestAttribute]public System.String NameProperty{get{return _name;}}*/.Property(item?=>?item.Public().Type("AnotherClass").Name("AnotherProperty"))//public AnotherClass AnotherProperty { get; set; }.Method(item?=>?item.Public().Virtrual().Async().Name("SetName").Param<string>("name").Body(@"_name = name;return _name;").Return<Task<string>>())/*public virtual async System.Threading.Tasks.Task<System.String> SetName(System.String name){_name = name;return _name;}*/.NamespaceBodyAppend("public class AnotherClass{}")/*public class AnotherClass{}*/.GetType();創建結構體
//創建一段如下的結構/*[StructLayout(LayoutKind.Explicit)]public struct EnumUT1{[System.Runtime.InteropServices.FieldOffsetAttribute(0)]public System.Int32 Apple;[System.Runtime.InteropServices.FieldOffsetAttribute(0)]public System.Int32 Orange;}";*/NStruct?builder?=?NStruct.RandomDomain();var?type?=?builder.HiddenNamespace().AttributeAppend("[StructLayout(LayoutKind.Explicit)]").Access(AccessFlags.Public).Name("EnumUT1").Field(item?=>?{?item.AttributeAppend<FieldOffsetAttribute>("0").Public().Name("Apple").Type<int>(); }).Field(item?=>?{?item.AttributeAppend<FieldOffsetAttribute>("0").Public().Name("Orange").Type<int>(); }).GetType();var?script?=?builder.AssemblyBuilder.SyntaxTrees[0].ToString();創建枚舉
//創建以下枚舉/*public enum EnumUT1{/// <summary>/// 蘋果/// </summary>Apple = 1,Orange = 2,Banana}*/NEnum?builder?=?NEnum.RandomDomain();var?type?=?builder.NoGlobalUsing().HiddenNamespace().Access(AccessFlags.Public).Name("EnumUT1").EnumField("Apple",?1,"蘋果").EnumField("Orange",?2).EnumField("Banana").GetType();var?script?=?builder.AssemblyBuilder.SyntaxTrees[0].ToString();創建接口
//創建以下接口/*using System;public interface Interface1{System.String Abc { get; set; }System.Int32 Test(System.String p);}*/var?builder?=?NInterface.RandomDomain();var?type?=?builder.NoGlobalUsing().HiddenNamespace().Access(AccessFlags.Public).Name("Interface1").Property(item?=>?item.Type<string>().Name("Abc")).Method(item?=>?item.Name("Test").Param<string>("p").Return<int>()).GetType();var?script?=?builder.AssemblyBuilder.SyntaxTrees[0].ToString();使用 NDelegate 快速創建委托
NDelegate 實現了自定義委托/系統委托( Action & Func ) 的創建方法.委托的參數名/參數類型/返回值與系統委托一一對應.針對系統委托,如果在添加方法體時還不清楚對應的參數名可以 F12 到對應的 Action/Func 定義中查看參數名.
以下舉例了常見的系統委托參數名
Action<T1> 定義的參數名為 obj; 而 Action<T1,T2> 參數名為: arg1 , arg2;
Func<T1,R> 定義的參數名為 arg; 而 Func<T1,T2,R> 參數名為: arg1 , arg2;
使用代碼:
用法1: 自定義委托
用法2: 系統委托
另外,我將在這個目錄下上傳一些奇奇怪怪的構建,包括一些新科技的應用,和有趣的語義擴展. UT鏈接
其他 API
模板比起基礎構建,除了提供了方便的鏈式 API ,還有 Using 管理.
NoGlobalUsing()/UseGlobalUsing(): 是否使用默認(全局)域 using 覆蓋.(默認使用)
LoadDomainUsing()/NotLoadDomainUsing(): 是否加載模板所在隨機域中的 using.(默認使用)
結尾
實際上 Natasha 模板是針對大部分 C# 的數據類型進行的基礎封裝, 還可以進一步定制封裝,比如以 NClass 為基礎創建一個 Web COntroller 模板, 如果需要其他擴展, 可以先了解一下源碼結構,或與我討論進行擴展.
總結
以上是生活随笔為你收集整理的Natasha 4.0 探索之路系列(四) 模板 API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#中的串口通信SerialPort
- 下一篇: 对C#未来的一点感悟