public static void MakerStaticCode2() { var builder = FakeMethodOperator.Default() .UseMethod(typeof(OopTestModel).GetMethod("ReWrite2")) .StaticMethodContent(@"Console.WriteLine(""hello world"");return this;") .Builder(); Assert.Equal($@"public static async System.Threading.Tasks.Task<NatashaUT.Model.OopTestModel> ReWrite2() {{ Console.WriteLine(""hello world"");return this;{Environment.NewLine} }}", builder.MethodScript); }
public static void MakerStaticCode3() { var builder = FakeMethodOperator.Default(); builder .UseMethod(typeof(OopTestModel).GetMethod("ReWrite3")) .StaticMethodContent(@"i++;temp+=i.ToString();") .Builder(); Assert.Equal($@"public static void ReWrite3(ref System.Int32 i,System.String temp) {{ i++;temp+=i.ToString();{Environment.NewLine} }}", builder.MethodScript); }
public static void MakerStaticCode1() { var builder = FakeMethodOperator.Default(); builder .UseMethod(typeof(OopTestModel).GetMethod("ReWrite1")) .StaticMethodContent(@"Console.WriteLine(""hello world"");") .Builder(); Assert.Equal($@"public static void ReWrite1() {{ Console.WriteLine(""hello world"");{Environment.NewLine} }}", builder.MethodScript); }
static void Main(string[] args) { if (args == null) { throw new ArgumentNullException(nameof(args)); } var action = FastMethodOperator.Default() .MethodBody("return 1+1;") .Return <int>() .Complie <Func <int> >(); action(); FakeMethodOperator.Default() .UseMethod <TestB>("TestMethod") .StaticMethodContent($@"Console.WriteLine(""Hello World!"");") .Complie <Action>(); FakeMethodOperator.Default() .UseMethod <TestB>("TestMethod") .MethodContent($@"Console.WriteLine(""Hello World!"");") .Complie <Action>(new TestA()); /* * 在此之前,你需要右键,选择工程文件,在你的.csproj里面 * * 写上这样一句浪漫的话: * * <PreserveCompilationContext>true</PreserveCompilationContext> */ //ProxyOperator<TestAbstract> abstractBuilder = new ProxyOperator<TestAbstract>(); //abstractBuilder.OopName("UTestClass"); //abstractBuilder["GetName"] = "return Name;"; //abstractBuilder["GetAge"] = "return Age;"; //abstractBuilder.Compile(); //var test = abstractBuilder.CreateProxy("UTestClass"); //var delegate2 = NDelegateOperator<GetterDelegate>.Delegate("return value.ToString();"); //Console.WriteLine(delegate2(1)); //var delegate3 = "return value.ToString();".Delegate<GetterDelegate>(); //var delegateConvt = FastMethodOperator.Create() // .Param<string>("value") // .MethodBody($@"return value==""true"" || value==""mama"";") // .Return<bool>() // .Complie<Func<string, bool>>(); //Console.WriteLine(delegateConvt("mama")); DynamicMethod method = new DynamicMethod("GetString", null, new Type[] { typeof(TestB), typeof(string) }); ILGenerator il = method.GetILGenerator(); il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldarg_1); il.Emit(OpCodes.Stfld, typeof(TestB).GetField("Name")); il.Emit(OpCodes.Ret); var emitAction = (Action <TestB, string>)(method.CreateDelegate(typeof(Action <TestB, string>))); var roslynAction = FastMethodOperator.Default() .Param <TestB>("instance") .Param <string>("value") .MethodBody("instance.Name = value;") .Return() .Complie <Action <TestB, string> >(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Restart(); for (int i = 0; i < 50000; i++) { var tEntity = new TestB(); roslynAction(tEntity, "abc"); } stopwatch.Stop(); Console.WriteLine("Roslyn:\t" + stopwatch.Elapsed); stopwatch.Restart(); for (int i = 0; i < 50000; i++) { var tEntity = new TestB(); emitAction(tEntity, "abc"); } stopwatch.Stop(); Console.WriteLine("Emit:\t" + stopwatch.Elapsed); stopwatch.Restart(); for (int i = 0; i < 50000; i++) { var tEntity = new TestB(); roslynAction(tEntity, "abc"); } stopwatch.Stop(); Console.WriteLine("Roslyn:\t" + stopwatch.Elapsed); stopwatch.Restart(); for (int i = 0; i < 50000; i++) { var tEntity = new TestB(); emitAction(tEntity, "abc"); } stopwatch.Stop(); Console.WriteLine("Emit:\t" + stopwatch.Elapsed); Console.ReadKey(); }