兰伯特表达式、委托、预定义的泛型委托类型、事件、回调函数、方法

兰伯特表达式

兰伯特表达式(Lambda Expression)是一种匿名函数的简洁写法,通常用于简化代码、提高可读性,并且可以在需要时传递一段逻辑。

它可以用来创建委托实例或作为方法的参数传递。

兰伯特表达式的基本语法是一个参数列表,一个箭头(=>)和一个表达式或语句块。

Func<int a, int b> square = (a,b) => a * b;

委托

委托(Delegate)是C#中的一个特殊类型,它可以用来创建方法的引用,并且允许将此引用传递给其他方法。委托可以用来实现事件的机制,它允许在特定的情况下调用一个或多个方法委托通常用于实现事件、回调函数等功能。

//创建一个委托
public delegate double CalculateAreaDelegate(double radius);

//定义一个圆的类
public class Circle
{
    public double CalculateArea(double radius)
    {
        return Math.PI * radius * radius;
    }
}

public class MainClass
{
    public static void Main(string[] args)
    {
        Circle circle = new Circle();//实例化一个圆的类
        //将circle中的方法委托给其他方法调用
        CalculateAreaDelegate calculateArea = circle.CalculateArea;
        //通过calculateArea 调用
        double area = calculateArea(5.0);
        Console.WriteLine("Area: " + area);
    }
}

上述代码定义了一个委托CalculateAreaDelegate,它可以接受一个double类型参数并返回double类型值的方法。在Main方法中,我们创建了一个Circle对象,并将其CalculateArea方法赋值给委托变量calculateArea,然后通过委托调用CalculateArea方法计算圆的面积 

预定义委托

Action是一个预定义的委托类型,它是一个没有返回值的委托。它可以接受零个到多个输入参数,并且没有返回值。可以说Action是委托的封装后的委托。Action可以直接使用,无需进行额外的定义,可以快速简洁地定义一个没有返回值的委托。而委托需要进行显式的声明和定义,并且需要根据委托的签名定义相应的方法

// 使用Action定义一个没有参数和返回值的委托
Action greet = () =>
{
    Console.WriteLine("使用Action不能传递参数,但是更加便捷");
};

//定义带有返回参数的委托
public delegate double CalculateAreaDelegate(double radius);


public class Circle
{
    public double CalculateArea(double radius)
    {
        return Math.PI * radius * radius;
    }
}


public class MainClass
{
    public static void Main(string[] args)
    {
        Circle circle = new Circle();
        CalculateAreaDelegate calculateArea = circle.CalculateArea;
        double area = calculateArea(5.0);
        greet();
        Console.WriteLine("Area: " + area);
    }
}

 在上述代码中,我们使用Action定义了一个没有参数和返回值的委托greet,然后使用委托的实例greet调用方法在控制台输出。同时定义了CalculateAreaDelegate可以接受一个double类型参数并返回double类型值的方法,然后通过委托调用CalculateArea方法。可以看到,Action和委托都可以实现方法的调用,但是Action更加简洁直观,而委托更加灵活适用于各种场景。

事件

事件(Event)是委托的实例,它定义了在特定情况下调用的一组方法。事件通常用于实现发布者/订阅者模式,其中一个对象(发布者)触发事件,通知其他对象(订阅者)执行相应的方法。

public class Button
{
    public event EventHandler Click;

    public void OnClick()
    {
        Click?.Invoke(this, EventArgs.Empty);
    }
}

public class MainClass
{
    public static void Main(string[] args)
    {
        Button button = new Button();
        button.Click += Button_Click;

        button.OnClick();
    }

    private static void Button_Click(object sender, EventArgs e)
    {
        Console.WriteLine("Button clicked!");
    }
}

上述代码定义了一个Button类,在Button类中定义了一个事件Click,并通过调用Click事件的Invoke方法触发事件。在Main方法中,我们创建了一个Button对象,并订阅了其Click事件,当调用button.OnClick()时,会触发Click事件,并执行Button_Click方法 

回调函数

回调函数(Callback Function)是一种机制,通过该机制可以将一个函数作为参数传递给另一个函数,然后在需要的时候调用这个函数来完成某些特定的操作。回调函数通常用于异步编程、事件处理等场景。

public class Worker
{
    public void DoWork(Action callback)
    {
        // 执行一些工作...

        // 工作完成后调用回调函数执行其他xxx操作
        callback?.Invoke(xxx);
    }
}

public class MainClass
{
    public static void Main(string[] args)
    {
        Worker worker = new Worker();
        worker.DoWork(() =>
        {
            Console.WriteLine("工作已完成");
        });
    }
}

上述代码定义了一个Worker类,其中的DoWork方法接受一个回调函数作为参数,在工作完成后调用回调函数。在Main方法中,我们创建了一个Worker对象,并传递一个兰伯特表达式作为回调函数,在工作完成后会执行回调函数中的代码。 

方法

方法(Method)是一段可执行的代码。它是实现特定功能的一组语句或指令的集合。方法可以被调用和执行,可以有输入参数和返回值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值