反射和动态解析度方法

本文关键字:方法 解析度 动态 反射 | 更新日期: 2023-09-27 18:10:52

可以安全地假设,当通过反射(或使用动态)调用方法时,选择最特定的方法,就像在普通代码中一样?

让我们考虑下面的代码:

public class Animal {}
public class Dog : Animal {}
public class MyClass
{
    public void SayHello(Dog animal)
    {
        Console.WriteLine("Hello dog!");
    }
    public void SayHello(Animal animal)
    {
        Console.WriteLine("Hello animal!");
    }
}

当使用:

调用时
var myClass = new MyClass();
// Classic invocation
myClass.SayHello(new Dog());
// Reflection
var method = myClass.GetType().GetMethod("SayHello", new[] { typeof(Dog) });
method.Invoke(myClass, new object[] { new Dog() });
// dynamic
((dynamic)myClass).SayHello((dynamic)new Dog());

当调用SayHello时,使用经典方法解析调用的方法是否正确?换句话说,输出将始终是"Hello dog!" ?

从一个快速测试的答案似乎是,但我找不到任何具体的文档在MSDN。

反射和动态解析度方法

是,dynamic总是将参数(在本例中为new Dog())解析为最具体的类型。