我对将匿名方法传递给委托参数时代码的可读性感兴趣:
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;
}
}
也许我的方法是错误的,我过度使用匿名方法?但它节省了大量代码。
答案 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");