//以下示例和說明都源于《visual c# 2005 技術內幕》
//匿名函數就是沒有名字的函數,是專用于委托的函數。
using System;
using System.Collections.Generic;
using System.Text;
namespace 匿名方法
{
??? public delegate void DelegateClass();
??? public delegate void delegatec(out int param);
??? public delegate void ADelegate<T>(T tvalue);
??? class Program
??? {
??????? static void Main(string[] args)
??????? {
??????????? int m;
????????????
??????????? //定義了一個無簽名的地匿名函數,該匿名方法的簽名是從委托推導出來的。
??????????? //但它的返回類型必須和委托相同。
??????????? DelegateClass del = delegate
??????????? {
??????????????? Console.WriteLine("Running anonyous method");
??????????? };
??????????? del();
??????????? //定義具有一個簽名的匿名函數
??????????? delegatec dell = delegate(out int inner)
??????????? {
??????????????? inner = 12;
??????????????? Console.WriteLine(inner);
??????????? };
??????????? dell(out m);
??????????? //外部變量。 匿名方法可以對該方法定義的作用域的包含函數和類成員的局部變量進行引用。
??????????? //在匿名方法中使用的局部變量稱為外部變量。
??????????? //一個被捕獲的外部變量的生存周期與委托的生存周期相同
??????????? dell = MethodA();
??????????? dell(out m);
??????????? Console.WriteLine(m);
??????????? //范型匿名方法。匿名方法可以使用指定類或委托的范型參數,但是匿名方法不能定義新的范型參數和約束。
??????????? ADelegate<int> ad = delegate(int a) {
??????????????? a = 10;
??????????????? Console.WriteLine(a);
??????????? };
??????????? ad(m);
??????? }
??????? public static delegatec MethodA()
??????? {
??????????? int local = 0;
??????????? return delegate(out int arg)//返回匿名方法
??????????? {
??????????????? arg = ++local;//延長了局部變量local的生存周期
??????????? };
??????? }
??? }
}
//注:匿名方法的限制:
//不要企圖跳出一個匿名方法,
//不要在一個匿名方法中使用一個ref或者out類型的外部變量
//不要定義新的一般參數或約束
//不要將屬性應用于匿名方法
//不要用-= 賦值運算符使用匿名方法
//不能是一個成員方法
//不能是一個不安全方法
本文轉自懸魂博客園博客,原文鏈接:http://www.cnblogs.com/xuanhun/archive/2008/06/30/1662365.html,如需轉載請自行聯系原作者