public void AddForwardingImplicitInterfaceMethod(MethodInfo methodInfo) { ArgumentUtility.CheckNotNull("methodInfo", methodInfo); var methodEmitter = _classEmitter.CreatePublicInterfaceMethodImplementation(methodInfo); ImplementForwardingMethod(methodInfo, methodEmitter); }
public void CreatePublicInterfaceMethodImplementation() { var classEmitter = new CustomClassEmitter(Scope, "CreatePublicInterfaceMethodImplementation", typeof(object), new[] { typeof(ICloneable) }, TypeAttributes.Public | TypeAttributes.Class, false); var cloneMethod = classEmitter.CreatePublicInterfaceMethodImplementation(typeof(ICloneable).GetMethod("Clone")); cloneMethod.AddStatement(new ReturnStatement(new ConstReference("P0wned!"))); Type builtType = classEmitter.BuildType(); object instance = Activator.CreateInstance(builtType); Assert.That(((ICloneable)instance).Clone(), Is.EqualTo("P0wned!")); }
public void MethodNameAndVisibilityAreUnchangedOnPublicInterfaceImplementation() { var classEmitter = new CustomClassEmitter(Scope, "MethodNameAndVisibilityAreUnchangedOnPublicInterfaceImplementation", typeof(object), new[] { typeof(ICloneable) }, TypeAttributes.Public | TypeAttributes.Class, false); var method = classEmitter.CreatePublicInterfaceMethodImplementation(typeof(ICloneable).GetMethod("Clone", _declaredInstanceBindingFlags)); method.AddStatement(new ReturnStatement()); Type builtType = classEmitter.BuildType(); MethodInfo implementedMethod = builtType.GetMethod("Clone", _declaredInstanceBindingFlags); Assert.That(implementedMethod.Name, Is.EqualTo("Clone")); Assert.That(implementedMethod.IsPublic, Is.True); Assert.That(implementedMethod.IsFinal, Is.False); Assert.That(implementedMethod.Attributes & MethodAttributes.NewSlot, Is.EqualTo(MethodAttributes.NewSlot)); }