C#__委托的基本用法

news2025/1/18 19:03:14

// 委托A

class DelegateA
    {
        // 委托,一个类型,可以赋值一个方法的引用
        // 定义
        delegate void Tool(int x);
        delegate long ToolLong(long x, long y);
        delegate string GetString();
        public void Delegate()
        {
            // 赋值
            Tool tool = null;
            ToolLong toollong = null;

            int x = 12;
            GetString getString1 = x.ToString;
            GetString getString2 = new GetString(x.ToString);

            // 使用:将方法传递给委托,需要参数一一对应
            tool = Test;
            tool(100); // 我是委托:100

            if (toollong != null) // 安全检测
            {
                toollong(100, 12); // 异常
            }

            Console.WriteLine(getString1()); // 12
            Console.WriteLine(getString2()); // 12
        }

        public void Test(int x)
        {
            Console.WriteLine("我是委托:"+x);
        }
    }

 // 委托B

    class DelegateB
    {
        public static double MultiplayByTwo(double value)
        {
            return value * 2;
        }
        public static double Square(double value)
        {
            return value * value;
        }

    }

// 主函数调用

        static void Main(string[] args)
        {
            // 委托delegateA
            DelegateA delegaA = new DelegateA();
            delegaA.Delegate();

            // 委托delegateB
            // 委托类型数组和当做参数使用
            DoubleOpDelegate[] operations = { DelegateB.MultiplayByTwo, DelegateB.Square }; // 将委托当数组使用
            foreach (DoubleOpDelegate op in operations) // 遍历委托
            {
                // Console.WriteLine(op(6)); // 12 36
                ProcessAndDisplayRes(op, 4); // result:8  result:16
            }
        }

        delegate double DoubleOpDelegate(double x); // 定义委托
        static void ProcessAndDisplayRes(DoubleOpDelegate op,double value)
        {
            double result = op(value);
            Console.WriteLine("result:" + result);
        }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/884623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

clickhouse 集群搭建

目录 一、 首先要安装单节点集群 二、安装zookeeper并搭建集群 1. 配置host 2. 安装zookeeper 3. 配置zookeeper 三、clickhouse 集群配置 1.配置metrika.xml文件 2. 修改clickhouse的配置文件 一、 首先要安装单节点集群 在这里就不太赘述。官网下载安装包&#xff0…

离线安装Nginx(rpm方式)

环境:centos7.9 下面将展示通过rpm方式安装Nginx 1.官方下载Nginx rpm包 下载地址 http://nginx.org/packages/ 下载版本根据操作系统版本进行选择,本次操作系统是centos7.9 - 64位系统,所以对应的下载路径是: http://nginx.or…

视频监控管理平台EasyCVR视频平台通过navicat修改登录密码的具体操作步骤

TSINGSEE青犀视频监控管理平台EasyCVR可以根据不同的应用场景需求,让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上,平台可实现视频实时直播、云端录像、云存储、回放与检索、告警上报、视频快照、…

OJ练习第147题——字符串中的查找与替换

字符串中的查找与替换 力扣链接:833. 字符串中的查找与替换 题目描述 你会得到一个字符串 s (索引从 0 开始),你必须对它执行 k 个替换操作。替换操作以三个长度均为 k 的并行数组给出:indices, sources, targets。 要完成第 i 个替换操…

RDMA Send Receive操作

1. 前言 RDMA指的是远程直接内存访问,这是一种通过网络在两个应用程序之间搬运缓冲区里的数据的方法。RDMA与传统的网络接口不同,因为它绕过了操作系统。这允许实现了RDMA的程序具有如下特点: 绝对的最低时延最高的吞吐量最小的CPU足迹 &am…

《游戏编程模式》学习笔记(四) 观察者模式 Observer Pattern

定义 观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 这是定义,看不懂就看不懂吧,我接下来举个例子慢慢说 为什么我们需要观察者模式 我们看一个很简…

二叉树的构建及遍历

题目链接:https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId60&&tqId29483&rp1&ru/activity/oj&qru/ta/tsing-kaoyan/question-ranking 题目 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建…

视频播放相关记录

