使用C语言,java,C# 分别实现 委托/函数指针,并做对比

《C# 语言入门详解(刘铁锰) - 学习笔记 - 委托》 委托 文章目录委托前言一、委托是什么?二、委托的一般使用三、委托的高级使用 前言 委托: 函数指针的“升级版”;(C/C++中的函数指针) 委托分类: Action委托、Function委托、自定义委托; ”一切皆地址“: 程序(本质) = 数据 + 算法;(变量(数据) 是以某个地址为起点的一段内存中所存储的值;函数(算法) 是以某个地址为起点的一段内存中所存储的一组机器语言指令) Java 中没有与委托相对应的功能实体 一、委托是什么? 定义: 引用类型(在委托对象的引用中,存放的是对方法 阅读详情

C语言实现:

// MyTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <stdio.h>

//函数指针,相当于C# 的 delegate int T(int a, int b);
typedef int (*T)(int, int);

////定义一个和委托类型T一样的函数,和C#语言一样
int MyAdd(int a, int b)
{
    return a + b;
}

//定义一个调用委托的函数,和C#语言一样
int myTest(int a, int b, T t)
{
    return t(a, b);
}
int main()
{
    //函数指针的赋值,和委托的赋值一样
    T t = MyAdd;

    //输出3
    printf("%d\n", myTest(1, 2, t));
}

//结果返回a + b = 3;

C# 实现

public class Program
{
    //定义一个委托,相当于C语言中的
    //typedef int (*T)(int, int);
    delegate int T(int a, int b);

    static void Main(string[] args)
    {
        //定义一个调用委托的函数,和C语言一样
        int myTest(int a, int b, T t)
        {
            return t(a, b);
        }

        //定义一个和委托类型T一样的函数,和C语言一样
        int MyAdd(int a, int b)
        {
            return a + b;
        }
        //委托的实例化,将MyAdd设为委托T类型
        T t = MyAdd;

        Console.WriteLine(myTest(1, 2, t));
        //结果3 
    }
}

Java实现

package com.kaixin.mytest;

/**
 * @Auther: Zg
 * @Date: 2023/3/19 - 03 - 19 - 18:45
 * @Description: com.kaixin.mytest
 * @version: 1.0
 */
@FunctionalInterface
public interface IMyTest {
    Integer T (Integer a,Integer b);
}

    int myAdd(Integer a, Integer b)
    {
        return a+b;
    }

    int myTest(Integer a, Integer b, IMyTest t)
    {
        return t.T(a,b);
    }

    @Test
    void test2()
    {
        //IMyTest t = (x,y)->{return (x+y);};  //可以
        IMyTest t = this::myAdd;  //也可以
        System.out.println(myTest(1,2,t));
        //结果 3
    }

C#入门详解_19_委托详解(一切皆地址;C/C++中的函数指针;委托的声明、使用;类似C++中的函数对象包装器;委托高级使用:多播委托、隐式显式,异步同步调用;接口interface取代委托) 委托(delegate)是函数指针的"升级版"实例:C/C++中的函数指针一切皆地址变量(数据)是以某个地址为起点的一段内存中所存储的值函数(算法)是以某个地址为起点的一段内存中所存储的一组机器语言指令,CPU执行之后完成算法。直接调用与间接调用直接调用:通过函数名来调用函数,CPU通过函数名直接获得函数所在地址并开始执行→返回间接调用:通过函数指针来调用函数,CPU通过读取函数指针存储的值获得函数所在地址并开始执行→返回Java中没有与委托相对应的功能实体。 阅读详情

相关推荐

C#中使用指针源程序,我想许多C程序员不愿意学习Java的原因之一就是Java不支持指针

C#中使用指针源程序,我想许多C程序员不愿意学习Java的原因就是Java不支持指针,但是现在类似于Java的C#却已经支持了指针,你可以使用unsafe关键字来告诉编译器下面的函数或者代码是不安全的。一旦你使用了unsafe,那么你就可以在unsafe区域中使用指针。

