如何判断类属性是否具有公共集(.NET)?

时间:2008-10-09 15:14:55

标签: c# .net data-binding reflection

我有这个:

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

如何确定是否设置了公开,而不只是任何设置?

5 个答案:

答案 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值。