返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >2分钟讲清楚C#的委托, C语言的函数指针,Java的函数式接口
  • 451
分享到

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

c#c语言java 2023-09-03 19:09:23 451人浏览 安东尼
摘要

很多小伙伴学习C# 的委托时往往一头雾水, 不明白委托是什么, 有什么作用, 今天我就用2分钟讲清楚 这是一个C# 的控制台程序 定义一个最简单的委托 delegate int Calculate(i

很多小伙伴学习C# 的委托时往往一头雾水, 不明白委托是什么, 有什么作用, 今天我就用2分钟讲清楚

这是一个C# 的控制台程序
定义一个最简单的委托 delegate int Calculate(int a, int b);

这相当于定义了一个Calculate类型, 只不过这个类型需要传入2个int类型的参数
返回值也是int

委托的意义在于, 它可以将函数封装成可以像变量 int, string这样的类型传入到另外的函数中, 例如函数int Test(int a, int b, Calculate c)
这大大提高了函数的功能和可扩展性, 可以在不改变Test函数的参数的同时,
通过改变Calculate 来改变Test内部的逻辑关系

namespace DelegateTest{    public class Program    {        //定义一个Calculate 类型的委托        delegate int Calculate(int a, int b);         static void Main(string[] args)        {            //定义一个返回值和参数都与Calculate相同的加法函数            int Add(int a, int b)            {                return a + b;            }            //定义一个返回值和参数都与Calculate相同的减法函数            int Sub(int a, int b)            {                return a - b;            }            //将委托类型calculate当参数传入函数            int Test(int a, int b, Calculate calculate)            {                return calculate(a, b) + a;            }            //委托的精髓在于, 将委托看作一种类型, 和int, String一样的类型.            //只不过int a = b; 是将 int类型的变量 b 赋值给 a,             //而Calculate calculate1 = Sub; 是将Calculate类型的 Sub 赋值给 calculate1            Calculate calculate1 = Sub; //定义一个Calculate 类型的calculate1字段, 并将Sub函数传递给它            Calculate calculate2 = Add; //定义一个Calculate 类型的calculate2字段, 并将Add函数传递给它            int i = Test(1, 2, calculate1); //返回 1 + (1+2) = 4            int j = Test(1, 2, calculate2); //返回 1+  (1-2) = 0            Console.WriteLine("i的值是:" + i);            Console.WriteLine("j的值是:" + j);        }    }}

很多人不知道, C# 的委托, 和C语言的函数指针是一个东西

我们把C sharp的 delegate int Calculate(int a, int b)
换成C语言的 typedef int (*Calculate)(int a, int b)

// FunctionPoint.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include     //定义一个Calculate 类型的委托  //delegate int Calculate(int a, int b);     typedef int (*Calculate)(int a, int b);    //定义一个返回值和参数都与Calculate相同的加法函数    int Add(int a, int b)    {        return a + b;    }    //定义一个返回值和参数都与Calculate相同的减法函数    int Sub(int a, int b)    {        return a - b;    }    //将委托类型calculate当参数传入函数    int Test(int a, int b, Calculate calculate)    {        return a + calculate(a, b);    }int main(){    //委托/函数指针的精髓在于, 将委托看作一种类型, 和int, String一样的类型.    //只不过int a = b; 是将 int类型的变量 b 赋值给 a,     //而Calculate calculate1 = Sub; 是将Calculate类型的 Sub 赋值给 calculate1    Calculate calculate1 = Add;    Calculate calculate2 = Sub;    int i = Test(1, 2, calculate1); //返回 1 + (1+2) = 4    int j = Test(1, 2, calculate2); //返回 1+  (1-2) = 0    printf("i的值是: %d\n", i);    printf("j的值是: %d\n", j);}

可以运行一下, 这两个程序返回的结果是一样的. 如果放在java 上怎么实现?

函数式接口和委托, 函数指针是一脉相承的!

package com.example.design;import org.junit.jupiter.api.Test;import org.springframework.boot.test.context.SpringBootTest;@SpringBootTestclass DesignApplicationTests {    //定义一个Calculate 类型的委托    //delegate int Calculate(int a, int b);    //typedef int (*Calculate)(int a, int b);    @FunctionalInterface    interface ICalculate{        Integer Calculate (Integer a, Integer b);    }    //定义一个返回值和参数都与Calculate相同的加法函数    Integer Add(Integer a, Integer b)    {        return a + b;    }    //定义一个返回值和参数都与Calculate相同的减法函数    Integer Sub(Integer a, Integer b)    {        return a - b;    }    //将委托类型calculate当参数传入函数    Integer Test(Integer a, Integer b, ICalculate iCalculate)    {        return a + iCalculate.Calculate(a, b);    }    @Test    void contextLoads() {        //委托/函数指针的精髓在于, 将委托看作一种类型, 和int, String一样的类型.        //只不过int a = b; 是将 int类型的变量 b 赋值给 a,        //而Calculate calculate1 = Sub; 是将Calculate类型的 Sub 赋值给 calculate1        ICalculate calculate1 = this::Add;        ICalculate calculate2 = this::Sub;        Integer i = Test(1,2,calculate1);//返回 1 + (1+2) = 4        Integer j = Test(1,2,calculate2);//返回 1+  (1-2) = 0        System.out.println("i的值是:"+i);        System.out.println("j的值是:"+j);    }}

来源地址:https://blog.csdn.net/helldoger/article/details/132637795

--结束END--

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

本文链接: https://lsjlt.com/news/392693.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 2分钟讲清楚C#的委托, C语言的函数指针,Java的函数式接口
    很多小伙伴学习C# 的委托时往往一头雾水, 不明白委托是什么, 有什么作用, 今天我就用2分钟讲清楚 这是一个C# 的控制台程序 定义一个最简单的委托 delegate int Calculate(i...
    99+
    2023-09-03
    c# c语言 java
  • C语言超详细讲解指向函数的指针
    目录一、函数的指针二、指向函数的指针变量三、调用函数的两种方式四、指向函数的指针的作用五、用指向函数的指针作函数参数(重点)六、为什么要将指向函数的指针变量作为函数的形参(重点)一、...
    99+
    2024-04-02
  • C语言指向函数的指针实例分析
    这篇文章主要介绍“C语言指向函数的指针实例分析”,在日常操作中,相信很多人在C语言指向函数的指针实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指向函数的指针实例分析”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-02
  • C语言的数组指针与函数指针详解
    目录前言函数指针语法数组指针与指针数组总结前言 数组指针和函数指针都是C语言比较难的知识点,尤其是函数指针,并且函数指针在开发中有着巨大的作用。 函数指针语法 定义一个函数指针,并通...
    99+
    2024-04-02
  • C语言超详细讲解函数指针的运用
    目录前言计算器的例子回调函数转移表前言 前面我们学习了各种各样的指针类型,有些指针可以说是稀奇百怪,特别是函数指针,有些朋友可能觉得,函数指针有些多余,调用函数为什么要用指针调用,直...
    99+
    2024-04-02
  • C语言函数的参数使用指针
    在c语言中实参和形参之间的数据传输是单向的“值传递”方式,也就是实参可以影响形参,而形参不能影响实参。指针变量作为参数也不例外,但是可以改变实参指针变量所指向的变量的值。 #in...
    99+
    2024-04-02
  • C语言函数指针的老生常谈
    目录函数指针函数指针的应用函数指针作为参数实例(qsort函数)总结 函数指针 本质上是一个指针,只不过指向函数而已。 编译器在编译期间对函数开辟了一块空间,而这快空间的开始地址,就...
    99+
    2024-04-02
  • 如何理解C语言函数传参:指针的指针
    这篇文章主要介绍“如何理解C语言函数传参:指针的指针”,在日常操作中,相信很多人在如何理解C语言函数传参:指针的指针问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解C语言函数传参:指针的指针”的疑惑有所...
    99+
    2023-06-15
  • C语言返回值指针的函数详解
          #include<stdio.h> void main() { int a[5] = { 1,3,5,7,9 }; ...
    99+
    2024-04-02
  • C语言详解函数与指针的使用
    目录一、函数类型二、函数指针三、回调函数四、小结一、函数类型 C 语言中的函数有自己特定的类型 函数的类型由返回值,参数类型和参数个数共同决定,如 int add(int i, in...
    99+
    2024-04-02
  • C++ 函数指针参数的内存分配方式
    c++++ 中函数指针参数可以采用动态分配或静态分配两种内存分配方式。动态分配使用堆内存,在运行时分配和释放内存;静态分配使用栈内存,在编译时分配内存。 C++ 函数指针参数的内存分配...
    99+
    2024-04-20
    内存分配 函数指针 c++
  • C语言中返回值指针函数的示例分析
    这篇文章主要为大家展示了“C语言中返回值指针函数的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中返回值指针函数的示例分析”这篇文章吧。   #inc...
    99+
    2023-06-29
  • C++函数返回数据指针的方式
    本篇内容介绍了“C++函数返回数据指针的方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!三个函数,返回数组指针,效果是一样的using a...
    99+
    2023-06-04
  • c语言中的二级指针做函数参数说明
    目录二级指针做函数参数二级指针作为形参简单实例分析实例一级指针二级指针做函数形参下面看看实例二级指针做函数参数 1.用指针做函数参数申请动态内存的问题 //如果函数参数是指针,不能用...
    99+
    2024-04-02
  • C语言指数函数表达式的编写技巧分享
    C语言指数函数表达式的编写技巧分享 在C语言中,我们经常会遇到需要计算指数函数的情况。指数函数是一种非常常见的数学函数,它的表达式为f(x) = a^x,其中a为底数,x为指数。在计算...
    99+
    2024-02-22
    技巧分享 指数函数 表达式编写
  • C语言详细讲解指针数组的用法
    目录1. 指针数组定义方法2. 指针的指针(二级指针)3. 字符串和指针4. 数组指针定义方法数组指针的用法1. 指针数组定义方法 格式: 类型说明符 *数组名[ 元素个数 ] in...
    99+
    2024-04-02
  • C语言深入讲解函数的使用
    目录关于函数1. 函数的定义形式2. 函数的声明3. 返回语句4. 函数参数4.1 形式参数(传值调用)4.2 实际参数(传址调用)4.3 无参数5. 函数的调用5.1 嵌套调用5....
    99+
    2024-04-02
  • C++ 函数中的 lambda 表达式与函数指针有何区别?
    lambda 表达式和函数指针都是 c++++ 中封装代码的机制,但它们在实现和特性上有所不同:实现方式:函数指针指向函数的内存地址,而 lambda 表达式是内联的匿名代码块。返回类型...
    99+
    2024-04-25
    函数指针 c++
  • C语言深入分析数组指针和指针数组的应用
    目录一、数组类型二、定义数据类型三、数组指针四、指针数组五、小结一、数组类型 C语言中的数组有自己特定的类型数组的类型由元素类型和数组大小共同决定 例:int array[5] 的类...
    99+
    2024-04-02
  • C语言全方位讲解指针与地址和数组函数堆空间的关系
    目录一、一种特殊的变量-指针二、深入理解指针与地址三、指针与数组(上)四、指针与数组(下)五、指针与函数六、指针与堆空间七、指针专题经典问题剖析一、一种特殊的变量-指针 指针是C语言...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作