通过传递匿名方法来明确构造函数参数命名

时间:2011-02-22 12:27:38

标签: c# delegates readability anonymous-methods named-parameters

我对将匿名方法传递给委托参数时代码的可读性感兴趣:

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

正如您所看到的,我已经将参数向下和向下命名,因此这些匿名方法的作用更为明显。

为清晰起见,这是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;
    }
}

也许我的方法是错误的,我过度使用匿名方法?但它节省了大量代码。

1 个答案:

答案 0 :(得分: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");