Ковариантные возвращаемые типы c # с использованием универсальных типов

Является ли приведенный ниже код единственным способом реализации ковариантных возвращаемых типов?

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

Я считаю, что этот код работает нормально, но становится действительно неприятно, когда у меня есть несколько свойств, требующих такого же поведения.

Есть ли другие способы реализовать это поведение? Дженерики или что-то еще?

26
задан Brian 3 December 2010 в 09:47
поделиться