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
修改代码确定猜想
结果可以发现确实如此