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

时间:2013-02-04 12:38:39

标签: c# .net

  

可能重复:
  getting the caller of a method in 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'?

编辑:上面的代码中的问题可以通过很多不同的方式解决,非常容易。请假设我并不愚蠢,这只是我能提出的最简单的代码,以使我的问题清楚。

1 个答案:

答案 0 :(得分:4)

你不能这样做是因为:

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

当调用类中的方法时,调用代码的任何内容都不会被压入堆栈(除了方法的参数之外),因此根本没有信息可以通过这种方式使用。

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