c# - 如果我扩展一个 c# 接口(interface),我可以吃一个电话吗?

标签 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);
    }

假设我有一个守护进程或任何为接口(interface)的消费者调用 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”的想法? (把自己束缚在 OO 结的思考中 :) )

最佳答案

简单的回答:不。

可能的解决方案:

  1. 不要在不需要时继承IPointerDownHandler。如果您不打算使用它,为什么需要此接口(interface)?

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

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

关于c# - 如果我扩展一个 c# 接口(interface),我可以吃一个电话吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40576280/

相关文章:

c# - 用于 C# mono 和 Unity3d 的 Consulo IDE,是否可行?

c# - MVC Controller 需要空构造函数,但未使用接口(interface)并抛出错误

c# - Windows服务的基本应用有哪些?

c# - ASP.NET 中的 Gridview 编辑删除和更新

c# - 如何在unity3d,c#中有两种随机状态?

c++ - 如何使用 C++ 中的 gtest 测试具有不同构造函数的多个接口(interface)实现?

c# - 如何在不使用反射的情况下获取类中指定类型的所有属性

c# - 我可以在没有泛型的情况下定义/约束成员实现两个接口(interface)吗?

c# - 从具有多个项目的解决方案构建 docker 容器

android - unity : DllNotFoundException (Unity 2018. 2;安卓)