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)て結果が null かどうかを確認することです。

于 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 値のみが返されるようにするには、Public 列挙型フラグで OR を実行する必要があります。

于 2008-10-09T15:24:14.870 に答える