Myl*_*ell 1 .net c# system.reflection
这将返回所有非公共实例属性:
var instanceNonPublic = currentType.GetProperties (BindingFlags.Instance |
BindingFlags.NonPublic);
Run Code Online (Sandbox Code Playgroud)
但有没有办法确定哪个访问修饰符适用于每个属性?private,internal还是protected?
由于属性是由get方法和set方法组成的,因此您可以PropertyInfo使用它们get和set方法的访问修饰符迭代它们并过滤相关的s :
var instancePrivate = currentType.GetProperties(BindingFlags.Instance |
BindingFlags.NonPublic)
.Where(x => x.GetMethod.IsPrivate &&
x.SetMethod.IsPrivate);
Run Code Online (Sandbox Code Playgroud)
这些是有趣的访问修饰符:
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;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
544 次 |
| 最近记录: |