[英]Get only protected members via .net reflection
这将返回所有非公共实例属性:
var instanceNonPublic = currentType.GetProperties (BindingFlags.Instance |
BindingFlags.NonPublic);
但是,有什么方法可以确定哪个访问修饰符适用于每个属性? private
, internal
还是protected
?
由于属性是由get
方法和set
方法组成的,因此您可以使用它们的get
和set
方法的访问修饰符对其进行迭代并过滤相关的PropertyInfo
:
var instancePrivate = currentType.GetProperties(BindingFlags.Instance |
BindingFlags.NonPublic)
.Where(x => x.GetMethod.IsPrivate &&
x.SetMethod.IsPrivate);
这些是有趣的访问修饰符:
IsPrivate
表示该方法是private
。 IsFamily
表示该方法是protected
。 IsAssembly
指示该方法是internal
方法。 优雅设置过滤器的其他方法是使用FindMembers
:
public void YourMethod()
{
...
var instancePrivate = currentType.FindMembers(MemberTypes.Property,
BindingFlags.Instance |
BindingFlags.NonPublic,
PrivateMemberFilter, null);
.OfType<PropertyInfo>();
...
}
static readonly MemberFilter PrivatePropertyFilter = (objMemberInfo, objSearch) =>
{
PropertyInfo info = (objMemberInfo as PropertyInfo);
if (info == null)
{
return false;
}
return info.GetMethod.IsPrivate && info.SetMethod.IsPrivate;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.