有沒有在C#的方式:具有屬性的反射優化。
把那對他們(屬性與通過的所有屬性具有循環,然後檢查是否屬性存在一類的所有屬性
如果我想要所有公共,內部和受保護的屬性,但不是私有屬性,我找不到這種方法。我只能這樣做:
PropertyInfo [] props = type.GetProperties(BindingFlags.Instance | BindingFlags .Public | BindingFlags.NonPublic)
有沒有辦法避免私人財產,但得到一切。
有沒有在C#的方式:具有屬性的反射優化。
把那對他們(屬性與通過的所有屬性具有循環,然後檢查是否屬性存在一類的所有屬性
如果我想要所有公共,內部和受保護的屬性,但不是私有屬性,我找不到這種方法。我只能這樣做:
PropertyInfo [] props = type.GetProperties(BindingFlags.Instance | BindingFlags .Public | BindingFlags.NonPublic)
有沒有辦法避免私人財產,但得到一切。
我不相信有一種方法可以做到這一點。
雖然您有多少種類型需要反思?這真的是一個瓶頸嗎?您是否能夠緩存結果以避免每種類型需要多次執行一次?
回覆(2):如果您不在相關課堂/大會中,internal
和protected
與private
相同。
如果你想訪問這些,你需要問問所有的屬性,如你已經完成的,並且自己過濾列表。
關於緩存:如果您通過TypeDescriptor.GetProperties
訪問屬性,則可以免費獲取緩存。 TypeDescriptor
類有這樣的反射情況的一些其他很好的實用方法。它只在public
屬性上運行,但是(沒有protected
或internal
成員,沒有字段)。
有沒有辦法做到這一點更快 - 但你可以做的是通過緩存數據來減少頻率。一個通用的實用類可以這樣做,例如一種方便的方法:
static class PropertyCache<T>
{
private static SomeCacheType cache;
public static SomeCacheType Cache
{
get
{
if (cache == null) Build();
return cache;
}
}
static void Build()
{
/// populate "cache"
}
}
那麼你PropertyCache.Cache剛剛爲富等數據 - 懶人口。如果您願意,也可以使用靜態構造函數。
私有財產?屬性的要點是公開您的私有實例字段。不知道爲什麼你會首先想要私人物業。 – 2008-10-31 16:22:29
我不想要私人物業。 。這是如何避免看私人財產的問題。 – leora 2008-10-31 17:47:17