C# 函数指针

【代码】C# 函数指针。

Thomas会写字 390

USB3.0/3.1信号完整性分析仿真

• 1.了解USB3.0通路的互连关系,解读原理图接口电路和PCB的互连电路。对USB布线的通路及阻抗进行检查和分析。 • 2.使用USB3.0实例文件提取互连线的S参数,选择SSRX+,SSRX-,SSTX+,SSTX-,D+,D-组的互连线,使用PowerSI,Clarity,3DFEM等工具提起关键网络的S参数。提取S参数以后需要分析S参数的互连特征,对S参数的结果开展评价。 • 3.使用SYSTEM SI USB3 Compliance工程向导模型,建立USB仿真实例框架,在框架BOLCK中带入S参

小猪配齐电子设计 1万+

2分钟讲清楚C#的委托, C语言的函数指针,Java的函数式接口

委托的意义在于, 它可以将函数封装成可以像变量 int, string这样的类型传入到另外的函数中, 例如函数int Test(int a, int b, Calculate c)定义一个最简单的委托 delegate int Calculate(int a, int b);换成C语言的 typedef int (*Calculate)(int a, int b)这大大提高了函数的功能和可扩展性, 可以在不改变Test函数的参数的同时,很多人不知道, C# 的委托, 和C语言的函数指针是一个东西。

helldoger的博客 1122

ObjectMapper解析JSON数据

的时候捕获的数据,往往需要结合文档所定义的类进行转换,也就是。库中的一个关键类,它的作用是将。对象之间进行相互转换。

weixin_57128596的博客 975

UE5垃圾回收优化实战:定位GC卡顿与内存泄漏

垃圾回收(GC)是Unreal Engine 5中保障UObject内存安全的核心机制,其基于引用图的标记-清除原理决定了性能高度依赖引用结构合理性。当GC频繁触发或单次耗时突增,往往映射出蓝图强引用冗余、C++根对象管理失控或资源生命周期设计缺陷等底层问题。技术价值在于降低主线程阻塞、稳定60帧体验、抑制内存异常增长;典型应用场景包括关卡切换卡顿、UI打开后持续GC、打包后内存不释放等。本文聚焦UE5特有的Full GC模式、UObject生命周期约束及GC触发时机不可见性,提供从蓝图变量规范、TSoft

weixin_31995251的博客 362

Java如何实现类似于C语言中函数指针的功能

在C语言中,有一个非常重要的概念—函数指针,其最重要的功能是实现回调函数。 什么是回调函数? 所谓回调函数,就是指函数先在某处注册,而它将在稍后某个需要的时候被调用。在Window系统中,开发人员想让系统动态链接库(Dynamic Link Library,DLL)调用自己编写的一个方法,于是利用DLL当中回调函数的接口来编写程序,通过传递一个函数的指针来调用,这个过程就称为回调。 回调函数一般用...

君子为猿的博客 880

MTK Linux DRM分析(八)- KMS drm_crtc.c

CRTC 在 Linux DRM 子系统中是显示控制的核心,负责时序生成、模式设置和管线的调度。理解其工作原理和 API 对于进行底层图形开发、调试显示问题或 simply understanding how your graphics stack works 都至关重要。

iTom1900 1349

Java实现泛型委托类似C#Action<T>

一、C# Action 泛型委托(帮助理解委托) 描述: 封装一个方法,该方法只采用一个参数并且不返回值. 语法: public delegate void Action(T arg); T: 参数类型:此委托封装的方法的参数类型 arg: 参数:此委托封装的方法的参数 备注: 通过此委托,可以将方法当做参数进行传递.Action 泛型委托:封装一个方法,该方法只采用一个参数并

璐璐的专栏 6262

转载:YOLOv8改进全新Inner-IoU损失函数:扩展到其他SIoU、CIoU等主流损失函数,带辅助边界框的损失

