De acceso con el mismo nombre miembros de la clase de casos de diferentes clases
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
.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();