【发布时间】:2020-04-21 11:13:32
【问题描述】:
我一直在使用很多 API 来监听一些事件,我只需要实现一个接口,但它不需要我订阅,他们是如何做到的?
在这里更好地解释一下我通常是如何做我的听众的
interface IListener
{
void OnEventHappen();
}
public class EventClass
{
public static Action onEvent;
}
public class ListenerClass : IListener
{
//constructor
public ListenerClass()
{
EventClass.onEvent += OnEventHappen;
}
//function from IListener interface
public void OnEventHappen() { //something... }
}
但是在那些 API 中,不需要在任何地方订阅,我只需要实现这样的接口:(我删除了 EventClass,因为在这些 API 中我无法访问触发事件的类)
interface IListener
{
void OnEventHappen();
}
public class ListenerClass : IListener
{
//function from IListener interface
public void OnEventHappen() { //something... }
}
【问题讨论】:
-
那么,您的问题是什么?
-
你能说出其中一个 API 的名字,以便我们知道我们面临的问题吗?想到的是,他们可能会遍历所有程序集并寻找实现 IListener 的类型并创建一个实例并调用它。
-
查看具体类如何“神奇地注册”的最佳方法可能是在构造函数中放置一个断点并查看调用堆栈。
-
一个例子(不是 API)在 Unity 中,要使用 IBeginDragHandler 我只需要使用 EventSystems 并实现 OnBeginDrag(PointerEventData eventData) 方法
-
Unity 使用了大量的反射。它可以在 Unity 之外执行各种不是真正惯用的 C# 或 .NET 的事情。您的问题是您一直在使用“很多 API”来自动执行此操作 - 您能否提供任何示例?
标签: c# events interface listener