Cast base instance to derived class (downcast) in C#

Israel Lot picture Israel Lot · Apr 16, 2012 · Viewed 10.2k times · Source

Suppose I have two classes:

class Employee 

and

class AdvancedEmployee:Employee

I know something like this won't work, as I can't downcast on C#:

var employee = new Employee();
var advanced = employee as AdvancedEmployee;

My question is: How to accomplish downcast in a efficient way? Actually I have a constructor on AdvancedEmployee that takes a Employee as parameter and use it to inject its values, basically making a clone.


Update

To solve the data that would get duplicated I changed the approach a bit and now AdvancedEmployee CONTAINS an employee rather than being one itself. Example:

class Employee;

class AdvancedEmployee
{
   private employee

   public AdvancedEmployee(Employee employee){

    this.employee = employee

  }           

}

Answer

Tigran picture Tigran · Apr 16, 2012

It can not be a cast, it's actually a conversion between different types.

I would add a ctor or static member function like AdvancedEmployee FromBase(Employee e), to construct derived type from given base type.