Как испустить явную интерфейсную реализацию с помощью reflection.emit?

Я думал, что это было аккуратно, когда я вывел xmlDocument () в маркировку, и это отобразило использование, это - xsl, преобразовывает.

27
задан Max Galkin 30 November 2009 в 22:56
поделиться

1 ответ

Это похоже на этот вопрос ...

Который указывает на MSDN :

Однако, чтобы предоставить отдельный реализация IM (), вы должны определить тело метода, а затем использовать Метод DefineMethodOverride для связать это тело метода с MethodInfo , представляющий IM (). В имя тела метода не имеет значение.

        // Build the method body for the explicit interface 
        // implementation. The name used for the method body 
        // can be anything. Here, it is the name of the method,
        // qualified by the interface name.
        //
        MethodBuilder mbIM = tb.DefineMethod("I.M", 
            MethodAttributes.Private | MethodAttributes.HideBySig |
                MethodAttributes.NewSlot | MethodAttributes.Virtual | 
                MethodAttributes.Final,
            null,
            Type.EmptyTypes);
        ILGenerator il = mbIM.GetILGenerator();
        il.Emit(OpCodes.Ldstr, "The I.M implementation of C");
        il.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", 
            new Type[] { typeof(string) }));
        il.Emit(OpCodes.Ret);

        // DefineMethodOverride is used to associate the method 
        // body with the interface method that is being implemented.
        //
        tb.DefineMethodOverride(mbIM, typeof(I).GetMethod("M"));
32
ответ дан 28 November 2019 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: