c# - metodos - propiedades en informatica definicion
¿Cómo obtener el valor de un campo estático privado de una clase? (5)
¿Hay alguna manera de obtener valor del campo estático privado de la clase conocida mediante la reflexión?
Como se indicó anteriormente, probablemente pueda usar System.Type::GetMembers()
con BindingFlags
::NonPublic | BindingFlags::Static
BindingFlags
::NonPublic | BindingFlags::Static
::NonPublic | BindingFlags::Static
, pero solo si tiene la ReflectionPermission
correcta.
Pruebe algo como esto:
Type type = typeof(MyClass);
MemberInfo[] members = type.GetMembers(BindingFlags.NonPublic | BindingFlags.Static);
Yo pensaría que debería funcionar.
Sí.
Type type = typeof(TheClass);
FieldInfo info = type.GetField(name, BindingFlags.NonPublic | BindingFlags.Static);
object value = info.GetValue(null);
Esto es para un campo. Para una propiedad, cambie type.GetField
a type.GetProperty
. También puede acceder a métodos privados de manera similar.
Si tiene plena confianza, debería poder:
Type t = typeof(TheClass);
FieldInfo field = t.GetField("myFieldName", BindingFlags.NonPublic | BindingFlags.Static);
object fieldValue = field.GetValue(myObject);
Sin embargo, si ejecuta esto en un sistema sin plena confianza, la llamada GetField fallará, y esto no funcionará.
Supongo que alguien debería preguntar si esta es una buena idea o no. Crea una dependencia en la implementación privada de esta clase estática. La implementación privada está sujeta a cambios sin previo aviso a las personas que utilizan Reflection para acceder a la implementación privada.
Si las dos clases están pensadas para funcionar juntas, considere hacer el campo interno y agregar el conjunto de la clase cooperadora en un atributo [assembly: InternalsVisibleTo].