Posso definir uma propriedade privada por reflexão?
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); }
}
}
Eu tentei o seguinte e não funciona, onde t
representa um tipo de Entity
:
var t = typeof(Entity);
var mi = t.GetMethod("set_CreatedOn", BindingFlags.Instance | BindingFlags.NonPublic);
Acho que posso fazer isso, mas não consigo resolver.
2
Sei que já é tarde, mas achei necessário compartilhar esse meu 'porquê'. Eu precisava superar um inconveniente em alguns softwares de terceiros. Especificamente, eu estava usando o método Crystal Reports ExportToStream. Da maneira como esse método foi escrito, o acesso ao buffer interno do fluxo não era permitido. Para enviar o relatório para o navegador, tive que copiar o fluxo em um novo buffer (100K +) e enviá-lo. Ao definir o campo privado '_exposable' no objeto de fluxo como 'true', pude enviar diretamente o buffer interno, economizando uma alocação de 100K + em cada solicitação.
—
Raio
Por quê? Digamos que você tenha setters privados nas suas propriedades de ID em todos os objetos do seu domínio e deseje implementar testes de repositório. Somente no seu projeto de teste de repositório você poderá definir a propriedade Id.
—
bounav
Outro cenário de uso: configuração de campos gerados automaticamente como "data de criação" ao importar dados.
—
ANeves
Outro motivo é que estou curioso para saber se é possível. Foi assim que acabei vendo essa pergunta.
—
Caleb Mauer 01/02