1
我对泛型没有太多经验,但有人可以向我解释为什么这不起作用,我需要做些什么才能使其工作?为什么我不能将此接口作为参数传递?
我有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,为什么它不能作为参数传递?
在Date和Online类之间添加ICalendarView和CalendarPresenter之前,此工作正常,但我需要它,以便CalendarPresenter可以处理日历显示,并且可以从其他演示者继承。
+1。否则,您可以提供'Class Foo:ICalendarView'作为Calendar Calendar Server的类型参数,但调用构造函数的实例为class Bar:ICalendarView,该实例与基类OnlinePresenter中的T不匹配'(也就是'Foo')。 –
2010-07-23 16:56:30
+1。我以为我应该能够使用接口,因为我指定它必须是ICalendarView类型。感谢您的澄清。 – Brandon 2010-07-23 17:08:34