У меня нет большого опыта работы с дженериками, но может кто-нибудь объяснить мне, почему это не работает и что мне нужно сделать, чтобы заставить его работать?
У меня 3 интерфейса.
public interface IOnlineView
public interface ICalendarView : IOnlineView
public interface IDateView : ICalendarView
Тогда у меня есть 3 класса для докладчиков
public abstract class OnlinePresenter<T> where T : IOnlineView
{
protected OnlinePresenter(T view) { }
}
public class CalendarPresenter<T> : OnlinePresenter<T> where T : ICalendarView
{
public CalendarPresenter(ICalendarView view) : base(view) { }
}
public class DatePresenter<T> : CalendarPresenter<IDateView>
{
public DatePresenter(IDateView view) : base(view) { }
}
Вызов base(view)
в классе CalendarPresenter говорит, что ICalendarView нельзя назначить типу T
Передача IDateView в CalendarPresenter работает нормально, но передача ICalendarView в OnlinePresenter - нет. Я что-то пропустил? Если ICalendarView наследуется от IOnlineView, почему его нельзя передать в качестве аргумента?
Это работало нормально до того, как я добавил ICalendarView и CalendarPresenter между классами Date и Online, но он мне нужен, чтобы CalendarPresenter мог обрабатывать отображение календаря и мог наследоваться от других докладчиков.