让我们创建一些接口
public interface ITimeEventHandler
{
string Open();
}
public interface IJobTimeEventHandler : ITimeEventHandler
{
string DeleteJob();
}
public interface IActivityTimeEventHandler : ITimeEventHandler
{
string DeleteActivity();
}
public interface ITimeEvent
{
ITimeEventHandler Handler { get; }
}
public interface IJobTimeEvent : ITimeEvent
{
int JobID { get; }
}
Run Code Online (Sandbox Code Playgroud)
创建一个类
public class JobTimeEvent : IJobTimeEvent
{
public int JobID
{
get; internal set;
}
public IJobTimeEventHandler Handler
{
get; internal set;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是..当实现一个定义基类属性的接口时,为什么类实现接口不能返回派生类类型对象?
对于类JobTimeEvent中的ex,IJobtimeEvent需要一个ITimeEventHandler类型的属性,但为什么不允许从IimeEventHandler派生的IJobTimeEventHandler类型
public interface IBasePresenter
{
}
public interface IJobViewPresenter : IBasePresenter
{
}
public interface IActivityViewPresenter : IBasePresenter
{
}
public class BaseView
{
public IBasePresenter Presenter
{
get;
set;
}
}
public class JobView : BaseView
{
public IJobViewPresenter JobViewPresenter
{
get { this.Presenter as IJobViewPresenter;}
}
}
public class ActivityView : BaseView
{
public IActivityViewPresenter ActivityViewPresenter
{
get { this.Presenter as IActivityViewPresenter;}
}
}
Run Code Online (Sandbox Code Playgroud)
让我们假设我需要在BaseView上使用IBasePresenter属性.现在这个属性是由JobView和ActivityView继承的,但是如果我需要在这些派生类中引用IJobViewPresenter对象,那么我需要输入转换IBasePresenter属性到IJobViewPresenter或IActivityPresenter(我想避免)或者在派生类上创建JobViewPresenter和ActivityViewPresenter(如如上所示).
我想避免在派生类中进行类型转换,仍然引用IJobViewPresenter或IActivityViewPresenter,并且在BaseView中仍然有IBasePresenter.
有没有办法实现它?