There may be a problem with your way of thinking. The way your code is structured, an Employee is also a Student. The concept of inheritance does not mean going from one stage to another, but rather specialization.
Edit: I did not notice any information about the employee, so I'm changing the answer.
Since you want to keep the name and ID information, it may be a good idea to abstract the "evolution" logic to a separate abstract class, which will give you the opportunity to add specific information for each "post", for example :
A person class as a basis to keep your registration data:
public class Pessoa
{
public int Id {get;set;}
public string Nome {get;set;}
public virtual Cargo Cargo {get;set;}
}
Cargo is an abstract class, and you will have two classes defining different behaviors that will inherit from it.
public abstract class Cargo
{
public int Id {get;set;}
public string Nome {get;set;}
}
public class CargoEstudante : Cargo
{
public bool Concluido {get;set;}
}
public class CargoEmpregado : Cargo
{
public decimal Salario {get;set;}
}
So you could specify extension methods to make your life easier and find out if a Person is a student or works (or both makes sense in your application).
public static class ExtensoesPessoa
{
public static bool IsEstudante(this Pessoa p)
{
return p.Cargo is CargoEstudante;
}
public static bool IsEmpregado(this Pessoa p)
{
return p.Cargo is CargoEmpregado;
}
}