如果我扩展一个c#接口,我可以吃一个调用吗?

本文关键字:一个 可以吃 调用 我可以 接口 扩展 如果 | 更新日期: 2023-09-27 18:17:46

在这个问题中,我提到了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...");
        }

到目前为止没有问题。但

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"思维?

如果我扩展一个c#接口,我可以吃一个调用吗?

简单回答:不。

可能的解决方案:

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

  2. 用非虚方法创建一个密封抽象类

    public class BaseFUHandler : MonoBehaviour, IFUHandler
    {
    public abstract void OnBlah(PointerEventData data);
    public void OnPointerDown(PointerEventData data)
    {
        //Gets called, but nothing hapends.
    }