示例#1
0
        public void CallBaseConstructorNonGeneric()
        {
            AssemblyBuilder assembly = Errors.DefineDynamicAssembly();

            ModuleBuilder module = assembly.DefineDynamicModule("RuntimeModule");

            TypeBuilder type = module.DefineType("Class", TypeAttributes.Class, typeof(ClassWithCtor));

            Sigil.NonGeneric.Emit ctor = Sigil.NonGeneric.Emit.BuildConstructor(Type.EmptyTypes, type, MethodAttributes.Public);

            ConstructorInfo baseCtor = typeof(ClassWithCtor).GetConstructor(new[] { typeof(string) });

            ctor.LoadArgument(0);
            ctor.LoadConstant("abc123");
            ctor.Call(baseCtor);
            ctor.Return();
            ctor.CreateConstructor();

            Type createdType = type.CreateType();

            ClassWithCtor instance = (ClassWithCtor)Activator.CreateInstance(createdType);

            Assert.IsInstanceOf(createdType, instance);
            Assert.AreEqual("abc123", instance.Value);
        }
示例#2
0
        public void CallBaseConstructor()
        {
            AssemblyBuilder assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("SigilTests_CallBaseConstructor"),
                                                                                     AssemblyBuilderAccess.RunAndCollect);

            ModuleBuilder module = assembly.DefineDynamicModule("RuntimeModule");

            TypeBuilder type = module.DefineType("Class", TypeAttributes.Class, typeof(ClassWithCtor));

            Emit <Action> ctor = Emit <Action> .BuildConstructor(type, MethodAttributes.Public);

            ConstructorInfo baseCtor = typeof(ClassWithCtor).GetConstructor(new[] { typeof(string) });

            ctor.LoadArgument(0);
            ctor.LoadConstant("abc123");
            ctor.Call(baseCtor);
            ctor.Return();
            ctor.CreateConstructor();

            Type createdType = type.CreateType();

            ClassWithCtor instance = (ClassWithCtor)Activator.CreateInstance(createdType);

            Assert.IsInstanceOfType(instance, createdType);
            Assert.AreEqual("abc123", instance.Value);
        }