你能用反射来找出当前方法正在执行的对象的类型吗?

Pet*_*nov 2 c# reflection

我知道如何获得当前的方法(MethodBase.GetCurrentMethod()).

但是,DeclaringType属性MethodBase将为我提供定义方法的类型.

我感兴趣的是在运行时实际调用它的方法的类型.

Jar*_*Par 6

如果你的意思是对象本身的类型,那么只需使用this.GetType()?这将为您提供this当前方法正在执行的类型.

如果您指的是执行该方法的引用类型,那么实际上无法确定.以虚拟方法为例.

abstract class Animal {
  public abstract void MakeNoise();
}
abstract class Dog : Animal { }
class Labrador : Dog {
  public override void MakeNoise() {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

引用类型可以是Animal但是如果对象是Labrador那么MakeNoise将调用该方法的版本.他们没有办法从MakeNoise方法知道它是否是从一个调用Animal,DogLabrador实例.