兰伯特表达式
兰伯特表达式(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)是一段可执行的代码。它是实现特定功能的一组语句或指令的集合。方法可以被调用和执行,可以有输入参数和返回值