當在新的.NET Framework 4.5中使用反射時,我遇到了一個奇怪的行爲,我發現這很奇怪。命名空間System.Reflection爲利用Type對象提供了一些新的擴展方法。其中兩個是GetRuntimeProperty(字符串名稱)和GetRuntimeProperties()。反思:使用GetRuntimeProperty方法的框架行爲不一致
現在想象一下,你有一個簡單的對象與一個內部屬性。
public class ObjectBase
{
protected int Id { get; set; }
public string Name { get; set; }
}
而你現在嘗試利用這種類型。
var properties = typeof(ObjectBase).GetRuntimeProperties();
// properties.Count = 2
var idProperty = typeof(ObjectBase).GetRuntimeProperty("Id");
var nameProperty = typeof(ObjectBase).GetRuntimeProperty("Name");
// idProperty = null
// nameProperty = System.String Name
正如預期的properties
對象持有的編號和名稱屬性defintions 2所屬性定義和nameProperty持有的名稱屬性定義。什麼不是預期的是idProperty
對象是空的...
來自.NET框架,我猜這是微軟架構師的意圖,但我必須說,它似乎並不是你真正希望發生的事情。我確實相信這種類似的方法應該表現得一樣,但GetRuntimeProperty過濾GetRuntimeProperties不應用過濾器的公共屬性。
有沒有人有合理的解釋,爲什麼微軟決定這些類似的方法應該有不同的行爲?設計錯誤?
謝謝。
請記住,只有在應用商店中才需要使用此功能。所以你所看到的是一種妥協,IInspectable並不完全是一個豐富的界面。 –
他們完全搞砸了新的反射API。在很多方面這是一團糟,我甚至不知道從哪裏開始。 –