委托、事件、泛型、泛型委托

文章详细介绍了C#中的委托、事件和泛型概念。委托是存储方法地址的类型,可以用来传递方法。事件是特殊的委托,只能在当前类中访问,提供安全性。泛型允许在不指定具体类型的情况下编写通用代码,泛型委托如Action和Func在.NET中广泛使用。

目录

1、事件是什么

C# 中委托和事件的区别

匿名委托

什么是泛型

什么是委托

什么是泛型委托

1.  用自己的话解释什么是泛型,什么是委托,什么是泛型委托,有哪些常用的泛型委托


1、委托是什么

​ 委托和类一样是一种用户自定义类型,它存储的就是一系列具有相同签名和返回类型的方法的地址,调用委托的时候,它所包含的所有方法都会被执行。

2、委托声明

(1)委托可以声明在类外部,也可以在类内部

(2)跟方法有点类似,有参数,返回值,访问修饰符,比方法声明多一个关键字delegate

3、委托的本质

(1)委托是一个类,继承自MulticastDelegate

​ MulticastDelegate这个类我们自己定义的类是无法继承的

(2)委托的构造函数,需要传递一个方法作为参数

(3)委托的内部有三个方法Invoke,BeginInvoke,EndInvoke

二、委托实例化和执行

1、委托实例化

(1)通过New来实例化

(2)直接=一个方法,这个是编译器提供的语法糖

(3)直接=一个匿名委托

(4)直接=一个Lambda

2、委托执行

(1)Inovke执行委托

​ 如果委托定义没有参数,则Inovke也没有参数;委托没有返回值,则Inovke也没有返回值

(2)BeginInvoke开启一个新线程执行委托

​ NetCore不支持,NetFamework支持 NetCore有更好的多线程功能来支持实现类似功能

(3)EndInvoke等待BeginInvoke执行完成后再执行

1、事件是什么

(1)事件是委托实例,增加一个关键字Event,是特殊的委托

(2)事件只能在当前类被访问,子类和类外部均不能执行类中的事件方法(安全)

(3)委托和事件从本质上来说没啥区别

原文链接:C#高级--委托详解_c# 委托_李宥小哥的博客-CSDN博客

在 C#语言中,委托则委托某个方法来实现具体的功能。

委托是一种引用类型,虽然在定义委托时与方法有些相似,但不能将其称为方法。

委托在使用时遵循三步走的原则,即定义声明委托、实例化委托以及调用委托。

从数据结构来讲,委托是和类一样是一种用户自定义类型。

委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。

调用委托的时候,委托包含的所有方法将被执行。

委托是 C# 语言中的一个特色,通常将委托分为命名方法委托、多播委托、匿名委托,其中命名方法委托是使用最多的一种委托。

C# 中委托和事件的区别

事件是一个特殊的多播委托。

声明一个事件不过类似于声明一个进行了封装的委托类型的变量而已。

声明一个事件使用 event 关键字,而委托声明一个委托使用 delegate 关键字。

委托注册使用 “=” 或 “+=” 运算符,而注册事件只能使用 “+=” 。

事件应该由事件发布者触发,而不应该由事件的客户端(客户程序)来触发。

原文链接:C# 中委托和事件的区别_c#委托和事件的区别_程序员思维的博客-CSDN博客

C#命名方法委托

在 C#语言中命名方法委托是最常用的一种委托,其定义的语法形式如下。

修饰符 delegate 返回值类型 委托名 ( 参数列表 );

从上面的定义可以看出,委托的定义与方法的定义是相似的。例如定义一个不带参数的委托,代码如下。

public delegate void MyDelegate();

在定义好委托后就到了实例化委托的步骤,命名方法委托在实例化委托时必须带入方法的具体名称。

实例化委托的语法形式如下。

委托名 委托对象名 = new 委托名 ( 方法名 );

委托中传递的方法名既可以是静态方法的名称,也可以是实例方法的名称。

需要注意的是,在委托中所写的方法名必须与委托定义时的返回值类型和参数列表相同。

在实例化委托后即可调用委托,语法形式如下。

委托对象名 ( 参数列表 );

在这里,参数列表中传递的参数与委托定义的参数列表相同即可。

匿名委托

在 C# 语言中匿名委托是指使用匿名方法注册在委托上,实际上是在委托中通过定义代码块来实现委托的作用,具体的语法形式如下。

//1. 定义委托

修饰符 delegate 返回值类型 委托名 ( 参数列表 );

//2. 定义匿名委托

委托名 委托对象 = delegate

{

//代码块

};

//3. 调用匿名委托

委托对象名 ( 参数列表 );

原文链接:C#委托(Delegate)简介_c# delegate_小小小陆的博客-CSDN博客

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

事件

为了避免在类型中直接暴露一个委托类型字段带来的问题,C#引入了事件来封装一个委托类型字段

 

什么是泛型

泛型是—种通用的编程技术,它允许在编写代码时使用类型参数来实现通用性,以便在不同的数据类型上运行相同的代码,在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型。

什么是委托

委托和类一样是一种用户自定义类型,委托是一种类似于函数指针的类型,与之对应的方法必须和它具有相同的签名,即相同的参数个数,相同的参数类型和相同的返回值类型。它允许将方法作为参数传递给其他方法或将方法从一个对象传递到另一个对象。

什么是泛型委托

泛型委托是一种允许在运行时指定类型的委托。它是一种泛型类型,可以用于多种不同的类型。

泛型委托与普通委托的区别在于,它可以在定义委托时不指定具体的参数类型,而是使用泛型类型参数代替。在实例化委托时,必须指定参数类型,这样可以根据需要创建多个不同类型的委托实例。

泛型委托在.NET框架中得到广泛应用,特别是在LINQ(语言集成查询)中。

1.  用自己的话解释什么是泛型,什么是委托,什么是泛型委托,有哪些常用的泛型委托

答:泛型是—种通用的编程技术,它允许在编写代码时使用类型参数来实现通用性,以便在不同的数据类型上运行相同的代码,在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型。

委托和类一样是一种用户自定义类型,委托是一种类似于函数指针的类型,与之对应的方法必须和它具有相同的签名,即相同的参数个数,相同的参数类型和相同的返回值类型。它允许将方法作为参数传递给其他方法或将方法从一个对象传递到另一个对象。

泛型委托是同时使用泛型和委托的概念,它允许创建可以在不同类型上使用的通用委托类型。

常用的泛型委托有:

1.Action委托:不返回结果,但可以接收一个参数T。

2.Func委托:接收一个参数T,并返回一个TResult结果。

3. Predicate委托:接收一个参数T,并返回一个布尔值,用于判断该对象是否符合某个条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

创可贴治愈心灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值