Можно с уверенностью предположить, что при вызове метода посредством отражения (или с использованием динамического) выбирается наиболее конкретный, как в обычном коде?Разрешение отражения и динамического метода
Рассмотрим этот код:
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.
Я думаю, что лучший способ узнать, просто попробовать его сами, у вас уже есть код :) – Black0ut