noutarins
@noutarins (nou tarins)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

使うメソッドなどの名前を変数にしたいです。

解決したいこと

C#のUnity、VSです。
使うメソッドなどの名前を変数にすることは可能でしょうか?

例)

public void (string a) ()
    {


    }

これで、string a という名前のメソッドを使いたいです。
何か方法はありますか?

0

1Answer

最初の投稿

ご質問に質問を返すことをお許しください。

Q.1

おやりになりたいことは?

  1. 動的なメソッドを定義したい
  2. 静的なメソッドを動的に命名したい
  3. メソッド名の文字列を使用して、メソッドを呼び出したい
  4. 呼び出すメソッドを動的に指定したい (他のメソッドへの引数にするなど)
  5. その他 (具体的に)

Q.2

どのような使われ方を想定されているのかお尋ねしても良いでしょうか?

追記

上記「3」を前提とします。

MonoBehaviour.Invoke を使う

Invokeを使うと、文字列でメソッドを呼び出せます。
ただし、本来は遅延実行させるためのものですので、最速でも「次のフレーム」での実行になります。

MonoBehaviour.StartCoroutine を使う

StartCoroutine使う場合も、文字列でメソッドを呼び出せます。
ただし、こちらも、本来は別の用途のためのものですので、様々な制約が生じます。

MethodInfo.Invoke を使う

public class SampleClass {
    public int SampleMethod (int i) {
        return i;
    }
}

と定義されているとして、

    var sampleClass = new SampleClass ();
    var methodInfo = (sampleClass.GetType ()).GetMethod ("SampleMethod");
    var returnedValue = (int) methodInfo.Invoke(sampleClass, new object[] { 123, } );

のように呼び出すことができます。

https://docs.microsoft.com/ja-jp/dotnet/api/system.type.getmethod#System_Type_GetMethod_System_String_

1Like

Comments

  1. @noutarins

    Questioner

    3番だと思います。
    こちらこそ、初心者質問にかまっていただきありがとうございます。
  2. 上の解答本文に追記させていただきました。
  3. @noutarins

    Questioner

    重ね重ねありがとうございます。MethodInfo.Invoke でやってみようと思います。
    素人故質問すらわかりにくくすみませんでした。

Your answer might help someone💌