Является ли код ниже единственным способом реализации ковариантных типов возврата?
public abstract class BaseApplication<T> {
public T Employee{ get; set; }
}
public class Application : BaseApplication<ExistingEmployee> {}
public class NewApplication : BaseApplication<NewEmployee> {}
Я хочу иметь возможность создать приложение или NewApplication и вернуть ему соответствующий тип Employee из свойства Employee.
var app = new Application();
var employee = app.Employee; // this should be of type ExistingEmployee
Я считаю, что этот код работает отлично, но он становится очень неприятным, когда у меня есть несколько свойств, которые требуют такого же поведения.
Есть ли другие способы реализации этого поведения? Дженерики или иначе?