C# で現在のメソッド名を取得する
-
C#
でMethodBase.GetCurrentMethod()
を使用して現在のメソッド名を取得する -
C#
でReflection
を使用して現在のメソッド名を取得する -
C#
のStackTrace
クラスで現在のメソッド名を取得する -
C#
でnameof
演算子を使用して現在のメソッド名を取得する
この記事では、C# を利用して現在実行中のメソッドの名前を取得する方法を学習します。 C# では、現在実行中のメソッドの名前を取得する方法が複数あります。
同様に動作する次の手順の概要を説明し、説明し、実行します。
C#
で MethodBase.GetCurrentMethod()
を使用して現在のメソッド名を取得する
現在のメソッドを表すには、MethodBase
オブジェクトを使用する必要があります。
実行中のメソッド内から GetCurrentMethod()
を使用して、現在のメソッドに関する情報を取得することができます。 MethodBase.GetCurrentMethod()
関数を使用して、現在実行中のメソッドを反映する MethodBase
オブジェクトを取得できます。
まず、ライブラリをインポートして、後でコードで使用される関数にアクセスできるようにします。
using System;
using System.Diagnostics;
using System.Reflection;
次に、Main
メソッド内で、GetCurrentMethod()
関数を使用して現在のメソッドの名前を確認する文字列型変数を初期化します。 そして、コンソールに関数名を出力します。
string getName = MethodBase.GetCurrentMethod().Name;
Console.WriteLine("Current method is " + getName);
ソースコード:
using System;
using System.Diagnostics;
using System.Reflection;
class CurrentMethodName {
public static void Main() {
string getName = MethodBase.GetCurrentMethod().Name;
Console.WriteLine("Current method is " + getName);
}
}
出力:
Current method is Main
GetCurrentMethod で指定された MethodInfo は、現在実行中のメソッドがジェネリック型で定義されている場合、ジェネリック型定義から派生します (MethodBase.ContainsGenericParameters は true を返します)。 したがって、メソッドが呼び出されたときにメソッドに渡されたパラメーターの型を表していません。
GetCurrentMethod は、現在実行中のメソッドがジェネリックである場合、ジェネリック メソッドの説明を返します。 ジェネリック型にジェネリック メソッドが指定されている場合は、そのジェネリック型の指定から MethodInfo を受け取ります。
C#
で Reflection
を使用して現在のメソッド名を取得する
リフレクション
は、手始めの簡単な方法かもしれません。 reflection
名前空間は MethodBase
クラスを提供し、GetCurrentMethod
を公開してメソッド情報を取得します。
System.Reflection.MethodBase.GetCurrentMethod().Name;
Reflection
メソッドのソース コード全体を次に示します。
ソースコード:
using System;
class CurrentMethodName {
private static void Main(string[] args) {
var getName = System.Reflection.MethodBase.GetCurrentMethod().Name;
Console.WriteLine("Current method is " + getName);
}
}
出力:
Current method is Main
C#
の StackTrace
クラスで現在のメソッド名を取得する
メソッドの名前を取得する別のオプションは、StackTrace
メソッドとスタック フレームを使用してメソッド情報をフェッチすることです。 メソッドの名前は、StackTrace
GetFrame()
関数によって返されるフレームのプロパティ GetMethod()
を通じて取得できます。
まず、ライブラリをインポートして、コード内の StackTrace
クラスにアクセスします。
using System;
using System.Diagnostics;
stackTrace
という変数に StackTrace
オブジェクトを設定し、そのオブジェクトを Main()
関数で使用します。 StackTrace
を介して GetFrame
関数でフレームを取得する変数 getFrame
を作成します。
getName
という変数を作成し、GetMethod
クラスの Name
属性を使用してアクティブなメソッドの名前を取得する責任を割り当てます。
var stackTrace = new StackTrace();
var getFrame = stackTrace.GetFrame(0);
var getName = getFrame.GetMethod().Name;
ソースコード:
using System;
using System.Diagnostics;
class CurrentMethodName {
private static void Main(string[] args) {
var stackTrace = new StackTrace();
var getFrame = stackTrace.GetFrame(0);
var getName = getFrame.GetMethod().Name;
Console.WriteLine("Current method is " + getName);
}
}
出力:
Current method is Main
C#
で nameof
演算子を使用して現在のメソッド名を取得する
nameof
キーワードを式で使用すると、文字列定数が変数、型、またはメンバーの名前に設定されます。 nameof
式は、ビルド時にのみ評価されるため、実行時には効果がありません。
nameof
と呼ばれる式を使用して、引数をチェックするためのコードを保守しやすくすることができます。
このアプローチは、次を使用しない組み込みキーワードに基づいています。
reflection
名前空間をアタッチするusing
ステートメントの場合、using System.Diagnostics;
をアタッチする必要はありません。 およびSystem.Reflection を使用;
- 既存のコードを反映する追加のクラス。
ソースコード:
using System;
class CurrentMethodName {
private static void Unique() {
string name = nameof(Unique);
Console.WriteLine("Current method is " + name);
}
public static void Main(string[] args) {
Unique();
}
}
出力:
Current method is Unique
nameof
演算子は、C# バージョン 6 以降で使用できます。I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.
LinkedIn