제네릭에 대한 경험이 많지 않지만 누군가가 왜 이것이 작동하지 않는지 설명하고 작동 시키려면 어떻게해야합니까?왜이 인터페이스를 인수로 전달할 수 없습니까?
3 개의 인터페이스가 있습니다.
public interface IOnlineView
public interface ICalendarView : IOnlineView
public interface IDateView : ICalendarView
는 다음 나는 CalendarPresenter 클래스에 base(view)
호출 ICalendarView가 CalendarPresenter에 IDateView 잘 작동 전달 T
을 입력 할당 할 수없는 것을 말한다 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) { }
}
을 가지고 있지만, ICalendarView를 OnlinePresenter에 전달하는 것은 아닙니다. 내가 놓친 게 있니? ICalendarView가 IOnlineView에서 상속받는 경우 왜 인수로 전달 될 수 없습니까?
Date와 Online 클래스 사이에 ICalendarView 및 CalendarPresenter를 추가하기 전에 제대로 작동했으나 CalendarPresenter가 일정 표시를 처리하고 다른 발표자로부터 상속 될 수 있도록해야합니다.
+1. 그렇지 않으면'classFoo : ICalendarView'를 타입 파라미터로'CalendarPresenter'에 제공 할 수 있습니다.하지만'class Bar : ICalendarView' 인스턴스로 생성자를 호출하면 기본 클래스'OnlinePresenter '의'T'와 일치하지 않을 것입니다 '(즉,'Foo'). –
+1. 내가 ICalendarView 유형이어야한다고 지정했기 때문에 인터페이스를 사용할 수 있었어야한다고 생각했습니다. 해명 해줘서 고마워. – Brandon