ホームページ > バックエンド開発 > C++ > C# リフレクションを使用して呼び出しメソッドの名前とクラスを取得するにはどうすればよいですか?

C# リフレクションを使用して呼び出しメソッドの名前とクラスを取得するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-29 21:33:10
オリジナル
518 人が閲覧しました

How Can I Get the Calling Method's Name and Class Using C# Reflection?

リフレクションを使用した呼び出しメソッドを理解する

C# では、リフレクションを使用して呼び出しメソッドとその元のクラスに関する情報を取得できます。 。これにより、開発者は呼び出しコンテキストの知識を必要とするユーティリティやログ機能を作成できます。

呼び出しメソッド名とクラスの取得

呼び出しメソッドの名前を取得するにはおよびリフレクションを使用して包含クラスを作成するには、次の手順に従います。

  1. を表す StackFrame オブジェクトを作成します。呼び出しメソッドの最初のフレーム (現在のメソッド):

    StackFrame frame = new StackFrame(1);
    ログイン後にコピー
  2. StackFrame からメソッド情報を取得します:

    var method = frame.GetMethod();
    ログイン後にコピー
  3. メソッド名と宣言を抽出するtype:

    var name = method.Name;
    var type = method.DeclaringType;
    ログイン後にコピー

次のクラスを考えます:

public class SomeClass
{
    public void SomeMethod()
    {
        // Get the calling method and type
        StackFrame frame = new StackFrame(1);
        var method = frame.GetMethod();
        var type = method.DeclaringType;
        var name = method.Name;
    }
}
ログイン後にコピー

別のクラス:

public class Caller
{
    public void Call()
    {
        SomeClass s = new SomeClass();
        s.SomeMethod();
    }
}
ログイン後にコピー

Call が呼び出されるとき、変数の名前と入力が行われます。 SomeClass の SomeMethod には次の値が含まれます:

  • name: "Call" (呼び出し側メソッド名)
  • type: "Caller" (宣言側クラス名)

.NET 4.5 での CallerMemberNameAttribute の使用

.NET 4.5 以降では、CallerMemberNameAttribute を使用する簡略化されたアプローチがあります。

public class SomeClass
{
    public void SomeMethod([CallerMemberName]string memberName = "")
    {
        // Output the calling method name
        Console.WriteLine(memberName);
    }
}
ログイン後にコピー

SomeClass.SomeMethod が呼び出されるとき、memberName には呼び出しメソッドの名前が含まれます。 .

以上がC# リフレクションを使用して呼び出しメソッドの名前とクラスを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート