【问题标题】:Reflection and dynamic method resolution反射和动态方法分辨率
【发布时间】:2015-09-02 23:53:46
【问题描述】:

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

让我们考虑一下这段代码:

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 上找不到任何特定文档。

【问题讨论】:

  • 我认为最好的方法就是自己尝试一下,你已经有了代码:)

标签: c# dynamic reflection


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 2012-03-21
    • 2019-11-26
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多