你能告诉我创建活动的最佳方式是什么,或者所有选项都很好吗?
// OPTION 1
buttonAlert.Click += delegate
{
textChange.Text = string.Format("Hello World");
};
// OPTION 2
buttonAlert.Click +=(sender, e) =>
{
textChange.Text = string.Format("Hello World");
};
// OPTION 3
buttonAlert.Click += delegate (object sender, EventArgs e)
{
textChange.Text = string.Format("Hello World");
};
答案 0 :(得分:3)
这只是一个偏好问题。在性能方面都是等价的。
因此,请根据您的需要和喜好进行选择。
作为我答案的补充,我想提醒您必须在订阅(+ =)后取消订阅活动( - =)。
防止在事件发生时调用事件处理程序 提出,只是取消订阅该事件。为了阻止 资源泄漏,在您之前取消订阅事件非常重要 处理订户对象。在您取消订阅活动之前, 多播委托是发布中事件的基础 object有一个对封装的委托的引用 订阅者的事件处理程序。只要发布对象成立即可 该引用,您的订阅者对象将不会被垃圾回收。
答案 1 :(得分:2)
我会说当你不需要lambda参数(发送者,事件)时,第一个选项是最好的。 在第二和第三之间我会选择第二,因为它更清洁(只是一个偏好的问题。
您还可以将方法用作委托,如果您想正确管理内存,这可能是最好的。当您使用委托或lambda时,无法取消订阅。这意味着即使您销毁或离开活动/片段,对象仍将保留在内存中,垃圾收集器将无法清除它。如果用户多次打开和关闭此屏幕,您最终可能会收到 OutOfMemoryException 。这在Android中经常发生。这将是解决方案:
protected override void OnResume()
{
base.OnResume();
buttonAlert.Click += OnButtonClick;
}
protected override void OnPause()
{
base.OnPause();
buttonAlert.Click -= OnButtonClick;
}
private void OnButtonClick(object sender, EventArgs e)
{
textChange.Text = string.Format("Hello World");
}