読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

メソッド名を文字列で取得【C#】


このエントリーをはてなブックマークに追加

はじめに

UnityでInvokeなどを使う時にメソッド名を文字列で指定する場合があります。

こんな時に直打ちするとタイプミスする危険性があり、

どうにかしてメソッド名を文字列で取得したいですね。

今回はそんな記事です。


メソッド名を文字列で取得

早速、メソッド名を文字列で取得する方法ですが、

メソッドをActionまたはFuncでキャストし、Method.Nameで取得するだけです。

private void Awake(){
  //引数も返り値がない場合はAction
  string methodName = ((Action) this.Awake).Method.Name;
  Debug.Log (methodName);

  //引数だけある場合はAction<引数1, 引数2, …>
  methodName = ((Action<string, int>) this.Method1).Method.Name;
  Debug.Log (methodName);

  //引数も返り値もある場合はFunc<引数1, 引数2, …, 返り値>
  methodName = ((Func<string, int>) this.Method2).Method.Name;
  Debug.Log (methodName);
}

//引数がstringとintのメソッド
private void Method1 (string text, int num){

}

//引数がstring、返り値がintのメソッド
private int Method2 (string text){
  return 0;
}

Awake
Method1
Method2


ActionとFuncを使うにはusing System; が必要なので忘れずに。


おわりに

話は逸れますが、以前Invokeを使わず、

かつ、メソッド名を文字列で指定しないで遅延実行する方法を紹介したのですが、

これだと実行した後、キャンセル出来ないんですよね……