一、场景 App应用测试在二次回归时,提出了安卓端视频定位不准的问题。 二、分析 代码层面使用了安卓原始的MediaPlayer中的seekTo接口来定位: mp.setOnInfoListener(new MediaPlayer.OnInfoListener() {Overridepublic boolean onInfo(MediaPlayer mp, i…

多旋翼飞控底层算法开发系列实验 | 多旋翼动力系统设计实验1

多旋翼飞控底层算法开发系列实验 | 多旋翼动力系统设计实验1 01 多旋翼动力系统简介 多旋翼无人机的动力系统通常包括螺旋桨、电机、电调以及电池。动力系统是多旋翼最重要的组成部分,它决定了多旋翼的主要性能,如悬停时间、载重能力、飞行速度和飞行距…

The kernel appears to have died. It will restart automatically.

在使用pytorch运行一个小案例时,绘制图像时出现了 The kernel appears to have died. It will restart automatically. 查看 anaconda prompt OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized. OMP: Hint This means…

NestJs 中使用 mongoose

在 NestJS 中链接 MongoDB 有两种方法。一种方法就是使用TypeORM来进行连接,另外一种方法就是使用Mongoose。 此笔记主要是记录使用Mongoose的。所以我们先安装所需的依赖: npm i nestjs/mongoose mongoose安装完成后,需要在AppModule中引入…

前端基础学习笔记

目录 1.HTML部分1.HTML简介2.实例介绍3.标题4.段落5.链接6.图像7.表格8.速查列表1.基本文档2.基本标签3.文本格式化4.链接5.图片6.无序列表7.有序列表8.定义列表9.表格10.框架11.表单 2.CSS部分1.CSS简介1.什么是CSS2.为什么使用CSS3.CSS作用 2.基本用法1.CSS语法2.CSS应用方式…

Failed to resolve component: v-data-table“. vue3 + vuefity 使用 v-data-table 报错解决

在使用 vue3 vuetify 开发项目的过程中用到了 v-data-table 组件,结果在使用的过程中发现加载失败控制台报错。 [Vue warn]: Failed to resolve component: VDataTable解决方案: import { VDataTable } from vuetify/labs/VDataTable参考文档: https:…

双碳目标下基于“遥感+”多技术融合在碳储量、碳排放、碳循环、温室气体教程

详情点击链接:双碳目标下基于“遥感”多技术融合在碳储量、碳排放、碳循环、温室气体教程 一:双碳视角下遥感技术的研究方向 1.双碳背景及遥感的现实需求 2.全球碳库、碳收支及碳循环现状 3.碳储量、碳收支与碳循环中的遥感技术 4.ENVI及ArcGIS软件一体…

(三) CUDA 硬件实现

一组带有on-chip 共享内存的SIMD多处理器 GPU可以被看作一组多处理器, 每个多处理器使用单一指令,多数据架构(SIMD)【单指令流多数据流】 在任何给定的时钟周期内,多处理器的每个处理器执行同一指令,但操作不同的数据 每个多处理器使用以下…

广告ROI可洞察到订单转化率啦

toB广告营销人的一日三问&#xff1a; 如何实现线索增长&#xff1f;如何获取更多高质量线索&#xff1f;如何能用更少的钱拿到更多高质量的线索&#xff1f; < 广告营销的终极目标&#xff0c;就是提升ROI > 从ROI公式中&#xff0c;可以找到提升广告营销ROI的路径&…

Linux:shell脚本循环语句

目录 一、循环含义 二、echo命令 三、for 3.1.将1到100累加求和 3.2批量添加用户 3.3 根据IP地址检查主机状态 四、 while 和 until 4.1 猜价格 4.2 1-100求和 一、循环含义 循环含义 将某代码段重复运行多次&#xff0c;通常有进入循环的条件和退出循环的条件 重复…

kali搭建vulhub漏洞靶场

安装kali 下载kali作为虚拟环境&#xff0c; Get Kali | Kali Linux 通过vmvare打开&#xff0c;默认账号密码kali/kali 修改root密码 su passwd root 如果一些配置普通用户做不了就切换kali&#xff0c;或sudo 命令 kali配置 apt换源 echo > /etc/apt/sources.list v…

java对大文件分片上传

这里记录一下&#xff0c;Java对大文件的切分&#xff0c;和后端接口分片上传的实现逻辑 正常&#xff0c;前后端分离的项目其实是前端去切分文件&#xff0c;后端接口接收到切分后的分片文件去合并&#xff0c;这里都用java来记录一下。特别说明&#xff1a;我这里用的是zip包…

Codeforces Round 888 (Div. 3)ABC

Codeforces Round 888 (Div. 3) 目录 A. Escalator Conversations题目大意思路代码 B. Parity Sort题目大意思路代码 C. Tiles Comeback题目大意思路代码 A. Escalator Conversations 题目大意 判断有多少个人能够通过站在楼梯上的操作和VLAD一样高或者是VLAD通过站在楼梯上的…