将方法信息保留为属性



我正在创建自定义的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.
    }
}

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

很可能

您在OnBindingComplete之前访问UseMethod

但无论如何,为了防止这种情况,您可以执行以下操作:

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 });
    }
}

相关内容

  • 没有找到相关文章

最新更新