2

カスタム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は2回呼び出されません。他の何かがそれをnullに設定していることを意味するものは何もないようです。

4

1 に答える 1

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 });
    }
}
于 2012-09-23T14:40:34.137 に答える