反射和动态方法解析
Reflection and dynamic method resolution
可以安全地假设当通过反射(或使用动态)调用方法时,选择了最具体的方法,就像在普通代码中一样?
让我们考虑一下这段代码:
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()
)解析为可能的最具体类型。
可以安全地假设当通过反射(或使用动态)调用方法时,选择了最具体的方法,就像在普通代码中一样?
让我们考虑一下这段代码:
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()
)解析为可能的最具体类型。