que actualmente tienen este tipo de código:C#: Fundición tipos dinámicamente
private void FillObject(Object MainObject, Foo Arg1, Bar Arg2)
{
if (MainObject is SomeClassType1)
{
SomeClassType1 HelpObject = (SomeClassType1)MainObject;
HelpObject.Property1 = Arg1;
HelpObject.Property2 = Arg2;
}
else if (MainObject is SomeClassType2)
{
SomeClassType2 HelpObject = (SomeClassType2)MainObject;
HelpObject.Property1 = Arg1;
HelpObject.Property2 = Arg2;
}
}
Suponiendo que SomeClassType1 y SomeClassType2 tienen el mismo conjunto de propiedades que desea asignar (aunque pueden diferir en otras), es Es posible emitir dinámicamente MainObject al tipo apropiado y luego asignar el valor, sin duplicar el código? Esto es lo que me gustaría ver en el final:
private void FillObject(Object MainObject, Foo Arg1, Bar Arg2)
{
Type DynamicType = null;
if (MainObject is SomeClassType1)
{
DynamicType = typeof(SomeClassType1);
}
else if (MainObject is SomeClassType2)
{
DynamicType = typeof(SomeClassType2);
}
DynamicType HelpObject = (DynamicType)MainObject;
HelpObject.Property1 = Arg1;
HelpObject.Property2 = Arg2;
}
Y, obviamente, C# queja de no poder encontrar DynamicType:
El tipo o espacio de nombres 'DynamicType' no se pudo encontrar (¿Echas en falta una directiva using o una referencia de ensamblado?)
¿Algo así es posible en C# 2.0? Si es más desordenado que mi código actual, entonces no veo sentido en hacer esto, pero estoy muy interesado en saberlo. ¡Gracias!
EDIT: para aclarar, entiendo perfectamente que la implementación de una interfaz es la solución más adecuada y probablemente la correcta. Dicho esto, estoy más interesado en ver cómo podría hacerlo sin implementar una interfaz. Gracias por excelentes respuestas!
+1 Agradable ... No hubiera pensado en usar medicamentos genéricos, solo habría lanzado a la interfaz. –
¿Cómo es útil el Parámetro genérico T aquí? ¿Por qué no simplemente usar FillObject (IMYInterface mainobject, ...)? –
Tengo curiosidad: ¿por qué usaría genéricos en este caso y no solo en el vacío privado FillObject (IMyInterface MainObject, Foo Arg1, Bar Arg2)? –