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

Foi útil?

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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top