c# 委托

一、什么是委托

委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用。 在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联。 你可以通过委托实例调用方法。

委托的属性
委托类似于 C++ 函数指针,但委托完全面向对象,不像 C++ 指针会记住函数,委托会同时封装对象实例和方法。
委托允许将方法作为参数进行传递。
委托可用于定义回调方法。
委托可以链接在一起;例如,可以对一个事件调用多个方法。
方法不必与委托类型完全匹配。 有关详细信息,请参阅使用委托中的变体。
使用 Lambda 表达式可以更简练地编写内联代码块。 Lambda 表达式(在某些上下文中)可编译为委托类型。

委托用于将方法作为参数传递给其他方法。 事件处理程序就是通过委托调用的方法。 你可以创建一个自定义方法,当发生特定事件时,某个类(如 Windows 控件)就可以调用你的方法。 下面的示例演示了一个委托声明:

public delegate int PerformCalculation(int x, int y);

可将任何可访问类或结构中与委托类型匹配的任何方法分配给委托。 该方法可以是静态方法,也可以是实例方法。 此灵活性意味着你可以通过编程方式来更改方法调用,还可以向现有类中插入新代码。(方法和委托必须具有相同的返回类型)

二、使用委托

例一:

我们可以为程序中的某个功能的调用定义一个专用的类

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace LAIALAIA
{
    public static class GameStartEvent
    {
        //statement
        private static Action mOnEvent;

        //add
        public static void Register(Action onEvent)
        {
            mOnEvent += onEvent;
        }

        //remove
        public static void UnRegister(Action onEvent)
        {
            mOnEvent -= onEvent;
        }

        // Trigger
        public static void Trigger()
        {
            mOnEvent?.Invoke();
        }
    }
}

这个类中我们直接调用了unity 为我们提供的委托Action,这个委托默认是无参的,当然我们也可以像例二中这样定义带参的委托

例二:
//1.声明委托
    public delegate void MyDelegate(int num, string name);
    //2.声明委托变量
    MyDelegate myDelegate;

    void Start()
    {
        //3.绑定方法
        myDelegate += Fun1;
        myDelegate += Fun2;

        //4.调用委托 
        myDelegate(6, "Tom");

        //移除委托
        myDelegate -= Fun1;
        myDelegate -= Fun2;
    }

    public void Fun1(int num,string name)
    {
        Debug.Log("He is "+name+", who is "+num+" years old");
    }

    public void Fun2(int num, string name)
    {
        Debug.Log("This is "+name+"'s "+num+" time in China");
    }

这两个例子展示了委托的基本应用

其他例子:

委托在设计模式中的应用
https://blog.csdn.net/weixin_45023328/article/details/108931399

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值