我迫切需要有人向我解释以下案例以及它是如何“在幕后”工作的。这将帮助我在更深层次上理解这个概念。
统一案例:
在 Unity3D 引擎中,如果我们想要检测对 UI 元素的点击,我们只需将其称为“IPointerClickHandler”的预制接口之一实现到我们的自定义类。
public void OnPointerClick(PointerEventData eventData)
{
// Do whatever you want in here, when you detect click on UI element
}
脚本需要附加到每个单独的元素,但归根结底,它就像一个魅力。
我的情况:
这对我来说很有趣,因为我不确定 Unity 是如何知道我的类实现了它的一个接口并调用了适当的方法。
我想做一个类似的把戏,但我不知道怎么做。例如,我想通知所有实现“IScore”侦听器的类,该侦听器具有“OnScoreChanged(float newScore)”方法;
public float Score;
public interface IScore {
void OnScoreChanged(float newScore);
}
public void SetScore(int newScore) {
Score = newScore;
//Notify all classes that implement IScore interface
// .OnScoreChanged(newScore);
}``
我可能需要一个引用,所以我的想法是获取对实现“OnScoreChanged”的类的所有引用。上面的例子是正确的方法吗?我怎样才能让它发挥作用?基本上,我想在需要获得新分数通知的类中实现这个接口,并完全忘记如何调用这个方法。这样的事情可能吗?
public class MyClassB: IScore {
public void OnScoreChanged(float newScore)
{
// This just got called after score
//changed..and without any additional implementation!
}
}
PS我知道我可以将委托与事件一起使用(然后从其他类订阅此事件),但我真的很好奇Unity如何只调用接口方法并保持代码更简洁(因此用户不订阅它的事件等)。