www org mapwingis mapwindows mapwindow espaƱol c# reflection

c# - org - mapwindows 5



Establecer valor de campo privado (2)

Evidentemente, agregar BindingFlags.Instance parece haberlo resuelto:

> class SomeClass { object id; public object Id { get { return id; } } } > var t = typeof(SomeClass) ; > t [Submission#1+SomeClass] > t.GetField("id") null > t.GetField("id", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); > t.GetField("id", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance) [System.Object id] >

¿Por qué el siguiente código no funciona?

class Program { static void Main ( string[ ] args ) { SomeClass s = new SomeClass( ); s.GetType( ).GetField( "id" , System.Reflection.BindingFlags.NonPublic ) // sorry reasently updated to GetField from GetProperty... .SetValue( s , "new value" ); } } class SomeClass { object id; public object Id { get { return id; } } }

Estoy tratando de establecer el valor de un campo privado.

Aquí está la excepción que recibo:

System.NullReferenceException no se manejó Mensaje = La referencia del objeto no se estableció en una instancia de un objeto. Fuente = ConsoleApplication7
StackTrace: en Program.Main (String [] args) en C: / Users / Antonio / Desktop / ConsoleApplication7 / ConsoleApplication7 / Program.cs: line 18 en System.AppDomain._nExecuteAssembly (RuntimeAssembly assembly, String [] args) en System. AppDomain.ExecuteAssembly (String assemblyFile, Evidence assemblySecurity, String [] args) en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAunciapayunidad en el Estado de la mano en el lugar de trabajo en el lugar de trabajo. , Devolución de llamada de ContextCallback, estado del objeto, ignoreSyncCtx booleano en System.Threading.ExecutionContext.Run (ejecución de ExecutionContext, contexto, devolución de llamada de ContextCallback, estado del objeto) en System.Threading.ThreadHelper.ThreadStart () InnerException:


Prueba esto (inspirado en ¿ Buscar un campo privado con Reflexión? ):

var prop = s.GetType().GetField("id", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); prop.SetValue(s, "new value");

Mis cambios fueron para utilizar el método GetField : está accediendo a un campo y no a una propiedad, y no a NonPublic con Instance .