郑州电子商务网站建设,app的设计与开发,hexo发布wordpress,企业 门户型网站区别相关文章Natasha 4.0 探索之路系列(一) 概况Natasha 4.0 探索之路系列(二) 「域」与插件Natasha 模板Natasha 在编译单元的基础上进行了封装整理, 并提供了多种模板帮助开发者构建功能.使用此篇的 API 前提是您对 C# 非常熟悉, 对系统的一些类型足够了解.据此 Natasha 将拒绝与… 相关文章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;/// /summarypublic class Nee7e202ee18c413dacae62af6b106c6e*/.PublicReadonlyFieldint(ReadonlyField)//public readonly System.Int32 ReadonlyField;.Ctor(item item.Public().Body(ReadonlyField 10;))/*public Nee7e202ee18c413dacae62af6b106c6e(){ReadonlyField 10;}*/.PrivateFieldstring(_name, [MyTestAttribute])//[MyTestAttribute]//private System.String _name;.Property(item item.Public().AttributeMyTestAttribute().Typestring().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).Paramstring(name).Body(_name name;return _name;).ReturnTaskstring())/*public virtual async System.Threading.Tasks.TaskSystem.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.AttributeAppendFieldOffsetAttribute(0).Public().Name(Apple).Typeint(); }).Field(item { item.AttributeAppendFieldOffsetAttribute(0).Public().Name(Orange).Typeint(); }).GetType();var script builder.AssemblyBuilder.SyntaxTrees[0].ToString();创建枚举//创建以下枚举/*public enum EnumUT1{/// summary/// 苹果/// /summaryApple 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.Typestring().Name(Abc)).Method(item item.Name(Test).Paramstring(p).Returnint()).GetType();var script builder.AssemblyBuilder.SyntaxTrees[0].ToString();使用 NDelegate 快速创建委托NDelegate 实现了自定义委托/系统委托( Action Func ) 的创建方法.委托的参数名/参数类型/返回值与系统委托一一对应.针对系统委托,如果在添加方法体时还不清楚对应的参数名可以 F12 到对应的 Action/Func 定义中查看参数名.以下举例了常见的系统委托参数名ActionT1 定义的参数名为 obj; 而 ActionT1,T2 参数名为: arg1 , arg2;FuncT1,R 定义的参数名为 arg; 而 FuncT1,T2,R 参数名为: arg1 , arg2;使用代码:用法1: 自定义委托public delegate int TestDelegate(string value);var action NDelegate.RandomDomain().DelegateTestDelegate(return (valuehello).Length;);int result action(Hello);用法2: 系统委托var action NDelegate.RandomDomain()//创建非托管的异步委托,对应的系统委托: Funcstring, string, Taskstring.UnsafeAsyncFuncstring, string, Taskstring(return arg1 arg2;);string result await action(Hello, World1!);Assert.Equal(Hello World1!, result);另外,我将在这个目录下上传一些奇奇怪怪的构建,包括一些新科技的应用,和有趣的语义扩展. UT链接其他 API模板比起基础构建,除了提供了方便的链式 API ,还有 Using 管理.NoGlobalUsing()/UseGlobalUsing(): 是否使用默认(全局)域 using 覆盖.(默认使用)LoadDomainUsing()/NotLoadDomainUsing(): 是否加载模板所在随机域中的 using.(默认使用)结尾实际上 Natasha 模板是针对大部分 C# 的数据类型进行的基础封装, 还可以进一步定制封装,比如以 NClass 为基础创建一个 Web COntroller 模板, 如果需要其他扩展, 可以先了解一下源码结构,或与我讨论进行扩展.