【C#】委托 delegate

简介

委托类型用来表示对具有特定参数列表和返回类型的方法的引用。

可以理解为函数方法的容器,即表示函数方法的变量类型,用来存储、传递函数

委托变量存储的函数对应相同返回值和参数类型的函数

委托和类一样,是一种用户自定义类型,但类表示的是数据和方法的集合,而委托则持有一个或多个方法,以及一系列预定义操作。

语法:关键字:delegate

访问修饰符 delegate 返回值类型 委托名(参数列表);

声明在class和namespace中,更多写在namespace中。

访问修饰符为public,写在namespace中,可以在其他namespace中使用。

自定义委托

  1. 无参无返回值的委托,定义了委托存储的是无参无返回值的函数。
delegate void MyFun1();
  1. 无参有int返回值的委托,定义了委托存储的是无参有int返回值的函数。
delegate int MyFun2(int value);
  1. 委托支持泛型,可以让参数返回值可变。一般很少这样使用。
delegate T MyFun3<T,W> (T t, W w);

使用自定义委托:可以作为类的成员参数和函数的参数。

class Test
{
    public MyFun1 MyFun1;
    public MyFun2 MyFun2;
    public void TestFun(MyFun1 MyFun1, MyFun2 MyFun2)
    {
        //可以先执行其他逻辑代码块
        int i = 1;
        i++;
        //然后再执行委托存储的函数,或者将得到的内容作为参数传入委托存储的函数中执行
        MyFun1();
        MyFun2(i);
    }
}

public class Program
{
    static void Main(string[] args)
    {
        //使用自定义委托
        //委托MyFun1的变量myFun1装载(存储)了函数Fun1
        MyFun1 myFun1 = new MyFun1(Fun1);
        //写法2
        MyFun1 myFun1_0 = Fun1;
        //可以先执行其他逻辑,再执行委托变量中存储的函数
        Console.WriteLine("执行代码逻辑1");
        Console.WriteLine("执行代码逻辑2");
        //执行委托变量中存储的函数,写法1:.Invoke
        myFun1.Invoke();
        //执行委托变量中存储的函数,写法2:(),
        myFun1();

        MyFun2 myFun2 = Fun2;
        //可以先执行其他逻辑,再执行委托变量中存储的函数
        Console.WriteLine("===========执行代码逻辑=============");
        Console.WriteLine(Fun2(1));
    }
}

多播委托:委托变量可以存储多个函数()

委托中存储多个函数,执行时会依次执行存储的函数。

//增
// myFun1 += Fun1;
//删
// myFun1 -= Fun1;
//清空
// myFun1 = null;

系统自定义的委托:关键字:Action;Func

系统提供的委托足够日常使用。

    public class Program
    {
        static void Main(string[] args)
        {
            //系统自定义的委托
            //Action;Func
            //系统定义的无参无返回值函数的委托,Action
            Action action = Fun1;
            action();
            //系统定义的有参无返回值函数的委托,Action<int>
            Action<int> action1= Fun4;
            //系统定义的有参无返回值函数的委托,可以传多个参数,最多16个参数
            Action < int,string,int[]> action2 = Fun5;
            //系统定义的无参有返回值函数的委托,Func<int>
            Func<int> func = Fun3;
            //系统定义的有参有返回值函数的委托,Func<int,int>
            Func<int,int> func1 = Fun2;
            //系统定义的有参有返回值函数的委托,可以传多个参数,最多16个参数
            Func<int, int, string> func2 = Fun6;

        }
        static void Fun1()
        {
            Console.WriteLine("这是函数Fun1:无参无返回值");
        }
        static int Fun2(int value)
        {
            Console.WriteLine("这是函数Fun2:有参有返回值");
            return 0;
        }
        static int Fun3()
        {
            Console.WriteLine("这是函数Fun3:无参有返回值");
            return 0;
        }
        static void Fun4(int value)
        {
            Console.WriteLine("这是函数Fun4:有参无返回值");
        }
        static void Fun5(int value,string value1, int[] value2)
        {
            Console.WriteLine("这是函数Fun4:有多个参数无返回值");
        }
        static string Fun6(int value, int value1)
        {
            Console.WriteLine("这是函数Fun6:有多个参数有返回值");
            return "";
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值