AddListener(action)

AddListener(action)

请添加图片描述

这里的两种写法有区别么?

肯定是有的

我之前也是不清楚这里传入的action到底是什么

但是btnA的num是初始值10 不会改变

而btnB的num确实随着num的改变而改变

这时 我就想到 A是只new一次对象 B是每次点击都会new一个新的

经过实验后发现确实如我所想[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ICeP3rXE-1666631096782)请添加图片描述

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

/// <summary>
/// * Function:
/// </summary>
public class NewBehaviourScript : MonoBehaviour
{
    public Button btnA;
    public Button btnB;
    public int num = 10;
    private static int count = 0;

   
    private void Awake()
    {
        Test test = new Test(num);
        btnA.onClick.AddListener( test.Do);
        btnB.onClick.AddListener(() => { new Test(num).Do(); });
    }
  
   
    public class Test
    { 
        private int num;
        public Test(int num)
        {
            this.num = num;
            count += 1;
        }

        public void Do()
        {
            Debug.Log(this.num);
            Debug.Log("count:"+count );
        }
    }

}


这里我给每次创建新class计数 发现 A确实只创建一次

发现其实A 的action是 Test.Do() 这个函数

而B的action 是{ }中的lambda

修改代码确定猜想

请添加图片描述

结果可以发现确实如此

猜你喜欢

转载自blog.csdn.net/qq_53803837/article/details/127505739
今日推荐