Supongamos que tengo dos clases:moldeada ejemplo a base de clase derivada (abatido) en C#
class Employee
y
class AdvancedEmployee:Employee
sé que algo como esto no va a funcionar, ya que no puedo abatido en C#:
var employee = new Employee();
var advanced = employee as AdvancedEmployee;
Mi pregunta es: ¿Cómo lograr un downcast de manera eficiente? En realidad tengo un constructor en AdvancedEmployee que toma un Employee como parámetro y lo usa para inyectar sus valores, básicamente haciendo un clon.
actualización
Para solucionar los datos que conseguirían duplicado he cambiado el enfoque un poco y ahora AdvancedEmployee contiene un empleado en lugar de ser uno mismo. Ejemplo:
class Employee;
class AdvancedEmployee
{
private employee
public AdvancedEmployee(Employee employee){
this.employee = employee
}
}
¿Ambos se ajustan a una interfaz, IEmployee? – SpaceBison
No puedo modificar Employee. –
@IsraelLot, ciertamente puedes abatir en C#. Sospecho que solo le falta la sintaxis: 'empleado AdvancedEmployee advanced = (AdvancedEmployee);' Por supuesto, esto dará un error en tiempo de ejecución si el objeto al que se hace referencia no es en realidad una instancia de AdvancedEmployee. – Ben