Action 是一个不具有返回类型的方法,他的类型参数数量同样多达16个 。下面展示了部分Action类型参数:
csharp
delegate void Action;
delegate void Action<in T> (T t);
delegate void Action(in T1,in T2)(T t1,T t2);
我们来看一下例子,以Func为例,Action同理
csharp
class Demo
{
public void Num<T>(T[] array, Func<T, T> func)
{
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(func(array[i]));
}
}
}
class Program
{
static void Main(string[] args)
{
Demo demo = new Demo;
int array = new int {2,4,6 };
demo.Num<int>(array, NumAdd);
Console.ReadLine;
}
static int NumAdd(int num)
{
return ++num;
}
}
从代码中可以看出,我们将 Demo 类中的 Num 方法的第二个参数类型写成了 Func<T,T>,这里的意思是委托实例的返回类型和类型参数都是T类型 。我们在Main函数中通过委托,控制台输出结果是3、5、7。这时我们就看出了使用 Func 和 Action 的优点了,我们不需要在外部显式的定义委托,比较方便 。
6.冷知识
1. 委托与接口
一般来说接口可以解决的问题,委托同样也可以解决,那么什么时候使用委托呢?我们来看一下:
(1)当需要多播的时候;
(2)订阅者需要多次实现接口的时候 。
2. 委托兼容性
(1)委托类型
委托类型之间互不兼容,即使它们的签名一样也不行,也就是说如下的写法是错误的 。
csharp
delegate void DD1;
delegate void DD2;
DD1 dd1=Method;
DD2 dd2=dd1;
(2)委托实例
如果委托实例具有相同的方法目标,那么委托实例就是相等的 。
(3)参数
当调用一个方法时,提供的参数可以比方法参数更具体 。例如被调用的方法参数是 Object类型,但是提供的参数是 String 类型,这时程序不会报错,因为string 来自 object,string 比 object 更具体 。(委托只支持引用转换)
(4)返回值
同参数一样,当调用方法时,可以获得一个比被调用方法返回值更具体的返回值 。
作者简介:朱钢,笔名羽生结弦,CSDN博客专家,.NET高级开发工程师,7年一线开发经验,参与过电子政务系统和AI客服系统的开发,以及互联网招聘网站的架构设计,目前就职于北京恒创融慧科技发展有限公司,从事企业级安全监控系统的开发 。
【End】
【什么是C# 委托?这篇文章让你困惑全摆脱】
推荐阅读
- 枸杞茶有什么功效作用 枸杞茶的七种冲泡方法
- 玄米茶的冲泡方法讲解
- 拼音输入法学会这几个小技巧,什么字都能打出来
- 擂茶怎么喝
- 拼多多搜索排名底层逻辑算法
- 普洱茶基本概念,什么是普洱茶熟茶和普洱茶生茶
- 秋天钓大板鲫用什么饵料好 夏天钓板鲫用什么饵料
- 梦见和仇人大打出手 梦见与父亲反目成仇大打出手意味什么
- 梦见吃青枣很脆很甜 梦见吃青枣子是什么预兆?
- 淘宝直播直通车怎么开 淘宝直播都是怎么开通的
