System.Reflection.RuntimeReflectionExtensions中方法的目的是什么?

时间:2014-03-19 10:41:19

标签: c# .net reflection .net-4.5 base-class-library

自.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 个答案:

答案 0 :(得分:1)

GetRuntime *方法用于WinRT项目。由于WinRT使用的类型可能与.NET使用的类型不同,但功能相同且名称相同,因此这些反射方法可确保返回正确的MemberInfo。如果您正在运行WinRT,则在运行时不太可能需要.NET MemberInfo。

见Hans Passant对原始问题的评论。