在这个问题中我提到了 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 结的思考中 :) )
最佳答案
简单的回答:不。
可能的解决方案:
不要在不需要时继承
IPointerDownHandler
。如果您不打算使用它,为什么需要此接口(interface)?使用非虚方法创建密封抽象类
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/