C#基本功------委托和事件(二)--拉姆达表达式

委托的另一种用法---------匿名方法:

public delegate void MyDel(string msg);----声明的委托
    class Program
    {
        static void Main(string[] args)
        {
            MyDel mdl = delegate(string str) { Console.WriteLine(str); };
            mdl("床前明月光");
            Console.ReadKey();
        }
    }另一种简单的写法
  public delegate void MyDel(string msg);
    class Program
    {
        static void Main(string[] args)
        {
            MyDel mdl = (string str)=> { Console.WriteLine(str); };------------将delegate简化成=>,这种方法逐渐的演化成了拉姆达表达式
            mdl("床前明月光");
            Console.ReadKey();
        }
    }

下面我们来看下拉姆达表达式

 public delegate void MyDel(string msg);----void改成string
    class Program
    {
        static void Main(string[] args)
        {
            MyDel md = x => x + "厉害";---会在这句话报错,如果我们把上面的返回值的类型改成string,就不会报错了,这是为什?因为x=>x+"厉害"相当于是返回值,返回回去了
            Console.ReadKey();

        }
    }

再举个例子:

   static void Main(string[] args)
        {
            T1((x, y, z) => x + y + z);-------------拉姆达表达式的使用
            Console.ReadKey();
        }
        public static void T1(myDel menth)
        {
            int result = menth(10, 20, 10);
            Console.WriteLine(result);
        }
        public delegate int myDel(int a,int b,int c);
时间: 2024-08-07 00:16:33

C#基本功------委托和事件(二)--拉姆达表达式的相关文章

C#高级------拉姆达表达式

namespace out_ref { //声明一个委托 public delegate int Add(int n1,int n2); class Program { //拉姆达表达式 static void Main(string[] args) { Add a = (n1,n2) => n1 - n2; int c = a(10, 5); Console.WriteLine(c); Console.ReadKey(); } } }

拉姆达表达式(Lambda Expressions)

上面两种写法是一样的 ,拉姆达表达式也是一种委托, 但引用的是匿名方法

拉姆达表达式

m_pSprite->runAction(CCSequence::create(FadeIn::create(0.4),CallFunc::create([&]{isComplete = true;}),NULL)); 拉姆达表达式,就是一个居部函数,跟居部变量差不多的用法

(转)拉姆达表达式(Lambda Expressions) =>写法的涵义

lambdaclass编译器 让我们先看一个简单的拉姆达表达式: x=>x/2 这个表达式的意思是:x为参数,对x进行相应的操作后的结果作为返回值. 通过这个拉姆达表达式,我们可以看到: 这个表达式没有任何类型信息,但这并不代表拉姆达表达式是和类型无关的.在实际运用上,编译器会根据表达式的上下文判断上述x的类型及返回值的类型.例如: using System;using System.Linq;public class LambdaTest{     static void Main() {  

委托和事件(二)

C# 中的委托和事件 文中代码在VS2005下通过,由于VS2003(.Net Framework 1.1)不支持隐式的委托变量,所以如果在一个接受委托类型的位置直接赋予方法名,在VS2003下会报错,解决办法是显式的创建一个委托类型的实例(委托变量).例如:委托类型 委托实例 = new 委托类型(方法名); 欢迎浏览本文的后续文章: C#中的委托和事件(续) 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易

.Net进阶系列(8)-委托和事件(二)

一. 泛型委托 所谓的泛型委托,即自定义委托的参数可以用泛型约束,同时内置委托Func和Action本身就是泛型委托. 将上一个章节中的Calculator类中的方法用自定义泛型委托重新实现一下. 1 public class Calculator2 2 { 3 //传统解决方案一:在该类中声明多个方法,分别是加倍.平方.立方的方法 4 5 6 //传统解决方案二:在该类中声明一个万能方法,通过传递不同的参数类型来区分是执行加倍还是平方或者立方操作 7 8 9 //解决方案三:声明一个万能方法,

C#基本功------委托和事件(三)

下面我们来说一下系统自带的委托,一个就黑丝fun<>一个就是Action<> 这两个委托是系统给我们用的,我们一般用的时候用这两个委托就行了,不需要再自己声明一个委托,这两个的区别是前者有返回值,而后者是什么返回值的 下面我们先来介绍下IEnumerable这个东东....微软给我们的解释是:公开枚举数,支持在指定的集合上进行简单的迭代,说明了凡是实现这个接口的东西,都可以实现foreach循环遍历,这就是为什么数组可以进行遍历,因为数组的父类是Array,而Array实现了接口I

C#基本功------委托和事件(一)

首先我们来看一个代码 static void Main(string[] args) { Test(Show); } public static void Test() { } public static void Show() { }红色标注的地方发生了错误,显然是不能传入一个方法的,这个时候我们会想 public static void Test(XXXX show) { }如果有个XXXX类型,能够让我传入一个方法,那就好了,那么,我们怎么做呢? 委托!!! public delegate

拉姆达表达式组合

public class ParameterRebinder : ExpressionVisitor { private readonly Dictionary<ParameterExpression, ParameterExpression> map; public ParameterRebinder(Dictionary<ParameterExpression, ParameterExpression> map) { this.map = map ?? new Dictiona