public void ReplicateBaseTypeConstructors() { var classEmitter = new CustomClassEmitter(Scope, "ReplicateBaseTypeConstructors", typeof(ClassWithReplicatableConstructors)); var fieldReference = new FieldInfoReference(SelfReference.Self, typeof(ClassWithReplicatableConstructors).GetField("CtorString")); var concatMethod = typeof(string).GetMethod("Concat", new[] { typeof(string), typeof(string) }); var preConcatExpression = new MethodInvocationExpression(null, concatMethod, fieldReference.ToExpression(), new ConstReference("pre").ToExpression()); var postConcatExpression = new MethodInvocationExpression(null, concatMethod, fieldReference.ToExpression(), new ConstReference("post").ToExpression()); classEmitter.ReplicateBaseTypeConstructors( emitter => emitter.CodeBuilder.AddStatement(new AssignStatement(fieldReference, preConcatExpression)), emitter => emitter.CodeBuilder.AddStatement(new AssignStatement(fieldReference, postConcatExpression))); Type builtType = classEmitter.BuildType(); var instance1 = (ClassWithReplicatableConstructors)Activator.CreateInstance(builtType); // default ctor Assert.That(instance1.CtorString, Is.EqualTo("preClassWithReplicatableConstructors()post")); var instance2 = (ClassWithReplicatableConstructors)Activator.CreateInstance(builtType, 7); // int ctor Assert.That(instance2.CtorString, Is.EqualTo("preClassWithReplicatableConstructors(7)post")); }