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
}