除了定义事件处理方法外,还可以选择使用匿名方法(anonymous method)。匿名方法实际上并非传统意义上的方法,它不是某个类上的方法,而纯粹是为用作委托目的而创建的。
要创建匿名方法,需要使用下面的代码:
delegate(parameters)
{
// Anonymous method code.
};
其中parameters是一个参数列表,这些参数匹配正在实例化的委托类型,由匿名方法的代码使用,例如:
delegate(Connection source, MessageArrivedEventArgs e)
{
// Anonymous method code matching MessageHandler event in Chl3Ex03.
};
例如,使用这段代码可以完全绕过Chl3Ex03中的Display.DisplayMessage()方法:
myConnectionl.MessageArrived +=
delegate(Connection source, MessageArrivedEventArgs e)
{
WriteLine($"Message arrived from: {source.Name}");
HriteLine($"Message Text: {e.Message}");
};
使用匿名方法时要注意,对于包含它们的代码块来说,它们是局部的,可以访问这个作用域内的局部变量。如果使用这样一个变量,它就成为外部变量(outer variable)。外部变量在超出作用域时,是不会删除的,这与其他局部变量不同,在使用它们的匿名方法被销毁时,才会删除外部变量。这比我们希望的时间晚一些,所以要格外小心。如果外部变量占用了大量内存,或者使用的资源在其他方面是比较昂贵的(例如资源数量有限),就可能导致内存或性能问题。
已有 22658 名学员学习以下课程通过考试
最需教育客户端 软件问题一手掌握
去 App Store 免费下载 iOS 客户端
点击加载更多评论>>