[英]How do I subscribe to an event in a class from another static class?
在這種情況下有什么問題? 當嘗試訂閱事件時,我有一個 CS0407:'return-type method' 的返回類型錯誤; 骨架.OnDeath += Beholder.AddListener;
但我無法弄清楚錯誤在哪里。 動作返回無效。 並且簽名中的參數是 int。 在 AddListener - 也是。
namespace Tasks7 {
class Program {
static void Main() {
Skeleton skeleton = new Skeleton();
skeleton.OnDeath += Beholder.AddListener;
Console.ReadKey();
}
}
class Skeleton {
public static int lastID = 0;
public int id = 0;
public delegate Action<int> Death (int id);
public event Death OnDeath;
public Skeleton() {
this.id = lastID++;
}
public void Kill() {
OnDeath?.Invoke(this.id);
}
}
static class Beholder {
public static void AddListener(int id) {
Console.WriteLine($"{id} ");
}
}
}
問題是您的委托和偵聽器方法的簽名不匹配。
代表簽名是
Action<int> Death(int id);
而監聽器函數的簽名是
void AddListener(int id)
要將AddListener
添加到OnDeath
事件,它必須返回一個Action<int>
。
但我懷疑真正發生的事情是您誤解了委托聲明語法。
public delegate Action<int> Death(int id);
這聲明了一個新的委托類型,它采用單個 integer 參數並返回一個Action<int>
。 要使其與AddListener
方法兼容,只需將返回類型從Action<int>
更改為void
。
注意: Action<int>
本身已經是一個委托類型,因此您可以完全廢棄Death
委托,而是在事件處理程序聲明中使用Action<int>
,如下所示:
public event Action<int> OnDeath;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.