-2

重複の可能性:
c#でメソッドの呼び出し元を取得する

メソッドが実行されるオブジェクトのインスタンスを取得することは可能ですか?

例えば...

public class Person
{
    public string Name { get; set; }

    public void PrintMyName()
    {
        NamePrinter np = new NamePrinter();
        np.PrintName();
    }
}

public class NamePrinter
{
    public void PrintName()
    {
        Person p = ?;
        Console.Writeline(p.Name);
    }
}

public class Program
{
    static void Main()
    {
        Person person = new Person() { Name = "Brandon"; }
        person.PrintMyName();
    }
}

PrintNameメソッドで「p」を見つける方法はありますか?

編集:上記のコードの問題は、さまざまな方法で非常に簡単に解決できます。私は愚かではなく、これが私の質問を明確にするために思いつくことができる最も簡単なコードであると仮定してください。

4

1 に答える 1

4

次の理由でこれを行うことはできません。

  • どのオブジェクトタイプから呼び出されたかを知る方法はありません。Personというクラスのインスタンスから呼び出すからといって、それが呼び出される唯一の方法であるとは限りません。
  • オブジェクトインスタンスからはまったく呼び出されない場合があります。静的メソッドから呼び出された可能性があります。

クラス内のメソッドが呼び出されると、呼び出し元のコードに関する情報はスタックにプッシュされないため(メソッドの引数を除く)、この方法で使用するために取得できる情報はありません。

あなたの場合の正しい解決策は、Person型のパラメーターをPrintName()に追加することです(これはすでに検討していると思いますか?)

于 2013-02-04T12:45:10.700 に答える