Как вызвать статический метод в C#4.0 с динамическим типом?

В 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.

13
задан Morgan Cheng 13 May 2010 в 08:43
поделиться

2 ответа

Одним из возможных обходных путей может быть использование отражения.

dynamic d = new Foo();

var sum = (int)d.GetType()
                .GetMethod("Sum")
                .Invoke(d, new object[] { 1, 3 });
Console.WriteLine(sum);
7
ответ дан 1 December 2019 в 20:28
поделиться

Это не поддерживается непосредственно C# 4, но есть интересное обходное решение в этом сообщении блога: http://blogs.msdn.com/davidebb/archive/2009/10/23/using-c-dynamic-to-call-static-members.aspx

14
ответ дан 1 December 2019 в 20:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: