2008-10-09 17 views
6

tengo esto:¿Cómo puedo saber si una propiedad de clase tiene un conjunto público (.NET)?

public string Log 
     { 
      get { return log; } 
      protected set 
      { 
       if (log != value) 
       { 
        MarkModified(PropertyNames.Log, log); 
        log = value; 
       } 
      } 

     } 

Y mi clase de utilidad para el enlace de datos hace esto:

PropertyInfo pi = ReflectionHelper.GetPropertyInfo(boundObjectType, sourceProperty); 

if (!pi.CanWrite) 
       SetReadOnlyCharacteristics(boundEditor); 

Pero PropertyInfo.CanWrite no le importa si el juego es accesible al público, sólo que existe.

¿Cómo puedo determinar si hay un conjunto pública, no sólo cualquier conjunto?

Respuesta

1

Una alternativa a los cambios sugeridos a ReflectionHelper en otras respuestas es llamar al pi.GetSetMethod(false) y ver si el resultado es nulo.

2

Necesita usar el BindingFlags. Algo así como

PropertyInfo property = type.GetProperty("MyProperty", BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.Instance); 
0

Dentro de su ReflectionHelper.GetPropertyInfo(), que presumiblemente para un boundObjectType.GetType(). GetProperties(), donde el parámetro BindingFlags aparentemente incluye BindingFlags.NonPublic. Desea especificar solo BindingFlags.Public

+0

Esto no funcionará, la propiedad puede ser pública, mientras que su "conjunto" puede ser privado o interno. –

1

Llame a GetSetMethod en PropertyInfo, obtenga MethodInfo y examine sus propiedades, como IsPublic.

0

Bueno, es un poco difícil de distinguir ya que tiene una clase "ReflectionHelper" donde no podemos ver la fuente. Sin embargo, mi primera suposición es que no está configurando correctamente el atributo BindingFlags cuando llama a Type.GetProperty. Necesita O en el indicador de enumeración pública para asegurarse de que solo se devuelvan los valores públicos.

Cuestiones relacionadas