目标检测是计算机视觉中的基本任务,包括目标分类和定位。边界框回归损失函数是检测器定位分支的重要组成部分,检测器的定位精度在很大程度上取决于边界框回归,在当前的检测器中发挥着不可替代的作用。在BBR中,IoU损失可以准确描述预测边界框与GT框之间匹配的程度,确保模型在训练过程中可以学习到目标的位置信息。作为现有主流边界框回归损失函数的基本部分,IoU定义如下:B和分别代表预测框和GT框。定义IoU之后,相应的损失可以定义如下:至今,基于IoU的损失函数逐渐成为主流并占据主导地位。

wuling129的专栏 4942

《Sigrity SystemSI 2023+LPDDR4仿真自学笔记》(一)创建工程(Part1)

为了加强SystemSI 2023软件的熟悉度,咱们完整的走一个仿真全流程。

weixin_45199544的博客 6334

Java 和C# 最大的不同是对底层的控制能力不同

大家好,我是辣条。 刷到了一个很有意思的问题,Java和C#最大的不同是什么,辣条对Java和C#都没有研究的特别深,但是下面这个回答可供大家参考,同时欢迎大家在评论留下自己的看法。 我觉得抛开语法而谈,最主要的还是对底层的控制能力不同。 比如在 C# 里面你能干的: var x = new int[10]; fixed (int* p = x) { Console.WriteLine(*((long*)p - 1)); // 10 } 上述代码会输出 10,为什么?因为 ..

五包辣条的博客 1万+

3. 动手运行第一个 SAP Fiori Elements 应用(ListReport 类型)

这个代理服务器能够自动监听我们 Fiori Elements 应用里向 ES5 Demo 系统发送的 OData 请求,拦截这个请求,并通过 Node.js 代码向 ES5 服务器转发,拿到响应数据后再交还给 Fiori Elements 应用。后者对自己发出的请求被代理这件事情一无所知。本文的任务是,大家按照我的介绍,在本地成功运行笔者准备的这个 Fiori Elements 应用。的错误消息, 说明大家安装的 Node.js 版本没有达到本地运行 Fiori Elements 的最低要求。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1671

C语言中的函数指针、函数的直接/间接调用、C# 委托(自定义委托、内置泛型委托、委托的实例化、委托的一般使用(模板方法、回调方法)、泛型委托、多播委托、同步/异步使用委托)

最初使用委托时,均需要先自定义委托类型,然后定义一个符合委托类型签名的函数,在调用前,需声明并创建委托对象,将指定函数与委托进行关联。委托的声明:delegate ()//声明委托类型 Public int Add(int param1 , int param2) //定义同签名函数 {//声明委托 math = new Math(Add);//创建委托对象,与指定进行关联 math(3 , 4);//调用委托函数。.................................

weixin_43809550的博客 1458

【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍)

本专栏整理了《深度学习时间序列预测案例》,内包含了各种不同的基于深度学习模型的时间序列预测方法,例如LSTM、GRU、CNN(一维卷积、二维卷积)、LSTM-CNN、BiLSTM、Self-Attention、LSTM-Attention、Transformer等经典模型,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 4万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【C#语言入门】16. 委托详解

委托是一种类(class),类是数据类型所以委托也是一种数据类型它的声明方式与一般的类不同,主要是为了照顾可读性和C/C++传统注意声明委托的位置,避免写错地方结果声明成嵌套类型委托与所封装的方法必须“类型兼容”——》返回值的数据类型一致,参数列表在个数和数据类型上一致(参数名不需要一样)

Cziii的博客 2028

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C语言函数指针实现接口思想

C语言函数指针实现接口思想   C语言作为经典的面对过程编程语言,自其产生已经历了很多年,这期间也出现了很多其他的编程语言,但C语言仍然被很多编程人员使用,说明C语言有着其独特的地方。面对对象编程是一种思想,它是由面度过程编程逐步演化而来,所以其实现可以通过面对过程编程语言实现。指针是C语言比较点睛之笔,使用指针可以更方便的操作变量,但指针也有着自身的弊端如内存泄露等不安全问题,因而被面对对

