关于c#:使用属性进行反射优化。

Reflection optimizations with attributes .

C中是否有方法:

  • 获取具有属性的类的所有属性(而不是必须遍历所有属性,然后检查属性是否存在)。

  • 如果我想要所有的公共、内部和受保护的属性,而不是私有属性,我就找不到这样做的方法。我只能这样做:

    propertyinfo[]props=type.getproperties(bindingFlags.instance bindingFlags.public bindingFlags.nonpublic)

  • 有没有一种方法可以避免获得私人财产,但要获得其他一切。


    实际上,没有一种方法可以更快地完成这项工作,但是您可以通过缓存数据来减少执行这项工作的频率。通用实用程序类是一种方便的方法,例如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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只为foo等提供了数据—使用惰性填充。如果愿意,也可以使用静态构造函数。


    关于缓存:如果您通过TypeDescriptor.GetProperties访问属性,那么您可以免费获得缓存。对于这种反射情况,TypeDescriptor类还有其他一些很好的实用方法。它只在public属性上运行(没有protectedinternal成员,也没有字段)。


    回答(2):如果您不属于所讨论的类/组,则internalprotectedprivate相同。

    如果你想访问这些,你需要请求所有的属性,就像你已经做的那样,然后自己过滤列表。


    我不相信有任何一种方法可以做到。

    不过,你需要反思多少种类型呢?这真的是一个瓶颈吗?您是否能够缓存结果以避免每种类型都必须执行多次?