将MethodInfo保留为属性

时间:2012-09-23 13:42:38

标签: c# reflection methodinfo

我正在创建一个自定义BindingSource,并希望将MethodInfo保存为私有字段。 问题,在代码中:

public class MyBindingSource : BindingSource
{

    private MethodInfo MyMethod= null;

    protected override void OnBindingComplete(BindingCompleteEventArgs e)
    {
         this.MyMethod = GetMyMethod();
         //MyMethod is not null here
    }

    void UseMyMethod (object value)
    {
        MyMethod.Invoke(SomeObject, new object[] { value });
        //MyMethod is null here, exception thrown.
    }

}

我成功存储了MethodInfo,但是,当我尝试使用它时,它最终为null。 没有调用特殊的构造函数(覆盖该字段)。 OnBindingComplete不会被调用两次。 似乎没有任何东西暗示其他东西将其设置为null。

1 个答案:

答案 0 :(得分:1)

您很可能在UseMethod

之前访问OnBindingComplete

但无论如何,为了防止这种情况,你可以这样做:

public class MyBindingSource : BindingSource
{
    private MethodInfo _myMethod = null;

    private MethodInfo MyMethod
    {
        get
        {
            if(_myMethod != null) return _myMethod;

            _myMethod = GetMyMethod();
            return _myMethod;
        }
    }

    protected override void OnBindingComplete(BindingCompleteEventArgs e)
    {
    }

    void UseMyMethod (object value)
    {
        MyMethod.Invoke(SomeObject, new object[] { value });
    }
}