Mercurial > pub > bltoolkit
diff Examples/CS/Reflection.Emit/HelloWorld.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Examples/CS/Reflection.Emit/HelloWorld.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,48 @@ +//@ example: +//@ emit Emit +using System; + +using NUnit.Framework; + +using BLToolkit.Reflection; +using BLToolkit.Reflection.Emit; + +namespace Examples.Reflection.Emit +{ + [TestFixture] + public class HelloWorld + { + public interface IHello + { + void SayHello(string toWhom); + } + + [Test] + public void Test() + { + EmitHelper emit = new AssemblyBuilderHelper("HelloWorld.dll") + .DefineType ("Hello", typeof(object), typeof(IHello)) + .DefineMethod(typeof(IHello).GetMethod("SayHello")) + .Emitter; + + /*[a]*/emit/*[/a]*/ + // string.Format("Hello, {0}!", toWhom) + // + ./*[a]*/ldstr/*[/a]*/ ("Hello, {0}!") + ./*[a]*/ldarg_1/*[/a]*/ + ./*[a]*/call/*[/a]*/ (typeof(string), "Format", typeof(string), typeof(object)) + + // Console.WriteLine("Hello, World!"); + // + ./*[a]*/call/*[/a]*/ (typeof(Console), "WriteLine", typeof(string)) + ./*[a]*/ret/*[/a]*/() + ; + + Type type = emit.Method.Type.Create(); + + IHello hello = (IHello)TypeAccessor.CreateInstance(type); + + hello.SayHello("World"); + } + } +}