public void TestRefOutMethods() { IDynamicMethod refMethod = DynamicMethod.Create(typeof(MethodTarget).GetMethod("MethodWithRefParameter")); MethodTarget target = new MethodTarget(); object[] args = new object[] { "aleks", 5 }; refMethod.Invoke(target, args); Assert.AreEqual("ALEKS", args[0]); Assert.AreEqual(25, args[1]); IDynamicMethod outMethod = DynamicMethod.Create(typeof(MethodTarget).GetMethod("MethodWithOutParameter")); args = new object[] { "aleks", null }; outMethod.Invoke(target, args); Assert.AreEqual("ALEKS", args[1]); IDynamicMethod refOutMethod = DynamicMethod.Create(typeof(RefOutTestObject).GetMethod("DoIt")); RefOutTestObject refOutTarget = new RefOutTestObject(); args = new object[] { 0, 1, null }; refOutMethod.Invoke(refOutTarget, args); Assert.AreEqual(2, args[1]); Assert.AreEqual("done", args[2]); refOutMethod.Invoke(refOutTarget, args); Assert.AreEqual(3, args[1]); Assert.AreEqual("done", args[2]); int count = 0; string done; target.DoItCaller(0, ref count, out done); Assert.AreEqual(1, count); Assert.AreEqual("done", done); }
public void DoItCaller(int count, ref int reference, out string output) { InstanceMethod caller = new InstanceMethod(); RefOutTestObject target = new RefOutTestObject(); object[] args = new object[] { count, reference, null }; caller.InvokeDoIt(target, args); reference = (int)args[1]; output = (string)args[2]; }