De acceso con el mismo nombre miembros de la clase de casos de diferentes clases

StackOverflow https://stackoverflow.com/questions/1845592

  •  12-09-2019
  •  | 
  •  

Pregunta

Tengo instancias de la clase A y B, y ambas clases de implementar un 'texto' miembro. ¿Hay una manera de acceder Texto miembro de un modo genérico? Estoy esperando por algo análogo a la forma de decir simplemente javascript:

instance['Text'] = value;

Nota: estas dos clases, lamentablemente, no tanto implementar la misma interfaz con un miembro de texto

.
¿Fue útil?

Solución

A diferencia de JavaScript, C # es un lenguaje estático y si ambas clases no implementan una interfaz común o clase base se podría utilizar la reflexión para lograr el mismo objetivo.

instance.GetType().GetProperty("Text").SetValue(instance, "new value", null);

Otros consejos

Si usted no puede hacer A y B implementar la misma interfaz, a continuación, es necesario utilizar reflexión para acceder a cualquier miembro de la clase por su nombre, algo como esto:

typeof(A).GetProperty("Text").GetValue(theInstance, null);

donde theInstance sería una instancia de la clase.

Lo ideal es que tiene una sola clase con el miembro de "texto", que será la base para A y B. Probablemente no es conveniente, pero es más fiable y correcta. Trate de no utilizar la reflexión donde se puede hacer lo mismo en el otro lado.

Si se puede hacer A y B implementar la misma interfaz

 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top