代码之家  ›  专栏  ›  技术社区  ›  Brandon

为什么不能将此接口作为参数传递?

  •  1
  • Brandon  · 技术社区  · 14 年前

    我在仿制药方面没有太多经验,但有人能向我解释一下为什么这行不通,我需要做什么才能让它起作用?

    我有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传递给联机演示者却不起作用。我错过什么了吗?如果iCalendarView继承自IOnlineView,为什么不能将其作为参数传递?

    在我在日期和在线类之间添加iCalendarView和CalendarPresenter之前,这很好地工作,但是我需要它,这样CalendarPresenter可以处理日历显示,并且可以从其他演示者继承。

    1 回复  |  直到 14 年前
        1
  •  4
  •   Martin Ingvar Kofoed Jensen    14 年前

    进行以下更改:

    public class CalendarPresenter<T> : OnlinePresenter<T> where T : ICalendarView
    {
        public CalendarPresenter(T view) : base(view) { }
    }  
    

    基类“onlinepresenter”构造函数接受类型为t的对象,子类“calendarpresenter”构造函数接受类型为“icalendarview”的对象。