Ejemplo n.º 1
0
        public void AddForwardingImplicitInterfaceMethod(MethodInfo methodInfo)
        {
            ArgumentUtility.CheckNotNull("methodInfo", methodInfo);
            var methodEmitter = _classEmitter.CreatePublicInterfaceMethodImplementation(methodInfo);

            ImplementForwardingMethod(methodInfo, methodEmitter);
        }
Ejemplo n.º 2
0
        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!"));
        }
Ejemplo n.º 3
0
        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));
        }