Какова цель методов в System.Reflection.RuntimeReflectionExtensions?

Начиная с .NET 4.5 (2012), появляются некоторые новые методы расширения из System.Reflection.RuntimeReflectionExtensions class. Однако новые методы, похоже, не дают нам ничего нового. Пример:

static void Main()
{
    var prop1 = typeof(string).GetProperty("Length");
    var prop2 = typeof(string).GetRuntimeProperty("Length");  // extension, needs: using System.Reflection;
    Console.WriteLine(prop1 == prop2);

    Action a = Main;
    var meth1 = a.Method;
    var meth2 = a.GetMethodInfo();  // extension, needs: using System.Reflection;
    Console.WriteLine(meth1 == meth2);
}

Это дважды записывает True.

(Здесь оператор == перегружен, но даже проверка ссылочного равенства с (object)prop1 == (object)prop2 и (object)meth1 == (object)meth2 дает True).

Итак, какова цель этих новых общедоступных методов? Ясно, что я должен что-то игнорировать или недопонимать.

Ответ 1

Методы GetRuntime * используются для проектов WinRT. Поскольку типы, используемые WinRT, могут отличаться от типов, используемых .NET, но все же функционируют одинаково и имеют одно и то же имя, эти методы отражения гарантируют, что вернется правильный MemberInfo. Вероятно, вы хотите, чтобы .NET MemberInfo выполнялся во время выполнения, если вы используете WinRT.

См. комментарий Hans Passant по исходному вопросу.