6

我有这个:

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 不关心该集合是否可公开访问,只关心它是否存在。

我如何确定是否有公共集,而不仅仅是任何集?

4

5 回答 5

2

您需要使用BindingFlags。就像是

PropertyInfo property = type.GetProperty("MyProperty", BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.Instance);
于 2008-10-09T15:20:55.720 回答
1

在 PropertyInfo 上调用 GetSetMethod,获取 MethodInfo 并检查其属性,如 IsPublic。

于 2008-10-09T15:22:11.723 回答
1

在其他答案中建议对 ReflectionHelper 进行更改的替代方法是调用pi.GetSetMethod(false)并查看结果是否为空。

于 2008-10-09T15:24:13.717 回答
0

在您的 ReflectionHelper.GetPropertyInfo() 中,您大概是一个 boundObjectType.GetType().GetProperties(),其中 BindingFlags 参数显然包括 BindingFlags.NonPublic。您只想指定 BindingFlags.Public

于 2008-10-09T15:21:30.070 回答
0

嗯,这有点难说,因为你有一个“ReflectionHelper”类,我们看不到源。但是,我的第一个猜测是您在调用 Type.GetProperty 时没有正确设置 BindingFlags 属性。您需要在 Public 枚举标志中进行 OR 以确保仅返回 Public 值。

于 2008-10-09T15:24:14.870 回答