C#语言学习笔记-delegate(初识委托)

版权声明:转载请申明原地址 https://blog.csdn.net/mingyi2106/article/details/81745719

一,委托的理解

何为委托?从字面意思理解,在日常生活中,我们也会经常使用委托这个词,
比如说,比方你对老王说:“我拜托你给我办件事,如果我今晚没有回来,你替我打扫下院子。” 把事情托付给别人或别的机构处理(汉语词典),这就是一种委托; 那么在代码中也是一样的,假如现在有一个叫 void sweep()函数要执行,但是当时的由于进程或者代码逻辑原因不方便直接执行它,这个时候你就需要有一个委托方(就像老王),能在合适的时候替你执行它;

官方解释:委托是安全封装方法的类型,类似于 C 和 C++ 中的函数指针。 与 C 函数指针不同的是,委托是面向对象的、类型安全的和可靠的。

所谓封装方法的类型,就是说委托能够将封装方法,将方法作为一种类型;
委托派生自C#的Delegate 类,也就是说委托本质上就是一个类(Class),但是这个类不能被派生;实例化的委托是一个对象,所以可以作为参数传递或者赋值给一个属性,这句话很关键,我们知道方法(即函数)是不能作为参数传递的,因为方法不是一种类型,它只是类型成员,这是面向对象技术的基本知识;但是委托的使用使得这种做法成为可能;

二,委托的使用和定义

1.委托的声明 ,和一般的类型声明,不同和,委托的声明有返回值类型,有参数。在形式上更加像一个函数的签名。我想这 是由于委托类型是专门为了接收函数而设计的,一个委托只能接收具有和它相同的返回值类型和参数列表的方法

    public delegate void MyDelegate1(string param)
    MyDelegate1 myDelegate1 = Method1;

    public void Method1(string message)
    {       
        Debug.Log(message);
    }

2.通过委托调用方法,下面的代码分别体现了三种使用方法,第一种直接将方法“赋值”给定义的委托,同过委托的变量名来调用方法,这个好像就只是给方法换了个名字一样。第二种就是结合lambda使用,代码简洁优美。第三种就是作为其他方法的参数来调用。


public class TestDelegate : MonoBehaviour
{
    public delegate void MyDelegate1(string param);

    public void Method1(string message)
    {
        Debug.Log(message);
    }

    public void Method2(string param, MyDelegate1 delegateParam)
    {
        Debug.Log(param);
        delegateParam(param + " delegate param");
    }

    private void Start()
    {
        MyDelegate1 myDelegate1 = Method1;
        myDelegate1("use method1");

        MyDelegate1 myLambdaDelegate = (string param) =>
        {
            Debug.Log(param);
        };

        Method2("param" ,myDelegate1);

        myLambdaDelegate("use lanbda dalegate");
    }
}

结果

  1. 委托的多播,

猜你喜欢

转载自blog.csdn.net/mingyi2106/article/details/81745719
今日推荐