我有这个:
public string Log
{
get { return log; }
protected set
{
if (log != value)
{
MarkModified(PropertyNames.Log, log);
log = value;
}
}
}
我的数据绑定实用程序类就是这样做的:
PropertyInfo pi = ReflectionHelper.GetPropertyInfo(boundObjectType, sourceProperty);
if (!pi.CanWrite)
SetReadOnlyCharacteristics(boundEditor);
但PropertyInfo.CanWrite并不关心该集是否可公开访问,只是它存在。
如何确定是否设置了公开,而不只是任何设置?
答案 0 :(得分:2)
您需要使用BindingFlags。像
这样的东西PropertyInfo property = type.GetProperty("MyProperty", BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.Instance);
答案 1 :(得分:1)
在PropertyInfo上调用GetSetMethod,获取MethodInfo并检查其属性,如IsPublic。
答案 2 :(得分:1)
在其他答案中对ReflectionHelper的建议更改的替代方法是调用pi.GetSetMethod(false)
并查看结果是否为空。
答案 3 :(得分:0)
在ReflectionHelper.GetPropertyInfo()中,你可能是一个boundObjectType.GetType()。GetProperties(),其中BindingFlags参数显然包含BindingFlags.NonPublic。您只想指定BindingFlags.Public
答案 4 :(得分:0)
因为你有一个“ReflectionHelper”课程,我们看不到来源,所以有点难以分辨。但是,我的第一个猜测是,当您调用Type.GetProperty时,您没有正确设置BindingFlags属性。您需要在Public枚举标志中进行OR,以确保只返回Public值。