Добавила Микрософт в C# 2010 ключевое слово dynamic для поддержки программирования в стиле динамических языков а-ля Питон. Динамика реализуется через reflection. Дошли руки померить скорость работы.
Будем вызывать процедуру Foo класса MyObject:
public sealed class MyObject
{
public static int sum;
public void Foo (int x, int y, int z)
{
sum = sum + x + y + z;
}
}
Обычный статический вызов:
public static void Test0 (MyObject x)
{
x.Foo(1, 2, 3);
}
Обычный вызов с предварительным динамическим приведением типа:
public static void Test1 (object x)
{
((MyObject)x).Foo(1, 2, 3);
}
Чисто динамический вызов (а-ля Питон):
public static void Test2 (dynamic x)
{
x.Foo(1, 2, 3);
}
Время затраченное на миллиард вызовов:
Test0 1.90 секунд
Test1 1.95 секунд
Test2 24.37 секунд