如果我扩展一个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"思维?
简单回答:不。
可能的解决方案:
-
当你不需要
IPointerDownHandler
时不要继承它。如果不打算使用这个接口,为什么需要它呢? -
用非虚方法创建一个密封抽象类
public class BaseFUHandler : MonoBehaviour, IFUHandler { public abstract void OnBlah(PointerEventData data); public void OnPointerDown(PointerEventData data) { //Gets called, but nothing hapends. }