我有一个恼人的情况,即方法以完全信任的方式运行代码,方法的后期绑定调用会抛出MethodAccessException。 情况如下:

我有一个基类,它按照惯例映射一些事件处理逻辑,这些处理程序使用通过发出IL代码创建的动态方法调用,遵循本教程: http//www.codeproject.com/KB/cs/dynamicmethoddelegates.aspx

//in AssemblyA.dll:
public abstract class Base : IEventHandler
{
    protected static void RegisterDerivedType(Type derived)
    {
        //create list of delegates to invoke event handlers 
    }

    void IEventHandler.Handle(IEvent e)
    {
        //late bound invocation of appropriate handler method (e.g. EventX 
        //or EventY)
        //this code throws a MethodAccessException
    }
}

//in assemblyB.dll
public class Derived : Base
{
    static Derived()
    {
        RegisterDerivedType(typeof(Derived));
    }

    private void OnEventX(EventX e) //EventX is derived of IEvent
    { }

    private void OnEventY(EventY e) //EventY is derived of IEvent
    { }
}

为什么我无法使用动态方法来调用私有成员?

===============>>#1 票数:3 已采纳

DynamicMethod仍然遵循规则! 要使它弯曲,必须(在创建DynamicMethod )将owner参数指定为声明私有方法类型 ; 那么您就可以有效地运行,就好像您在该类型中一样。 所以:

var method = new DynamicMethod(
      name, returnType, parameterTypes, declaringType, true);

(或接受owner任何类似重载)

  ask by Bas translate from so

未解决问题?本站智能推荐: