美文网首页
C# 委托(个人理解)

C# 委托(个人理解)

作者: 葬歌倾城 | 来源:发表于2019-07-17 22:08 被阅读0次

 委托是用户自定义的类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递. 储存的是一系列具有相同参数和返回类型方法的地址列表,调用委托时,此委托列表的所有方法都将被执行。委托类型有:delegate、Action、Func、Predicate。事件是一种特殊的委托。

委托是一种引用类型,包含特定参数列表和方法。

委托类似于C或C++中的函数的指针,委托是存有对某个方法的引用的一种引用类型。

一旦声明一个委托,委托就可指向与其具有相同签名的方法。

当创建委托实例的时候,就会将方法作为参数传递给new语句,那么委托就持有了该方法。

调用委托的时候,就把传递给委托的参数传递给委托所指向的方法。

委托主要用于实现事件和回调方法。

委托的声明

1.delegate

delegate至少0个参数至多32个参数,可以无返回值,也可以指定返回值类型

例:

public delegate int Delegate1(int x, int y);表示有两个参数,并返回int型。

2.Action

Action是无参,无返回值的泛型委托

Action<int,string> 表示有传入参数int,string无返回值的委托

Action<int,string,bool> 表示有传入参数int,string,bool无返回值的委托

Action<int,int,int,int> 表示有传入4个int型参数,无返回值的委托

Action至少0个参数,至多16个参数,无返回值

例  

public void Test<T>(Action<T> action,T p)

 {

        action(p);

}

3.Func

 Func是有返回值的泛型委托

Func<int> 表示无参,返回值为int的委托

Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

Func<T1,T2,,T3,int> 表示传入参数为T1,T2,,T3(泛型)返回值为int的委托

Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void

 例:

        public int Test<T1,T2>(Func<T1,T2,int>func,T1 a,T2 b)

        {

            return func(a, b);

        }

4.predicate

predicate 是返回bool型的泛型委托

predicate<int> 表示传入参数为int 返回bool的委托

Predicate有且只有一个参数,返回值固定为bool

例:

public delegate bool Predicate<T> (T obj)

2019.7.17 面试问题所记

相关文章

  • C# 委托(个人理解)

    委托是用户自定义的类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.储存的是一系列具有相同参数...

  • C#日记——委托

    很多人说C#和JAVA很像,但也有很多地方不同,委托就是一个C#特有的东西委托可以理解为C语言里的函数指针,只要参...

  • C# 委托的理解

    1、什么是委托 委托可以理解为持有一个或多个方法的对象。如果执行委托的话,委托会 执行它所"持有"的方法。委托可以...

  • C#委托的理解

    最近准备换下工作,想着接下来要进行面试,肯定少不了各种知识点的询问。趁这个机会把各个知识点都回顾下。 今天抽出时间...

  • 第一部分:C#语言基础----委托和事件

    第3章 C#中的委托和事件 3.1 理解委托 3.1.1 将方法作为方法的参数 委托是一个类,它定义了方法的类型,...

  • C# 委托

    C#委托 C#中的委托(Delegate)类似于C或C++中函数的指针。委托(Delegate)是存有对某个方法的...

  • 教小明学一点点编程—C#篇(0)

    像小明这样使用C#的新同学,一定都会被C#的复杂的委托事件机制所困惑,那么我们不如解释一下什么是C#中委托。 委托...

  • C#委托 匿名函数 Lambda

    C# 中委托的发展#在 C# 1.0 中,通过使用在代码中其他位置定义的方法显式初始化委托来创建委托的实例。 C#...

  • 初探委托

    前言 虽然学习C#有段时间了,可一直没怎么接触委托,在学习多线程的时候,看到了很多委托的例子,有点不太理解,故查阅...

  • 2020-02-19

    C# 委托 (一)—— 委托、 泛型委托与Lambda表达式 原创wnvalentin 最后发布于2018-08-...

网友评论

      本文标题:C# 委托(个人理解)

      本文链接:https://www.haomeiwen.com/subject/nctclctx.html