簡體   English   中英

如何從另一個 static class 訂閱 class 中的事件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM