.NET委托,事件和Lambda表达式
2021-01-02 23:29
标签:语法 parameter cti 委托和事件 继承 opera lambda表达式 ++ 信息 委托是一种引用类型(其实就是一个类,继承MulticastDelegate特殊的类。),表示对具有特定参数列表和返回类型的方法的引用。 每个委托提供Invoke方法, BeginInvoke和EndInvoke异步方法 声明委托 实例化委托 调用委托 其他使用委托 简化开发过程,.NET 包含一组委托类型: 代码: Lambda就是使用委托的更方便的语法。 简化开发过程,并不会影响运行性能。 表达式lambda基本形式: 使用空括号指定零个输入参数: 括号内的两个或更多输入参数使用逗号加以分隔: 语句lambda 语句 lambda 的主体可以包含任意数量的语句; 使用匿名委托和lambda代码: 事件是一种特殊的委托类型,主要用于消息或通知的传递。事件只能从事件的发布类型中调用,并且通常基于EventHandler委托,该委托具有代表事件发送者的对象和System.EventArgs派生的类,其中包含有关事件的数据。 定义事件数据 声明发布类中的事件 定义一个事件处理程序方法 使用(+=) 添加订阅事件 使用(-=) 取消订阅事件 .NET委托,事件和Lambda表达式 标签:语法 parameter cti 委托和事件 继承 opera lambda表达式 ++ 信息 原文地址:https://www.cnblogs.com/zcqiand/p/13656161.html委托
委托是什么?
为什么需要委托?
如何使用委托?
如何声明、实例化和使用委托
delegate void Del(string str);
static void Notify(string name)
{
Console.WriteLine($"Notification received for: {name}");
}
Del del1 = new Del(Notify);
//C# 2.0
Del del2 = Notify;
del1.Invoke("小明");
del2("小明");
//C# 2.0使用匿名方法来声明和实例化委托
Del del3 = delegate(string name)
{ Console.WriteLine($"Notification received for: {name}"); };
//C# 3.0使用lambda表达式声明和实例化委托
Del del4 = name => { Console.WriteLine($"Notification received for: {name}"); };
实际案例
class Program
{
///
Lambda表达式
Lambda是什么?
//C# 2.0使用匿名方法来声明和实例化委托
Del del3 = delegate(string name)
{ Console.WriteLine($"Notification received for: {name}"); };
//C# 3.0使用lambda表达式声明和实例化委托
Del del4 = name => { Console.WriteLine($"Notification received for: {name}"); };
为什么需要Lambda?
如何使用Lambda?
//仅当 lambda 只有一个输入参数时,括号才是可选的;否则括号是必需的
(input-parameters) => expression
Action line = () => Console.WriteLine();
Func
(input-parameters) => {
Action
public static void Main(string[] args)
{
List
事件
事件是什么?
何时使用委托和事件?
如何使用事件?
发布事件
public class CustomEventArgs : EventArgs
{
public CustomEventArgs(string message)
{
Message = message;
}
public string Message { get; set; }
}
public delegate void CustomEventHandler(object sender, CustomEventArgs args);
public event CustomEventHandler RaiseCustomEvent;
//使用泛型版本
public event EventHandler
订阅事件
void HandleCustomEvent(object sender, CustomEventArgs a)
{
// Do something useful here.
}
publisher.RaiseCustomEvent += HandleCustomEvent;
publisher.RaiseCustomEvent -= HandleCustomEvent;
示例
using System;
namespace DotNetEvents
{
// 定义事件信息的类
public class CustomEventArgs : EventArgs
{
public CustomEventArgs(string message)
{
Message = message;
}
public string Message { get; set; }
}
// 发布事件的类
class Publisher
{
// 使用EventHandler
参考
文章标题:.NET委托,事件和Lambda表达式
文章链接:http://soscw.com/index.php/essay/39690.html