匿名方法是不包含C#2.0中引入的任何名称的方法。当用户想要创建内联方法并且还希望像其他方法一样在匿名方法中传递参数时,此方法很有用。使用委托关键字定义了一个匿名方法,用户可以将该方法分配给委托类型的变量。
句法:
delegate(parameter_list){
// Code..
};
例子 :
// C# program to illustrate how to
// create an anonymous function
using System;
class GFG {
public delegate void petanim(string pet);
// Main method
static public void Main()
{
// An anonymous method with one parameter
petanim p = delegate(string mypet)
{
Console.WriteLine("My favorite pet is: {0}",
mypet);
};
p("Dog");
}
}
输出:
My favorite pet is: Dog
重要事项:
- 此方法也称为内联委托。
- 使用此方法,可以创建委托对象,而无需编写单独的方法。
- 此方法可以访问外部方法中存在的变量。这种类型的变量称为外部变量。如下例所示,fav是外部变量。
例子:
// C# program to illustrate how an // anonymous function access variable // defined in outer method using System; class GFG { // Create a delegate public delegate void petanim(string pet); // Main method static public void Main() { string fav = "Rabbit"; // Anonymous method with one parameter petanim p = delegate(string mypet) { Console.WriteLine("My favorite pet is {0}.", mypet); // Accessing variable defined // outside the anonymous function Console.WriteLine("And I like {0} also.", fav); }; p("Dog"); } }
输出:My favorite pet is Dog. And I like Rabbit also.
- 您可以将此方法传递给另一个接受委托作为参数的方法。如下例所示:
例子 :
// C# program to illustrate how an // anonymous method passed as a parameter using System; public delegate void Show(string x); class GFG { // identity method with two parameters public static void identity(Show mypet, string color) { color = " Black" + color; mypet(color); } // Main method static public void Main() { // Here anonymous method pass as // a parameter in identity method identity(delegate(string color) { Console.WriteLine("The color"+ " of my dog is {0}", color); }, "White"); } }
输出:The color of my dog is BlackWhite
- 在匿名方法中,允许删除参数列表,这意味着您可以将匿名方法转换为委托。
- 匿名方法块表示匿名方法中参数的范围。
- 匿名方法不包含跳转语句,如goto,break或Continue。
- 匿名方法不会访问不安全的代码。
- 匿名方法不访问外部范围的in,ref和out参数。
- 您不能在is运算符的左侧使用匿名方法。
- 您还可以使用匿名方法作为事件处理程序。
例子:
// C# program to illustrate how an // anonymous method use as a // event handler MyButton.Click += delegate(Object obj, EventArgs ev) { System.Windows.Forms.MessageBox.Show("Complete without error...!!"); }