Задача создать интерфейс в 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);