English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
顾名思义,匿名方法是没有名称的方法。可以使用委托(delegate)关键字定义C#中的匿名方法,并且可以将其分配给委托(delegate)类型的变量。
在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。
public delegate void Print(int value); static void Main(string[] args) { Print print = delegate(int val) { Console.WriteLine("匿名方法内部。值: {0}", val); }; print(100); }
匿名方法内部。值:100
匿名方法可以访问外部函数中定义的变量。
public delegate void Print(int value); static void Main(string[] args) { int i = 10; Print prnt = delegate(int val) { val += Console.WriteLine("匿名方法: {0}", val); }; prnt(100); }
匿名方法:110
也可以将匿名方法传递给接受委托作为参数的方法。
在下面的示例中,PrintHelperMethod()采用Print委托的第一个参数:
public delegate void Print(int value); class Program { public static void PrintHelperMethod(Print printDel, int val) { val += 10; printDel(val); } static void Main(string[] args) { PrintHelperMethod(delegate(int val) { Console.WriteLine("匿名方法: {0}", val); }, 100); } }
匿名方法:110
saveButton.Click += delegate(Object o, EventArgs e) { System.Windows.Forms.MessageBox.Show("Save Successfully!"); };
C#3.NET 4.0 で lambda 表現が導入されました。これも匿名メソッドのように動作します。
goto、break、または continue などのジャンプ命令を含むことはできません。
外部メソッドの ref または out パラメータにアクセスすることはできません。
不安全なコードを所有したりアクセスすることはできません。
is 演算子の左側で使用することはできません。
delegate キーワードを使用して匿名メソッドを定義できます。
匿名メソッドはデリゲートに割り当てられなければなりません。
匿名メソッドは外部変数や関数にアクセスできます。
匿名メソッドは引数として渡すことができます。
匿名メソッドはイベントハンドラとして使用できます。