-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 回答