¿Puedo establecer una propiedad privada a través de la reflexión?¿Es posible establecer propiedad privada a través de la reflexión?
public abstract class Entity
{
private int _id;
private DateTime? _createdOn;
public virtual T Id
{
get { return _id; }
private set { ChangePropertyAndNotify(ref _id, value, x => Id); }
}
public virtual DateTime? CreatedOn
{
get { return _createdOn; }
private set { ChangePropertyAndNotify(ref _createdOn, value, x => CreatedOn); }
}
}
He intentado lo siguiente y no funciona, donde t
representa un tipo de Entity
:
var t = typeof(Entity);
var mi = t.GetMethod("set_CreatedOn", BindingFlags.Instance | BindingFlags.NonPublic);
creo que puedo hacer esto, pero no puedo resolverlo.
Sé esto es tarde, pero encontré la necesidad de este pensamiento, compartiría mi 'por qué'. Necesitaba superar un inconveniente en algún software de terceros. Específicamente, estaba usando el método Crystal Reports ExportToStream. La forma en que se escribió este método no permitía el acceso al búfer interno de la secuencia. Para enviar el informe al navegador, tuve que copiar la secuencia en un nuevo buffer (100K +), luego enviarlo. Al establecer el campo privado '_exponible' en el objeto de transmisión en 'verdadero', pude enviar el búfer interno directamente, guardando una asignación de 100K + en cada solicitud. – Ray
¿Por qué? Supongamos que tiene instaladores privados en sus propiedades de Id en todo su objeto de dominio y desea implementar pruebas de repositorio. Entonces, solo en su proyecto de prueba de repositorio, querrá poder establecer la propiedad Id. – bounav
Otro escenario de uso: configuración de campos generados automáticamente como "fecha de creación" al importar datos. – ANeves