2016-11-13 5 views
4

この質問ではUnity3Dについて言及しますが、一般的にC#で適用されます。私は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" の考え方に苦しんでいますか?

+0

で封止さ抽象クラスを作成します。私はこれが可能なのかどうかを試してみる。 – Programmer

+0

[PointerEventData](https://docs.unity3d.com/ScriptReference/EventSystems.PointerEventData.html)には[使用](https://docs.unity3d.com/ScriptReference/EventSystems.AbstractEventData-used.html)のメンバーがあります。あなたはそれに反応する何かを止めるためにそれを 'true'に設定できますか? – ChrisF

+0

こんにちは@ChrisF - まあ..私は、どこですか? (また、それは - 私が推測する - "一般的なC#の質問"の状況では本当に助けにはならないだろうと思う...) – Fattie

答えて

4

単純な答えを(OOで自分を縛りが:)思考ノット):いいえ。

考えられる解決策:

  1. 継承しないでくださいIPointerDownHandlerあなたがそれを必要としません。なぜあなたはそれを使用しない場合は、このインターフェイスが必要ですか?

  2. これは非常に興味深い質問である非仮想メソッド

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

ありがとう - 確かにしばしば明確な "いいえ"が最も役に立つ答えです。 – Fattie

+0

これを読んでいる人は、私のやや関連した質問http://stackoverflow.com/questions/40576493を楽しむことができます(ただしUnityにのみ関係しますが、一般的にはそうではありません)。 – Fattie

+0

私はまた投票しません。そのインタフェースが宣言されている場合は、そのオブジェクトが正しく動作するためにはインタフェースが意味を持つことを意味するはずです。ゴースト法が必要な場合は、何かが間違っています。 – Everts

関連する問題