public void TestExceptionHandling() { //try catch //try finally //throw var c = new CodeDomGenerator(); c.AddNamespace("Samples").AddClass("cls") .AddMethod(MemberAttributes.Public | MemberAttributes.Static, typeof(string), () => "foo", Emit.trycatch(Emit.@throw(() => new ApplicationException())) .AddCatch(typeof(ApplicationException), "ex", Emit.@return(() => "ok") ) .AddFinally(Emit.stmt(() => Console.WriteLine()))) ; Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp)); Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB)); var ass = c.Compile(); Assert.IsNotNull(ass); Type TestClass = ass.GetType("Samples.cls"); Assert.IsNotNull(TestClass); }
public void Builder_Interface() { var c = new CodeDomGenerator(); c.AddNamespace("Samples") .AddClass(Define.Class("TestClass", TypeAttributes.Public) .Implements(typeof(IDisposable)) .AddMethod(MemberAttributes.Private, () => "Dispose", Emit.@throw(() => new NotImplementedException()) ).Implements(typeof(IDisposable)) ).AddInterface(Define.Interface("Ixxx") .AddMethod(MemberAttributes.Public, () => "First") .AddMethod(MemberAttributes.Public, typeof(DateTime), () => "Second") .AddProperty("TestClass", MemberAttributes.Public, "Third") .AddGetProperty("TestClass", MemberAttributes.Public, "Fifth") .AddEvent(typeof(EventHandler), MemberAttributes.Public, "Fourth") ).AddClass("xxx").Implements(new CodeTypeReference("Ixxx")) .AddMethod(MemberAttributes.Private, () => "First", Emit.@throw(() => new NotImplementedException()) ).Implements(new CodeTypeReference("Ixxx")) .AddMethod(MemberAttributes.Public, typeof(DateTime), () => "Second", Emit.@throw(() => new NotImplementedException()) ).Implements(new CodeTypeReference("Ixxx")) .AddProperty("TestClass", MemberAttributes.Public, "Third", CodeDom.CombineStmts(Emit.@throw(() => new NotImplementedException())), Emit.@throw(() => new NotImplementedException()) ).Implements("Ixxx") .AddGetProperty("TestClass", MemberAttributes.Public, "Fifth", Emit.@throw(() => new NotImplementedException()) ).Implements(new CodeTypeReference("Ixxx")) .AddEvent(typeof(EventHandler), MemberAttributes.Public, "Fourth" ).Implements("Ixxx") .AddField(typeof(int), "_z", () => 100) ; Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp)); Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB)); var ass = c.Compile(); Assert.IsNotNull(ass); Type TestClass = ass.GetType("Samples.TestClass"); Assert.IsNotNull(TestClass); ass = c.Compile(CodeDomGenerator.Language.VB); Assert.IsNotNull(ass); TestClass = ass.GetType("Samples.xxx"); Assert.IsNotNull(TestClass); }
public void Builder_Property() { var c = new CodeDomGenerator(); c.AddNamespace("Samples").AddClass(Define.Class("TestClass") .AddFields( Define.Field(MemberAttributes.Private, typeof(string), "_s") ) .AddProperty( Define.Property(typeof(string), MemberAttributes.Public, "Test", CodeDom.CombineStmts(Emit.@return(() => [email protected] <string>("_s"))), Emit.assignField("_s", (string value) => value) ) ) .AddProperty( Define.Property(typeof(string), MemberAttributes.Public, "Test2", "_s") ) .AddProperty(typeof(string), MemberAttributes.Public, "Test3", "_s") .AddProperty("TestClass", MemberAttributes.Public, "Test4", CodeDom.CombineStmts(Emit.@return(() => CodeDom.@this)), Emit.@throw(() => new NotImplementedException( CodeDom.Property <string>(CodeDom.VarRef("value"), "Test") )) ) .AddMethod(MemberAttributes.Public, typeof(string), (int a) => "Test1", Emit.assignProperty("Test", () => Guid.NewGuid().ToString()), Emit.@return((int a) => a.ToString() + [email protected] <string>("Test"))) ); Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp)); Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB)); var ass = c.Compile(); Assert.IsNotNull(ass); Type TestClass = ass.GetType("Samples.TestClass"); Assert.IsNotNull(TestClass); object t = TestClass.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, null); Assert.IsNotNull(t); string s = TestClass.InvokeMember("Test1", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod, null, t, new object[] { 4 }) as string; Assert.IsNotNull(s); string TestProperty = s.Substring(1); Assert.AreEqual(TestProperty, TestClass.InvokeMember("Test", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty, null, t, null)); }