C#委托的使用(匿名方法,lambda表达式)

2019-1-22

片段 1片段 2片段 3


定义和创建委托

//声明委托
delegate void Del(string str);

//函数声明
static void Notify(string name)
{
    Console.WriteLine("Notification received for: {0}", name);
}

// 1、创建委托实例,早期C#1.0的用法
Del del1 = new Del(Notify);

// 2、创建委托实例,现在的用法,不使用new,C#2.0的用法
Del del2 = Notify;

// 3、使用匿名方法来初始化委托
Del del3 = delegate (string name)
{
    Console.WriteLine("Notification received for: {0}", name);
};

// 4、使用lambda表达式实例化委托
Del del4 = name => 
{
    Console.WriteLine("Notification received for: {0}", name);
};


多参数的委托实例化:

//声明委托
delegate int Add(int a, int b);

//匿名函数实例化委托,需要在delegate之后重写参数列表
Add add = delegate (int a, int b)
{
    return a * b;
};

//Lambda表达式,=号之后直接写参数列表,然后加上=>符号
Add add2 = (a, b) =>
{
    return a + b;
};

Console.WriteLine("10 + 20 = {0}", add(10, 20));
Console.WriteLine("10 + 20 = {0}", add2(10, 20));


委托多播

//声明委托
delegate int NumberChanger(int n);

class DeltegateTest
{
    static int num = 10;

    //定义static函数
    public static int AddNum(int p)
    {
        num += p;
        return num;
    }

    //定义static函数
    public static int MultNum(int q)
    {
        num *= q;
        return num;
    }
}

//创建委托实例,分别代理两个静态函数
//委托的实例化和类的实例化一样都需要new操作
NumberChanger nc1 = new NumberChanger(DeltegateTest.AddNum);
NumberChanger nc2 = new NumberChanger(DeltegateTest.MultNum);

// 使用委托对象调用方法
var v1 = nc1(25);
var v2 = nc2(5);
Console.WriteLine("V1={0}, V2={1}", v1, v2);

//创建多播委托实例
NumberChanger nc;

//创建调用列表,或者nc=nc1;nc+=nc2;
nc = nc1+nc2;

//调用多播,会依次调用nc1(5)和nc2(5)
var v3 = nc(5);
Console.WriteLine("V3={0}", v3);

下载地址

百度网盘
密码: