区块链资讯网站建设,湖南长沙新增病例最新消息,沙井做网站公司,百度seo推广首选帝搜软件今天来介绍一下delegate和event。delegate在c#中可以定义一个函数类型#xff0c;可以将函数作为一个对象来使用。event在c#中则可以看做一个函数的集合#xff0c;event中包含了一个或多个函数。 delegate
using System;public class MyClass
{//定义委托public delegate v… 今天来介绍一下delegate和event。delegate在c#中可以定义一个函数类型可以将函数作为一个对象来使用。event在c#中则可以看做一个函数的集合event中包含了一个或多个函数。 delegate
using System;public class MyClass
{//定义委托public delegate void EventHandler(string pParameter);//委托对象public EventHandler handler null;public void Main(){handler TestFunction;handler(Hello World);}private void TestFunction(string pParameter){Console.WriteLine(pParameter is pParameter);}
} 如上代码定义委托关键字“delegate”委托的定义包含委托返回值、委托名称、委托参数。定义了委托类型之后就可以声明委托对象了。EventHandler就是定义的委托类型handler则是声明的委托对象。 在使用过程中就可以将函数TestFunction赋值给handler这里需要注意的是委托的返回值和参数必须和赋值函数的返回值和参数一致否则编译器则会提示错误。在使用时像普通的函数调用一样使用即可。 event
using System;public class MyClass
{public delegate void EventHandler(string pParameter);public event EventHandler handler null;public void Main(){handler HelloWorld;handler GoodMorning;handler();handler - GoodMorning;handler?.Invoke();/*输出结果* This is HelloWorld* This is GoodMorning* This is HelloWorld*/}private void HelloWorld(string pParameter){Console.WriteLine(This is HelloWorld);}private void GoodMorning(string pParameter){Console.WriteLine(This is GoodMorning);}
} 如上代码使用关键字“event”来定义事件这里的handler已经不是委托对象了而是事件对象事件的类型依然是委托类型。和委托对象不同事件对象可以包含多个函数通过运算符来进行添加函数。如果需要从事件中去除某个函数则可以通过-运算符来移除函数。 事件除了可以像普通函数一样通过()括号的方式调用也可以通过Invoke方法进行调用。作者个人比较喜欢用Invoke方法进行调用这样可以使用条件运算符“?”来进行判断事件是否为空。 官方文档连接
delegate文档连接https://learn.microsoft.com/zh-cn/dotnet/csharp/delegate-class
event文档连接https://learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/events/how-to-subscribe-to-and-unsubscribe-from-events