2008-10-31 92 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刚刚为富等数据 - 懒人口。如果您愿意,也可以使用静态构造函数。