可以看出對於每個我們想要提供的簡單過濾准則,我們應該定義一個方法(靜態或實例的)。這很快就搞亂了類的代碼。而用匿名方法,代碼變得相當自然。下面是這個Program類用匿名方法重寫後的:
public class Program
{
public delegate void MyDelegate();
public static void Main(string[] args)
{
MyCollection objMyCol = new MyCollection();
objMyCol.ItemList.Add("Aditya");
objMyCol.ItemList.Add("Tanu");
objMyCol.ItemList.Add("Manoj");
objMyCol.ItemList.Add("Ahan");
objMyCol.ItemList.Add("Hasi");
//獲得集合中以字母’A‘開頭的字符項數組
string[] AStrings = objMyCol.GetFilteredItemArray(delegate(string sItem)
{
if (sItem[0] == ''A'')
return true;
else
return false;
});
Console.WriteLine("----- Strings starting with letter ''A'' -----");
foreach (string s in AStrings)
{
Console.WriteLine(s);
} //獲得集合中以字母’ T ‘開頭的字符項數組
string[] TStrings = objMyCol.GetFilteredItemArray(delegate(string sItem)
{
if (sItem[0] == ''T'')
return true;
else
return false;
});
Console.WriteLine("----- Strings starting with letter ''T'' -----");
foreach (string s in TStrings)
{
Console.WriteLine(s);
}
}
}
正如上面示例中的所示,我們已能用內聯代碼塊定義的過濾准則替代定義一個新的方法來代表每個過濾准則。老實說,用這種內聯代碼可能看起來自然並且避免了定義新方法,但是如果這個技術被用於更大的內聯代碼塊,這時代碼很快變得難於管理並可能導致代碼重復。因此,使用方法與內聯匿名方法都是委托/事件處理器的可選方案。
好了,這些就是匿名方法的基礎。本文的余下部分將討論在不同的場景下匿名方法內部如何工作的。理解匿名方法如何被實現和內部如何工作對於正確地使用它們是重要的。否則,你使用匿名方法的代碼的結果看起來將不可預知。