1

メソッドをパラメーターとして渡そうとしています。しかし、コンパイルエラーが発生し、何が間違っているのかよくわかりませんか?

コンパイラ エラーは次のとおりです。

引数 '#1' は 'メソッド グループ' 式をタイプ 'EventDelegate' に変換できません

public class AssignEventDelegate : MonoBehaviour {

    public UISprite sprite;

    public void AddOnFinish (EventDelegate method) {
        EventDelegate.Add (sprite.GetComponent<TweenScale>().onFinished, method);
    }
}

public class AssignEventDelegateOther : MonoBehaviour {

    // Use this for initialization
    void Start () {
        // Compiler error occurs below
        GameObject.Find ("Main Camera").gameObject.GetComponent<AssignEventDelegate>().AddOnFinish( myOnFinish ); 
    }

    public void myOnFinish () {
        Debugger.print ("myOnFinish");
    }
}
4

2 に答える 2

1

まず、エラーメッセージの意味を理解しましょう。その行の問題のある部分が

.AddOnFinish( myOnFinish );

では、メソッド グループとは何でしょうか。それは以前ここで答えられました。つまり、() や引数リストを含まないメソッド名への裸の参照をコンパイラが呼び出すものです。メソッド グループを単独で使用することはできません。CLR には表現がありません。少なくとも理論的には、コンパイラがオーバーロードの解決を行う必要がある一連のメソッドを表すため、これはメソッド「グループ」です。コンパイラは、メソッド グループ (ラムダおよび匿名メソッドも含む) を特定のデリゲート型に変換する方法を認識していますが、それだけです。myOnFinishはメソッド グループですが、実際には 1 つのメソッドしか含まれていません。

NGUI ドキュメントをざっと見てみると、その名前に反して、EventDelegateはデリゲート型ではなく、単にデリゲートをラップするためのクラスであることがわかります。

では、ここまでです。コンパイラはメソッド グループをこの EventDelegate クラスに変換する方法を認識できず、エラーが発生します。

それを修正するには、変換を提供する必要があります。結局のところ、EventDelegate のコンストラクターを呼び出すだけです。

.AddOnFinish( new EventDelegate(myOnFinish) );

EventDelegate.Callbackこれは、コンストラクターがと互換性のあるデリゲート型のインスタンスを取るため機能しますmyOnFinish

于 2014-08-10T08:36:46.483 に答える
0

メソッドを引数として渡す代わりに、メソッドと同じ署名を持つデリゲートを定義し、それを引数として関数に渡します。

于 2014-08-10T07:20:12.893 に答える