C# 匿名方法
除了定義事件處理方法外,還可以選擇使用匿名方法(anonymous method)。匿名方法實(shí)際上并非傳統(tǒng)意義上的方法,它不是某個(gè)類(lèi)上的方法,而純粹是為用作委托目的而創(chuàng)建的。
要?jiǎng)?chuàng)建匿名方法,需要使用下面的代碼:
delegate(parameters)
{
// Anonymous method code.
};
其中parameters是一個(gè)參數(shù)列表,這些參數(shù)匹配正在實(shí)例化的委托類(lèi)型,由匿名方法的代碼使用,例如:
delegate(Connection source, MessageArrivedEventArgs e)
{
// Anonymous method code matching MessageHandler event in Chl3Ex03.
};
例如,使用這段代碼可以完全繞過(guò)Chl3Ex03中的Display.DisplayMessage()方法:
myConnectionl.MessageArrived +=
delegate(Connection source, MessageArrivedEventArgs e)
{
WriteLine($"Message arrived from: {source.Name}");
HriteLine($"Message Text: {e.Message}");
};
使用匿名方法時(shí)要注意,對(duì)于包含它們的代碼塊來(lái)說(shuō),它們是局部的,可以訪問(wèn)這個(gè)作用域內(nèi)的局部變量。如果使用這樣一個(gè)變量,它就成為外部變量(outer variable)。外部變量在超出作用域時(shí),是不會(huì)刪除的,這與其他局部變量不同,在使用它們的匿名方法被銷(xiāo)毀時(shí),才會(huì)刪除外部變量。這比我們希望的時(shí)間晚一些,所以要格外小心。如果外部變量占用了大量?jī)?nèi)存,或者使用的資源在其他方面是比較昂貴的(例如資源數(shù)量有限),就可能導(dǎo)致內(nèi)存或性能問(wèn)題。
點(diǎn)擊加載更多評(píng)論>>