2008-10-31 90 views
2

有沒有在C#的方式:具有屬性的反射優化。

  1. 把那對他們(屬性與通過的所有屬性具有循環,然後檢查是否屬性存在一類的所有屬性

  2. 如果我想要所有公共,內部和受保護的屬性,但不是私有屬性,我找不到這種方法。我只能這樣做:

    PropertyInfo [] props = type.GetProperties(BindingFlags.Instance | BindingFlags .Public | BindingFlags.NonPublic)

有沒有辦法避免私人財產,但得到一切。

+0

私有財產?屬性的要點是公開您的私有實例字段。不知道爲什麼你會首先想要私人物業。 – 2008-10-31 16:22:29

+0

我不想要私人物業。 。這是如何避免看私人財產的問題。 – leora 2008-10-31 17:47:17

回答

1

我不相信有一種方法可以做到這一點。

雖然您有多少種類型需要反思?這真的是一個瓶頸嗎?您是否能夠緩存結果以避免每種類型需要多次執行一次?

1

回覆(2):如果您不在相關課堂/大會中,internalprotectedprivate相同。

如果你想訪問這些,你需要問問所有的屬性,如你已經完成的,並且自己過濾列表。

2

關於緩存:如果您通過TypeDescriptor.GetProperties訪問屬性,則可以免費獲取緩存。 TypeDescriptor類有這樣的反射情況的一些其他很好的實用方法。它只在public屬性上運行,但是(沒有protectedinternal成員,沒有字段)。

2

有沒有辦法做到這一點更快 - 但你可以做的是通過緩存數據來減少頻率。一個通用的實用類可以這樣做,例如一種方便的方法:

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剛剛爲富等數據 - 懶人口。如果您願意,也可以使用靜態構造函數。