В C#4.0 у нас есть динамический тип, но как вызвать статический метод динамического текстового объекта?
Ниже кода генерирует исключение во время выполнения. Динамический объект от класса C#, но это мог быть объект от других языков до ДОЛЛАРА. Точка не то, как вызвать статический метод, а как вызвать статический метод динамического объекта, который не мог быть создан в коде C#.
class Foo
{
public static int Sum(int x, int y)
{
return x + y;
}
}
class Program
{
static void Main(string[] args)
{
dynamic d = new Foo();
Console.WriteLine(d.Sum(1, 3));
}
}
По моему скромному мнению, динамичный изобретен для образования моста C# и другого языка программирования. Существует некоторый другой язык (например, Java) позволяет вызывать статический метод через объект вместо типа.
BTW, введение C#4.0 не является настолько впечатляющим по сравнению с C#3.0.
Одним из возможных обходных путей может быть использование отражения.
dynamic d = new Foo();
var sum = (int)d.GetType()
.GetMethod("Sum")
.Invoke(d, new object[] { 1, 3 });
Console.WriteLine(sum);
Это не поддерживается непосредственно C# 4, но есть интересное обходное решение в этом сообщении блога: http://blogs.msdn.com/davidebb/archive/2009/10/23/using-c-dynamic-to-call-static-members.aspx