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