C# 匿名方法 委托 Action委托 Delegate委托

原文地址:https://msdn.microsoft.com/zh-cn/library/bb882516.aspx

匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用。 可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数。

C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方法,作为编写内联代码的首选方式。

实例参考:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Runtime.CompilerServices;
 5 using System.Security.Cryptography.X509Certificates;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8
 9 namespace ConsoleTest
10 {
11     internal class Program
12     {
13         private static void Main(string[] args)
14         {
15             //Action封装一个方法,该方法只有一个参数并且不返回值。               //更多实例见这里:https://msdn.microsoft.com/zh-cn/library/018hxwa8.aspx
16             var dd = new Action<string>((item) =>
17             {
18                 var s = string.Concat("aa", item);
19                 Console.Write(s.ToString());
20             });
21
22             dd("bb");
23
24             Console.ReadKey();
25         }
26
27
28     }
29 }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleTest
{
    internal class Program
    {
        private delegate bool DelegateAge(int age);
        private static void Main(string[] args)
        {
            //lambda 表达式写法
            DelegateAge delegateAge1 = (age) => age > 30;

            DelegateAge delegateAge2 = (age) =>
            {
                return age > 30;
            };

            Console.WriteLine(delegateAge1(35));
            Console.WriteLine(delegateAge2(15));

            Console.ReadKey();
        }

    }
}
using System;

namespace ConsoleTest
{
    internal class Program
    {
        private delegate void Del();
        private static void Main(string[] args)
        {

            int n = 0;
            //没有参数的情况下可以这么玩
            Del d = () =>
            {
                System.Console.WriteLine("Copy #:{0}", ++n);
            };
            d();

            Console.ReadKey();
        }
    }
}
using System;
using System.IO;

namespace ConsoleTest
{
    internal class Program
    {
        private delegate void Del(int a,int b);
        private static void Main(string[] args)
        {
            //多个参数的情况下可以这么玩
            Del d = (a,b) =>
            {
                System.Console.WriteLine("a+b="+(a+b).ToString());
            };
            //也可以这么玩
            Del d2 = delegate(int a, int b)
            {
                System.Console.WriteLine("a+b=" + (a + b).ToString());
            };
            d(4, 7);
            d2(4, 7);
            Console.ReadKey();
        }
    }
}
时间: 2024-10-23 13:37:35

C# 匿名方法 委托 Action委托 Delegate委托的相关文章

关于委托:异常{ 无法将 匿名方法 转换为类型&ldquo;System.Delegate&rdquo;,因为它不是委托类型 }

异常{ 无法将 匿名方法 转换为类型"System.Delegate",因为它不是委托类型 } 委托实际上是把方法名作为参数,但是若有好多个方法时,就要指明是哪个参数  查看如下代码: this.Invoke(delegate                 {                     MessageBox.Show("t4");                 }); 熟悉winform的开发者都知道,this是一个窗体的实例,故不做另外解释.该代

五分钟重温C#委托,匿名方法,Lambda,泛型委托,表达式树

五分钟重温C#委托,匿名方法,Lambda,泛型委托,表达式树 https://masuit.com/81 曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托,表达式树这些应用.今天我尝试用简单的方法叙述一下,让大家在五分钟内看完这篇博客 第一分钟:委托 有些教材,博客说到委托都会提到事件,虽然事件是委托的一个实例,但是为了理解起来更简单,今天只谈委托不谈事件.先上一段代码: 下边的代码,完成了一个委托应用的演示.一个委托分三个步骤: 1 2 3 4 5 6 7 8 9 10 11 12

委托,匿名方法,Lambda,泛型委托,表达式树

一.委托:完成一个委托应分三个步骤://step01:首先用delegate定义一个委托;public delegate int CalculatorAdd(int x, int y);//step02:声明一个方法来对应委托.public int Add(int x, int y){ return x + y;}protected void FrmTest_Load(object sender, EventArgs e){ //step03:用这个方法来实例化这个委托. CalculatorA

.net基础扫盲-小例子串委托、匿名方法、lamuda表达式

我把委托理解为:委托是一种方法的格式,当然他也是一种类型. 只要是方法的格式跟委托定义的格式是一样的,那么就可以把该方法附加给该委托.看以下demo 声明委托: <p style="margin:0in;font-family:微软雅黑;font-size:12.0pt"></p><pre name="code" class="csharp">public delegate void Add(int a,int

C#编程笔记(匿名方法,Lambda表达式 )

1.匿名方法  本质上还是一个方法,任何使用委托的地方都能使用匿名方法赋值 1 例子: 2 //匿名方法也是使用delegate关键字 3 Func<int ,int ,int> = delegate (int _x,int _y) 4 { 5 return _x + _y; 6 }; 2.Lambda表达式   可以作为匿名方法代替 例子: 1 //匿名方法 2 Func<int ,int ,int> = delegate (int _x,int _y) 3 { 4 return

[C#] C# 基础回顾 - 匿名方法

C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ≥ C# 3.0 的版本中,我们会用 Lambda 表达式进行取代匿名方法,并且用 Lambda 表达式作为编写内联代码的首选方式,因为它更简洁. 匿名方法是,顾名思义,匿名方法就是没有名称的方法.匿名方法最明显的好处就是:可以降低额外另写一个方法的工作量:另外一个好处就是可以直接访问调用者的变量,

匿名方法,Lambda表达式,高阶函数

原文:匿名方法,Lambda表达式,高阶函数 匿名方法 c#2.0引入匿名方法,不必创建单独的方法,因此减少了所需的编码系统开销. 常用于将委托和匿名方法关联,例如 1. 使用委托和方法关联: this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);private void btnRefresh_Click(object sender, EventArgs e){    BindData();} 2. 使用委

C#4.0语法糖之第五篇: 匿名类 &amp; 匿名方法

今天时间有点早,所以上来在写一篇文章吧,继续上一篇的文章,在我们平时编程过程中有没有遇到过这样的一个情景,你定义的类只是用来封装一些相关的数据,但并不需要相关联的方法.事件和其他自定义的功能.同时,这个类仅仅在当前的应用程序中使用,而不需要在项目间重用.你所需要的只是一个“临时的”类型,现在我们来看看这个传统类的定义: 1 internal class oneClass 2  3 { 4  5      //定义若干私有数据成员 6  7      //通过属性来封装每个数据成员 8  9   

47. C# -- 匿名方法

C# 匿名方法 理论: 我们已经提到过,委托是用于引用与其具有相同标签的方法.换句话说,您可以使用委托对象调用可由委托引用的方法. 匿名方法(Anonymous methods) 提供了一种传递代码块作为委托参数的技术. 匿名方法是没有名称只有主体的方法. 在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的. 编写匿名方法的语法 匿名方法是通过使用 delegate 关键字创建委托实例来声明的.例如: del.. 编写匿名方法的语法 匿名方法是通过使用 delegat

C# 语法特性 - 匿名方法(C#2.0)

概述 匿名方法的本质其实就是委托. 编译后会生成委托对象,生成方法,然后把方法装入委托对象,最后赋值给声明的委托变量. (匿名方法可以省略参数:编译的时候会自动为这个方法按照委托签名的参数添加参数) 实例: public delegate void MyConsoleWrite(string strMsg); void WriteMsg(string s) { Console.WriteLine(s); } //匿名方法测试 MyConsoleWrite delMCW1 = new MyCons