1

匿名メソッドをデリゲート パラメーターに渡すときのコードの読みやすさに関心があります。

                var touchListener = new TouchListener(
                down:(v, e) => 
                {
                    //Handle the down event
                },
                up:(v, e) =>
                {
                   //Handle the up event
                });

ご覧のとおり、これらの匿名メソッドが何をしているかがより明確になるように、パラメーターに down と up という名前を付けました。

わかりやすくするために TouchListener クラスを次に示します (これは MonoDroid に対して機能しますが、ここでは重要ではありません)。

    public class TouchListener : View.IOnTouchListener
{
    public delegate void OnTouchAction(View v, MotionEvent e);

    private OnTouchAction down;
    private OnTouchAction up;

    public TouchListener(OnTouchAction down, OnTouchAction up)
    {
        this.down = down;
        this.up = up;
    }

    public bool OnTouch(View v, MotionEvent e)
    {
        switch (e.Action)
        {
            case MotionEventActions.Down:
                this.down(v,e);

                break;
            case MotionEventActions.Up:
                this.up(v,e);

                break;
            default:
                break;
        }

        return true;
    }
}

おそらく私のアプローチが間違っていて、匿名メソッドを使いすぎているのでしょうか? ただし、多くのコードを節約しています。

4

1 に答える 1

3

Javascript / jQuery の観点からは、これは非常に明確なコードです。名前付きパラメーターがなくても。匿名関数を放り投げることは、イベントが処理される方法です。

ただし、C# の観点からは、かなり不明確です。(ほとんど?) イベント処理に無名関数を使用する .NET ライブラリはありません。そのため、手間を省き、これには実際のイベントを使用してください。

var touchListener = new TouchListener();
touchListener.OnTouchDown += (v,e) => Console.WriteLine("Hehe, I said touchdown");
touchListener.OnTouchUp += (v,e) => Console.WriteLine("Mweh");
于 2011-02-22T12:56:16.240 に答える