C#的委托,匿名方法和Lambda表达式

委托只是一种特殊类型的对象,区别是其他对象包含数据,委托包含的是一个或多个方法的地址。

这里涉及一个概念:以函数作为参数的函数叫高阶函数。

 

private delegate void string GetStr()

public static void main()

{

                   int x = 100;

                   GetStr dGetStr =new GetStr(x.ToString);

                   //或者:编译器会通过声明的类型检测需要的委托类型,自动创建委托的一个实例

                   dGetStr =x.ToString;

                   Console.WriteLine(“stringis {0}”, dGetStr);

}

 

C#中可用的委托类型:

Action<T>:可传递不同的参数类型和个数

Func<in T, out TResult>:可传递不同的参数类型和个数,和一个返回值

例,自定义类的排序:

 

class BubbleSorter

{

    static public voidSort<T>(IList<T> arrSort, Func<T, T, bool> comparison)

    {

        for (int j = arrSort.Count- 1; j > 0; j--)

        {

            for (int i = 0; i < j; i++)

            {

               if(comparison(arrSort[i + 1], arrSort[i]))

                {

                    T temp =arrSort[i];

                    arrSort[i] =arrSort[i + 1];

                    arrSort[i + 1]= temp;

                }

            }

        }

    }

}

 

class User

{

    public int Id { get; privateset; }

    public string Name { get;private set; }

    public int Age { get; privateset; }

    public User(int id, stringname, int age)

    {

        this.Id = id;

        this.Name = name;

        this.Age = age;

    }

 

    public static boolCompareAge(User u1, User u2)

    {

        return u1.Age < u2.Age;

    }

}

 

class Test

{

    public static void main()

    {

        User[] users =

        {

            new User(1,"user1", 20),

            new User(2,"user2", 10),

            new User(3, "user3", 15),

            new User(4,"user4", 10),

        };

 

        BubbleSorter.Sort(users,User.CompareAge);

    }

}

 

 匿名方法

Func<string, string, string> tDel = delegate(string param1, string param2)

{

    return param1 + param2;

}

Console.WriteLine(tDel("I'm String1", "I'm String2"));

C#3.0 开始可以使用Lambda表达式,这样就不需要提供匿名方法的参数。


Lambda表达式:

Func<string, string, string> tLambda = (param1, param2) => param1 + param2;

Console.WriteLine(tLambda("I'm String1", "I'm String2"));

实现代码多行时,不需要加花括号。

Lambda表达式可以使用外部的变量。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值