如何获取从中执行目标代码的实例

本文关键字:目标 执行 代码 实例 何获取 获取 | 更新日期: 2023-09-27 17:57:21

可能的重复项:
在 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();
    }
}

有没有办法在打印名称方法中找到"p"?

编辑:上面一段代码中的问题可以通过许多不同的方式解决,而且非常容易。 请假设我并不愚蠢,这只是我能想出的最简单的代码段,以阐明我的问题。

如何获取从中执行目标代码的实例

您不能这样做,因为:

  • 无法知道它可能是从哪个对象类型调用的。仅仅因为您从名为 Person 的类的实例调用它并不意味着这是可以调用它的唯一方法。
  • 它可能根本不是从对象实例调用的。它可以从静态方法调用。

当调用类中的方法时,调用代码的任何内容都不会被推送到堆栈上(方法的参数除外),因此根本无法获取以这种方式使用的信息。

我认为,在您的情况下,正确的解决方案是将 Person 类型的参数添加到 PrintName()(我想您已经考虑过了?