public void TestStruct1() { NStruct builder = NStruct.RandomDomain(); var script = builder .CustomUsing() .HiddenNamespace() .Attribute("[StructLayout(LayoutKind.Explicit)]") .Access(Natasha.Reverser.Model.AccessTypes.Public) .Name("EnumUT1") .Field(item => { item.Attribute <FieldOffsetAttribute>("0").Public().Name("Apple").Type <int>(); }) .Field(item => { item.Attribute <FieldOffsetAttribute>("0").Public().Name("Orange").Type <int>(); }) .Script; Assert.Equal($"using System.Runtime.InteropServices;{Environment.NewLine}using System;{Environment.NewLine}[StructLayout(LayoutKind.Explicit)]{Environment.NewLine}public struct EnumUT1{{{Environment.NewLine}[System.Runtime.InteropServices.FieldOffsetAttribute(0)]{Environment.NewLine}public System.Int32 Apple;{Environment.NewLine}[System.Runtime.InteropServices.FieldOffsetAttribute(0)]{Environment.NewLine}public System.Int32 Orange;{Environment.NewLine}}}", script); Assert.NotNull(builder.GetType()); }
public void TestStruct() { NStruct builder = NStruct.RandomDomain(); var script = builder .CustomUsing() .HiddenNamespace() .Access(Natasha.Reverser.Model.AccessTypes.Public) .Name("EnumUT1") .Field(item => { item.Public().Name("Apple").Type <int>(); }) .Field(item => { item.Public().Name("Orange").Type <string>(); }) .Property(item => { item.Public().Name("Banana").Type <NClass>(); }) .Script; Assert.Equal($"using System;{Environment.NewLine}using Natasha.CSharp;{Environment.NewLine}public struct EnumUT1{{{Environment.NewLine}public System.Int32 Apple;{Environment.NewLine}public System.String Orange;{Environment.NewLine}public Natasha.CSharp.NClass Banana{{{Environment.NewLine}get;{Environment.NewLine}set;{Environment.NewLine}}}{Environment.NewLine}}}", script); Assert.NotNull(builder.GetType()); }
public static void Show() { //默认共享域 NStruct nStruct = new NStruct(); //nStruct // .Namespace("Core30") // .OopName("Test") // .Ctor(builder => builder // .MemberAccess(AccessTypes.Public) // .Param<string>("name") // .Body("Name=name;")) // .PublicField<string>("Name"); //var type = nStruct.GetType(); var domain1 = DomainManagment.Create("TempDomain"); // nStruct = new NStruct(); // nStruct // .Namespace("Core30") // .OopName("Test1") // .Ctor(builder => builder // .MemberAccess(AccessTypes.Public) // .Param<string>("name") // .Body(@"Name=name+""1"";")) // .PublicField<string>("Name"); //var type1 = nStruct.GetType(); // domain1.RemoveType(type1); // nStruct = new NStruct(); // nStruct // .Namespace("Core30") // .OopName("Test") // .Ctor(builder => builder // .MemberAccess(AccessTypes.Public) // .Param<string>("name") // .Body(@"Name=name+""2"";")) // .PublicField<string>("Name"); // var type3 = nStruct.GetType(); // domain1.RemoveType(type3); nStruct = new NStruct(); nStruct.Complier.Domain = domain1; nStruct .Namespace("Core30") .OopName("Test") .Ctor(builder => builder .MemberAccess(AccessTypes.Public) .Param <string>("name") .Body(@"Name=name+""3"";")) .PublicField <string>("Name"); var type4 = nStruct.GetType(); //nStruct = new NStruct(); //nStruct // .InDomain(domain1) // .Namespace("Core30") // .OopName("Test") // .Ctor(builder => builder // .MemberAccess(AccessTypes.Public) // .Param<string>("name") // .Body(@"Name=name+""1"";")) // .PublicField<string>("Name"); //var type2 = nStruct.GetType(); var temp = FastMethodOperator.New; temp.Complier.Domain = domain1; temp //.Using<Test>() //.Using(type) .Using(type4) //.MethodAttribute<MethodImplAttribute>("MethodImplOptions.NoInlining") .MethodBody(@" Test obj = new Test(""Hello World!""); Console.WriteLine(obj.Name);" ); action = temp.Complie <Action>(); action(); DomainManagment.Get("TempDomain").Dispose(); }