Acesso nome idêntico membros da classe de instâncias de classes diferentes
Pergunta
Eu tenho instâncias de classe A e B, e ambas as classes implementar um membro do 'Texto'. Existe uma maneira de membro do acesso ao texto de uma forma genérica? Eu estou esperando por algo semelhante à forma como javascript de simplesmente dizer:
instance['Text'] = value;
Nota:. Estas duas classes infelizmente não implementar tanto a mesma interface com um membro do Texto
Solução
javascript Ao contrário, C # é uma linguagem estática e se ambas as classes não implementam uma interface comum ou classe base, você poderia usar o reflexo para atingir o mesmo objetivo.
instance.GetType().GetProperty("Text").SetValue(instance, "new value", null);
Outras dicas
Se você não pode fazer A e B implementar a mesma interface, então você precisa usar reflexão para o acesso de qualquer membro da classe pelo nome, algo como isto:
typeof(A).GetProperty("Text").GetValue(theInstance, null);
onde theInstance
seria uma instância da classe A.
Idealmente, você deve ter classe única com membro do "Texto", que será base para A e B. Provavelmente não é conveniente, mas é mais confiável e correta. Tente não usar reflexão, onde você pode fazer o mesmo em outra forma.
Se você pode fazer A e B implementar a mesma interface
interface ISomeGenericNameForAAndB
{
string Text { get; }
}
class A :ISomeGenericNameForAAndB
{
public string Text { get { return "some Text from A"; } }
}
class B : ISomeGenericNameForAAndB
{
public string Text { get { return "some Text from B"; } }
}
ISomeGenericNameForAAndB anAInstance = new A();
ISomeGenericNameForAAndB aBInstance = new B();