C# - 匿名方法(Anonymous Method)

本文关键字:Anonymous Method 方法 | 更新日期: 2023-09-12 17:40:19

顾名思义,匿名方法是没有名称的方法。C# 中的匿名方法可以使用 delegate 关键字定义,并且可以分配给委托类型的变量。

Example: Anonymous Method

public delegate void Print(int value);
static void Main(string[] args)
{
    Print print = delegate(int val) { 
        Console.WriteLine("Inside Anonymous method. Value: {0}", val); 
    };
    print(100);
}

输出:

Inside Anonymous method. Value: 100

匿名方法可以访问外部函数中定义的变量。

Example: Anonymous Method

public delegate void Print(int value);
static void Main(string[] args)
{
    int i = 10;
    
    Print prnt = delegate(int val) {
        val += i;
        Console.WriteLine("Anonymous method: {0}", val); 
    };
    prnt(100);
}

输出:

Anonymous method: 110

匿名方法也可以传递给接受委托作为参数的方法。

在下面的示例中,PrintHelperMethod() 采用 Print 委托的第一个参数:

Example: Anonymous Method as Parameter

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("Anonymous method: {0}", val); }, 100);
    }
}

输出:

Anonymous method: 110

匿名方法可用作事件处理程序:

Example: Anonymous Method as Event Handler

saveButton.Click += delegate(Object o, EventArgs e)
{ 
    System.Windows.Forms.MessageBox.Show("Save Successfully!"); 
};

C# 3.0引入了lambda表达式,它的工作方式也类似于匿名方法。

匿名方法限制

  • 它不能包含像goto,break或continue这样的跳转语句。
  • 它无法访问外部方法的 ref 或 out 参数。
  • 它不能拥有或访问不安全的代码。
  • 它不能在 is 运算符的左侧使用。

注意:

  1. 可以使用委托关键字定义匿名方法
  2. 必须将匿名方法分配给委托。
  3. 匿名方法可以访问外部变量或函数。
  4. 匿名方法可以作为参数传递。
  5. 匿名方法可用作事件处理程序。