Tipos de retorno covariante de c # que utilizan genéricos

¿Es el siguiente código la única forma de implementar tipos de retorno covariantes?

public abstract class BaseApplication<T> {
    public T Employee{ get; set; }
}

public class Application : BaseApplication<ExistingEmployee> {}

public class NewApplication : BaseApplication<NewEmployee> {}

Quiero poder construir una Aplicación o una Nueva Aplicación y hacer que devuelva el tipo de Empleado apropiado de la propiedad Empleado.

var app = new Application();
var employee = app.Employee; // this should be of type ExistingEmployee

Creo que este código funciona bien, pero se vuelve realmente desagradable cuando tengo varias propiedades que requieren el mismo comportamiento.

¿Hay alguna otra forma de implementar este comportamiento? Genéricos o de otra manera?

Respuestas a la pregunta(7)

Su respuesta a la pregunta