2

選択した列挙型に応じてこれらのメソッドを呼び出せるように、いくつかのクラスのメソッドを列挙型にリストしようとしています。ToString() と GetMethod(string) を使ってみましたが、うまくいきませんでした。デリゲートが列挙型のリストから呼び出すメソッドを動的に変更するより良い方法があれば、助けていただければ幸いです。私は C# に非常に慣れていません。また、メソッド ポインターを格納する別の方法があるかどうかも疑問に思っています。私はこれらのボードでリフレクションを調べましたが、キャストまたは列挙型からの割り当てのどちらにもあまり運がありませんでした。

public enum funcEnum { FirstFunction, SecondFunction };

public funcEnum eList;

public delegate void Del();

public Del myDel;


void Start() {

    myDel = FirstFunction; //pre-compiled assignment

    myDel(); //calls 'FirstFunction()' just fine

以下は実行時に変更される可能性がありますが、通常は Start() には含まれません。

    eList = funcEnum.SecondFunction; //this could be changed during runtime

    myDel = eList.ToString();

明らかなエラー、myDel がメソッドを探しています。列挙値を取得/変換してデリゲートに割り当てる方法がわかりません。割り当ての事前知識を持ってメソッドを呼び出そうとしています。基本的に、列挙リストにこのクラス内のメソッドの名前を含める必要があります。

    myDel(); //doesn't work

}


public void FirstFunction() {

    Debug.Log("First function called");

}

public void SecondFunction() {

    Debug.Log("Second function called");

}
4

2 に答える 2

1

メソッド/デリゲートに単純に文字列を割り当てることはできません。これの代わりに:

myDel = eList.ToString();

メソッドを使用できますDelegate.CreateDelegate

作業インスタンス メソッドの場合は、次のようになります。

myDel = (Del)Delegate.CreateDelegate(typeof(Del), this, eList.ToString());

またはこれは静的メソッドの場合:

myDel = (Del)Delegate.CreateDelegate(typeof(Del), this.GetType(), eList.ToString());

注 どちらの場合も、コードを呼び出している同じクラスでメソッドが定義されていると想定しています。別のオブジェクトでメソッドを呼び出すには、これを少し変更する必要があります。

于 2013-07-23T04:38:16.527 に答える