C#基础:匿名方法

作者:微信公众号:【架构师老卢】
8-3 18:8
28

概述:匿名方法是一种不包含任何名称的方法,它是在 C# 2.0 中引入的。在 C# 中,匿名方法允许您以内联方式定义方法,而无需显式声明单独的命名方法。当您需要将方法作为委托参数时,例如用于事件处理或 LINQ 查询时,它特别有用。C# 中的匿名方法与示例下面是匿名方法的基本语法:下面介绍如何在 C# 中声明和使用接口。例// An Anonymous Method delegate(parameters) {   // method body };例如,要创建一个匿名方法,该方法包装水果名称并将其分配给委托:例using System; // Define a delegate

匿名方法是一种不包含任何名称的方法,它是在 C# 2.0 中引入的。在 C# 中,匿名方法允许您以内联方式定义方法,而无需显式声明单独的命名方法。当您需要将方法作为委托参数时,例如用于事件处理或 LINQ 查询时,它特别有用。

C# 中的匿名方法与示例

下面是匿名方法的基本语法:

下面介绍如何在 C# 中声明和使用接口。

// An Anonymous Method  
  
delegate(parameters) {  
  // method body  
};

例如,要创建一个匿名方法,该方法包装水果名称并将其分配给委托:

using System;  
  
// Define a delegate  
delegate void fruitName(string name);  
  
public class Program  
{  
  public static void Main(string[] arge)  
  {  
    // Create an anonymous method and assign it to a delegate  
    fruitName fruit = delegate(string name)  
    {  
        Console.WriteLine("My favorite fruit is: {0}", name);  
    };  
    fruit("Cherry");  
  }  
}

输出

My favorite fruit is: Cherry

在上面的例子中:

  1. 代表 string fruitName(字符串名称);声明一个名为 fruitName 的委托,该委托接受一个字符串参数并显示一个水果名称字符串。

2. 为 Fruit 分配了一个匿名方法,该方法采用字符串名称并显示水果名称字符串。

3. fruit(“Cherry”); 演示用参数 Cherry 呼叫代表,该参数打印我最喜欢的水果是:Cherry

使用外部变量创建匿名方法

using System;  
  
// Define a delegate  
delegate void fruitName(string name);  
  
public class Program  
{  
  public static void Main(string[] arge)  
  {  
    string like = "Kiwi";  
    // Create an anonymous method and assign it to a delegate  
    fruitName fruit = delegate(string name)  
    {  
      Console.WriteLine("My favorite fruit is: {0}", name);  
      // Accessing outer aariable in anonymous method  
      Console.WriteLine("I Like {0} also", like);  
    };  
    fruit("Cherry");  
  }  
}

输出

My favorite fruit is: Cherry  
I Like Kiwi also
  1. 代表 string fruitName(字符串名称);声明一个名为 fruitName 的委托,该委托接受字符串参数显示一个字符串

2. 为 Fruit 分配了一个匿名方法,该方法采用字符串名称并显示水果名称字符串。

3. fruit(“Cherry”); 演示用参数 Cherry 呼叫代表,该参数打印我最喜欢的水果是:Cherry

4. 在这个例子中,我们正在访问匿名方法内部的一个变量,该变量是在匿名方法之外声明的。这种类型的变量称为外部变量。如下例所示,like 是外部变量。

匿名方法的限制

1. 无法访问 ref 或 out 参数:

Ref 和 Out,in 参数不以匿名方法访问。这限制了他们修改在外部作用域中声明的变量的能力。

2. 不能包含跳转语句

它不能包含 goto、break 或 continue 等跳转语句。

3. 无法指定访问修饰符:

匿名方法始终是私有的,不能有显式的访问修饰符(public、private、internal 等)。与命名方法相比,这限制了对可见性的控制。

4. 可以使用 AS 事件处理程序

我们也可以使用匿名方法作为事件处理程序。

5.不访问不安全的代码

匿名方法不会访问不安全的代码。

6. 定义的顺序无关紧要:

定义分部类各部分的顺序无关紧要。编译器将它们合并在一起以创建单个类。

7. 无异步功能:

匿名方法不能是异步 (async),这限制了它们在需要异步操作(如任务和 async-await 模式)的场景中的使用。另一方面,Lambda 表达式可以是异步的。

8. 无表情体语法:

与 lambda 表达式不同,匿名方法需要带有 {} 和显式返回语句的完整方法主体。

相关留言评论
昵称:
邮箱:
阅读排行