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 回答