Динамическое создание типа интерфейса
От: PeterPan Россия  
Дата: 13.08.10 13:59
Оценка:
Задача создать интерфейс в run-time.
Почему после объявления медода интерфейса, я не могу до него "добраться".
см. код ниже
            string outputdir = "c:\\";
            string fname = "Hello.World.dll";

            // Define the assembly name 
            AssemblyName bAssemblyName = new AssemblyName();
            bAssemblyName.Name = "Hello.World";
            bAssemblyName.Version = new System.Version(1, 2, 3, 4);

            // Define the new assembly and module 
            AssemblyBuilder bAssembly =
               System.AppDomain.CurrentDomain.DefineDynamicAssembly(bAssemblyName, 
                   AssemblyBuilderAccess.Save, outputdir);
            ModuleBuilder bModule = bAssembly.DefineDynamicModule(fname, true);

            TypeBuilder tInterface = bModule.DefineType("IFoo", 
               TypeAttributes .Abstract| TypeAttributes.Interface | TypeAttributes.Public);

            MethodBuilder methodBuilder = tInterface.DefineMethod("HelloWorld",
                MethodAttributes.Abstract | MethodAttributes.Virtual,
                typeof(void),
                Type.EmptyTypes);

            Type tInt = tInterface.CreateType();

            if(tInt.GetMethods() == null)
                throw new Exception("Я же объявил метод, где он?");


Превосхищая вопрос "зачем?" напишу:
Для того чтобы позже при реалиации интерфейса перегрузить этот метод


    typeBuilder = modBuilder.DefineType(typeName,
             TypeAttributes.Public |TypeAttributes.Class,
             null, tInt);

    methodBuilder = typeBuilder.DefineMethod("HelloWorld",
        MethodAttributes.Public | MethodAttributes.Virtual,
        typeof(void),
        Type.EmptyTypes);
           
     MethodInfo helloWorldMehodInfo =
          tInt.GetMethod("HelloWorld");
     typeBuilder.DefineMethodOverride(methodBuilder, tInt);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.