猿教程 Logo

C# 匿名方法

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

相关实例:

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

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

相关实例:

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委托的第一个参数:

相关实例:

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

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

相关实例:

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

匿名方法限制:

  • 它不能包含跳转语句,如goto,break或continue。

  • 它不能访问外部方法的ref或out参数。

  • 它不能拥有或访问不安全的代码。

  • 它不能用于is运算符的左侧。

要点
  1. 匿名方法可以使用delegate关键字来定义

  2. 匿名方法必须分配给一个委托。 

  3. 匿名方法可以访问外部变量或函数。 

  4. 匿名方法可以作为参数传递。 

  5. 匿名方法可以用作事件处理程序。

C#3.0引入了lambda表达式,它也像一个匿名方法。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CSharp/csharp-Anonymous-method.html