三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

学习action笔记

学习action笔记

假设有个叫外卖的场景

打电话给餐厅:"给我做个三明治,做好了叫我。"

餐厅说:"我不知道你的电话号码,没法叫你。"

因为没有 Action,餐厅不知道做好后怎么通知你

如果有Action:

// 餐厅的菜单
public class Restaurant
{
// 接受订单:你要什么 + 做好了打哪个电话
public void MakeSandwich(string filling, Action<string> callWhenDone)
{
Debug.Log($"厨房收到:做一个 {filling} 三明治");

// 假装做饭等了 2 秒
System.Threading.Thread.Sleep(2000);

string message = $"你的 {filling} 三明治好了!";

// 照着便条上的电话打过去
callWhenDone?.Invoke(message);
}
}

// 你(顾客)
public class Customer
{
public void Order()
{
Restaurant restaurant = new Restaurant();

// 点餐:我要鸡蛋三明治,这是我的电话 ↓↓↓
restaurant.MakeSandwich("鸡蛋", notice =>
{
Debug.Log($"收到通知:{notice}"); // 电话响了,你接起来
});
}
}

Action<string> callWhenDone 就是留给餐厅的电话号码

  • 餐厅不管你是谁,也不管你接到电话后干嘛(吃还是扔)
  • 餐厅只管:饭做完了 → 打这个电话 → 把通知内容告诉你

两个参数的例子:

// 快递公司 public class ExpressCompany { // 寄快递:东西 + 寄完了打这个电话(告诉你是/否成功 + 快递单号) public void Send(string itemName, Action<bool, string> callWhenDone) { Debug.Log($"收到包裹:{itemName}"); // 假装寄件处理…… bool success = true; string trackingNumber = "SF1234567890"; // 📞 打电话告诉你两个信息 callWhenDone?.Invoke(success, trackingNumber); } } // 你 public class Me { public void SendPackage() { ExpressCompany sf = new ExpressCompany(); sf.Send("键盘", (done, number) => { if (done) Debug.Log($"寄出成功,单号:{number}"); else Debug.Log("寄件失败"); }); } }
← 返回列表