自.NET 4.5(2012)以來,一些新的擴展方法出現,從System.Reflection.RuntimeReflectionExtensions
class。但是,新方法似乎沒有給我們任何新的東西。舉例:System.Reflection.RuntimeReflectionExtensions中方法的用途是什麼?
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
)。
那麼這些新公開可見方法的目的是什麼?很顯然,我必須忽略或誤解某些東西。
我也不知道爲什麼這些方法是存在的,因爲內部'GetRuntimeProperty'只是執行相同的'type.GetProperty(name)'方法 –
我看不到任何目的。它是完全多餘的。如果你看看反編譯的代碼,你會看到他們是多麼毫無意義。猜猜有人在進入代碼庫的那一天睡着了。 – leppie
這需要添加以支持WinRT。這是基於COM的,它不支持反射。 CLR內置的語言投影掩蓋了許多怪癖,隱藏了基本類型系統。沒有什麼非常微妙的,在WinRT中,一個字符串是*非常*不同的類型。但它並不完美,不完全確定它們是如何效仿它的。 –