首页 > 编程语言 >C#复习笔记-委托

C#复习笔记-委托

时间:2023-04-02 22:57:37浏览次数:77  
标签:复习 委托 C# void 笔记 int internal value FeedBack

     委托是一种引用类型,委托定义了了一类可以被委托实例调用的方法。它定义了方法的返回值类型和参数类型。定义了一个名为FeedBack的委托,返回一个int类型的值,带有一个int类型的参数。可以将任何类型或者结构中与委托类型匹配的方法传递给委托,可以是静态方法也可以是实例方法。如下: 

FeedBack fd = MyDelegate.FeedBackToConsole;
fd(1);
internal delegate void FeedBack(int value);
internal class MyDelegate
{
       internal static void FeedBackToConsole(int value)
    {
        Console.WriteLine("item=" + value);
    }
}

  委托(delegate)提供了一种回调函数的机制,将委托当做参数传递给另外一个方法。委托的回调方法是类型安全的。如下的例子中定义了一个返回值为void的委托FeedBack,委托指定的方法接收一个int类型的参数。MyDelegate类定义了一个静态方法Counter,这个方法接收from,to两个int类型的参数和一个 FeedBack类型的委托fb,他是一个FeedBack委托对象的引用。如果fb的变量不为null,就调用由fb变量指定的回调方法。

FeedBack(MyDelegate.FeedBackToConsole);
MyDelegate.Counter(1, 5, fd);
internal delegate void FeedBack(int value);
internal class MyDelegate
{
    internal static void Counter(int from, int to, FeedBack fb)
    {
        for (int val = from; val < to; val++)
        {
            if (fb != null)
                fb(val);
        }
    }

    /// <summary>
    /// 回调方法
    /// </summary>
    /// <param name="value"></param>
    internal static void FeedBackToConsole(int value)
    {
        Console.WriteLine("item=" + value);
    }
}

 委托可以调用多个方法,称为多播委托。使用加法运算符或加法赋值运算符(“+”或“+=”)像委托列表添加新的方法,使用减法运算符或减法赋值运算符(- 或 -=)删除委托列表中的方法。委托会按照添加的顺序依次触发。如果一个多播委托拥有费void类型的返回值,则调用者从最后一个触发的方法接收返回值。

MyDelegate d = MyDelegateMethod.Method1;
d += MyDelegateMethod.Method2;
d = d - MyDelegateMethod.Method2;

public delegate void MyDelegate(int p);
internal class MyDelegateMethod
{
    internal static void Method1(int value)
    {
        Console.WriteLine("item=" + value);
    }
    internal static void Method2(int value)
    {
        Console.WriteLine("item=" + value);
    }
}

     委托可以包含泛型类型的参数:

public delegate T OtherDelegate<T>(T p);

Func和Action委托 

     Action是无返回值的泛型委托,Action<int,int> 表示定义一个无返回值接收2个int类型的参数的委托。

    Func是有返回值的泛型委托,Func<int>表示定义一个无参数,返回值为int类型的委托。Func<String,int>表示接收一个String类型参数,返回值为int的委托。

标签:复习,委托,C#,void,笔记,int,internal,value,FeedBack
From: https://www.cnblogs.com/fangyangwa/p/17256074.html

相关文章

  • Docker - 安装Mysql
    目录前言环境安装Mysql下载Mysql安装Mysql配置Mysql前言记录下Docker下Mysql的安装环境Centos7+Docker23.0.1+Mysql8.0.27安装Mysql下载Mysql下载最新版mysqldockerpullmysql查看镜像列表dockerimagelsdockerimages查看镜像版本dockerimag......
  • Docker-Compose快速搭建LNMP
    Docker-Compose1.安装Dockersudoapt-yinstalldocker.iodockerversion查看版本号dockerhelp查看帮助文档2.更换镜像源sudosu-cat>>/etc/docker/daemon.json<<-EOF{"registry-mirrors":["https://mirror.ccs.tencentyun.com"]}EOFs......
  • Docker 镜像命令
    Docker镜像命令1.Dockerimages--列出本地镜像命令:dockerimages[OPTIONS][REPOSITORY[:TAG]]选项-a:列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);--digests:显示镜像的摘要信息;-f:显示满足条件的镜像;--format:指定返回值的模板文件;--no-trunc......
  • C - Gap Existence
    C-GapExistencehttps://atcoder.jp/contests/abc296/tasks/abc296_c 思路非常规比对。对于每个元素,计算其+x和-x情况,计算之后的值,如果也在当前列表中,则满足要求。 Codehttps://atcoder.jp/contests/abc296/submissions/40241020#include<iomanip>#includ......
  • 这可能是最全面的TCP面试八股文了
    计算机网络基础,考验一个程序员的基本功,也能更快的筛选出更优秀的人才。说说TCP的三次握手假设发送端为客户端,接收端为服务端。开始时客户端和服务端的状态都是CLOSED。第一次握手:客户端向服务端发起建立连接请求,客户端会随机生成一个起始序列号x,客户端向服务端发送的字段中包......
  • PXC集群
    主从架构存在的问题:主从之间的同步,是异步完成,也就意味着这是弱一致性。可能会导致,数据写入主库后,应用程序读取从库获取不到数据,或者可能会丢失数据,对于数据安全性要求比较高的应用是不合适的,该问题可以通过PXC集群解决。一、简介PerconaXtraDBCluster(简称PXC)是针对MySQL用......
  • C++
    同名的namespace(名字空间/命名空间)有自动合并(为了声明和定义可以分开写)在项目中函数名、全局变量、结构、联合、枚举、类,非常有可能名字冲突,而名字空间就对这些逻辑空间划分(不是物理单元划分),为了解决命名冲突,C++之父为防止命名冲突给C++设计一个名注意:namespace(名字空间/......
  • Spice模型和IBIS模型的区别
    Spice模型的特点Spice模型是进行电路级仿真的。电流,电压,电容等节点的具体参数是从元器件图形、材料特性得来,是建立在低级数据的基础上,每个BUFFER中的元器件分别被描述和仿真。仿真模型包含了详细的芯片内部设计信息。但仿真速度比较慢,只适用于电路级的设计者。IBIS模型的特点IBIS......
  • 基于matlab的CQMFB单带滤波器设计仿真
    1.算法描述QMF         在滤波器的某些附加条件下,与分析滤波器组和合成滤波器组相关联的变换是正交的。正态性意味着样品的能量在转换过程中保持不变。如果满足这些条件,滤波器具有以下显著特性:合成滤波器是分析滤波器的时间反转版本,高通滤波器是低通滤波器的调制版本,......
  • 模拟实现字符串函数strcat和strcmp
    my_strcat函数实现#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<assert.h>#include<string.h>char*my_strcat(char*dest,constchar*src){ assert(dest&&src); char*ret=dest; //找目标串的'\0' while(*des......