如果我扩展一个c#接口,我可以接听电话吗?

时间:2016-11-13 16:41:22

标签: c# unity3d interface

在这个问题中,我提到了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结中思考着自己:) :)

1 个答案:

答案 0 :(得分:4)

简单回答:不。

可能的解决方案:

  1. 当您不需要时,不要继承IPointerDownHandler。如果你不打算使用它,为什么还需要这个界面呢?

  2. 使用非虚方法

    创建一个密封的抽象类
    public class BaseFUHandler : MonoBehaviour, IFUHandler
    {
    
    public abstract void OnBlah(PointerEventData data);
    
    public void OnPointerDown(PointerEventData data)
    {
        //Gets called, but nothing hapends.
    }