在这个问题中,我提到了Unity3D,但通常适用于c#。
Unity3D有一个看起来像这样的接口..
public class SomeRobot:MonoBehaviour, IPointerDownHandler
{
public void OnPointerDown(PointerEventData data)
{
Debug.Log("Gets called whenever someone touches the screen...");
}
到目前为止没问题。
我制作自己的界面..
public interface IFUHandler:IPointerDownHandler
{
void OnBlah (PointerEventData data);
}
假设我有一个守护进程或任何为接口的消费者调用OnBlah的东西。
public class SomeRobot:MonoBehaviour, IFUHandler
{
public void OnBlah(PointerEventData data)
{
Debug.Log("Gets called when blah happens...");
}
到目前为止没问题。 BUT
public class SomeRobot:MonoBehaviour, IFUHandler
{
public void OnBlah(PointerEventData data)
{
Debug.Log("Gets called when blah happens...");
}
public void OnPointerDown(PointerEventData data)
{
Debug.Log("this DOES still get called also...");
}
事实上,OnPointerDown
仍然被调用。这是有道理的。
但....我的界面有办法吃掉对OnPointerDown 的调用吗?
因此订阅IFUHandler
实际上的消费者不会对OnPointerDown
进行调用?
(但当然可以接听OnBlah
次来电。)
或者我只是痛苦" TMIOOK"思维? (在OO结中思考着自己:) :)
答案 0 :(得分:4)
简单回答:不。
可能的解决方案:
当您不需要时,不要继承IPointerDownHandler
。如果你不打算使用它,为什么还需要这个界面呢?
使用非虚方法
创建一个密封的抽象类public class BaseFUHandler : MonoBehaviour, IFUHandler
{
public abstract void OnBlah(PointerEventData data);
public void OnPointerDown(PointerEventData data)
{
//Gets called, but nothing hapends.
}