有没有在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