QueJay 3697

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C#基础_委托详解

C#基础_委托详解·目录什么是委托委托(delegate)是函数指针的"升级版"一切皆地址直接调用与间接调用java中没有与委托相对应的功能实体为什么说委托(delegate)是函数指针的"升级版"实例演示:Action演示委托的简单使用 什么是委托 委托(delegate)是函数指针的"升级版" 委托是用来处理其他语言(如 C++、Pascal 和 Modula)需用函数指针来处理的情况的。不过与 C++ 函数指针不同,委托是完全面向对象的;另外,C++ 指针仅指向成员函数,而委托同时封装了对象实例和方法

JiuMeilove的博客 5万+

c#委托(精简版,好理解)

首先,我们要知道,委托它是一种类。结果如下:所以它确实是一种类!我们新定义一个除法方法我们来新建一个自定义委托注意要声明在类平级的地方,这个委托名字叫Calc,第一个double是返回值类型,后面两个是参数类型。

qq_61441003的博客 3769

委托详解(经典,非常详细)

实例=对象,函数=方法,委托=函数指针委托(delegate)初理解:这儿有件事情我不亲自去做,而是交代给别人替我去做,即间接的做。

m0_65804432的博客 1752

C# 委托与事件总结

C# 中的委托和事件可以说是超级拦路虎了,一个不小心就容易让人直接放弃学习。最近几天花了点时间钻研了一下,查看了一些资料,希望做个总结。 我还达不到技术大佬的级别,主要就是做个**自我总结**,很推荐大家看一下我下面发的参考资料里的文章和视频,那些是真正的大佬产出的内容。

萌宅鹿的技术小屋 2617

Unity/C#------委托与事件(一篇文章彻底搞懂...)

从委托开始介绍到事件 从完整Event声明格式 到简洁的声明格式 到UnityEvent...

leikang111的博客 3287

C#与C/C++的交互(包括基本类型传递,指针传递,函数指针传递,结构体的传递)

原文地址:https://www.cnblogs.com/warensoft/archive/2012/12/10/2281839.html 目录 一、互调的基本原理 二、基本数据类型的传递 三、指针的传递 四、函数指针的传递 五、结构体的传递 六、完整代码 最近在编写Warensoft3D游戏引擎,并预计明年年初发布测试版本,底层引擎使用DirectX和MONO来编写,上层...

仙魁XAN 1万+

C#入门 019 委托 delegate

委托是一种类(class),类是数据类型所以委托也是一种数据类型它的声名方式与一般的类不同,主要是为了照顾可读性和C/C++传统注意声明委托的位置避免写错地方结果声明成嵌套类型声明在namespace里面 与其他类同级委托与所封装的方法必需“类型兼容“返回值的数据类型一致参数列表在个数和数据类型上面一致(参数名不需要一致 )

gjw3037109961的博客 1170

JAVA/RUST/C#/Kotlin 各语言语法糖及特性对比表

声明:所有数据均由AI整合生成。

子墨的日常 1620

C#:委托详解(一)

委托(delegate)是函数指针的"升级版",实例:C/C++中的函数指针变量(数据)是以某个地址为起点的一段内存中所存储的值函数(算法)是以某个地址为起点的一段内存中所存储的一组机器语言指令直接调用与间接调用直接调用:通过函数名来调用函数,CPU通过函数名直接获得函数所在地址并开始执行→返回间接调用:通过函数指针来调用函数,CPU通过读取函数指针存储的值获得函数所在地址并开始执行→返回Java中没有与委托相对应的功能实体,对指针的舍弃比较彻底。

m0_52862280的博客 1223
上一篇: C++中 vector ,list ,set,map的互相转换
下一篇: C# 和Java 实现多态的不同:
潘诺西亚的火山
博客等级 码龄10年 7415粉丝 283原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

潘诺西亚的火山

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

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

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

打赏作者

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

抵扣说明:

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

余额充值