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