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;}
}
}
假设我需要 BaseView 上的 IBasePresenter 属性。
现在这个属性由 JobView 和 ActivityView 继承,但如果我需要在这些派生类中引用 IJobViewPresenter 对象,那么我需要将 IBasePresenter 属性类型转换为 IJobViewPresenter 或 IActivityPresenter (我想避免)或在派生类上创建 JobViewPresenter 和 ActivityViewPresenter (如如上所示)。
我想避免在派生类中进行类型转换,并且仍然引用 IJobViewPresenter 或 IActivityViewPresenter,并且在 BaseView 中仍然具有 IBasePresenter。
我有办法实现它吗?
你可以这样做:
public class BaseView<TPresenter>
where TPresenter: IBasePresenter
{
TPresenter Presenter { get; set; }
}
public class JobView: BaseView<IJobViewPresenter>
{
}
如果您有需要引用 BaseView 的代码,您可以创建一个接口并公开基本演示器,如下所示:
public interface IBaseView
{
IBasePresenter BasePresenter { get; }
}
public class BaseView<TPresenter> : IBaseView
where TPresenter: IBasePresenter
{
TPresenter Presenter { get; set; }
IBasePresenter IBaseView.BasePresenter
{
get { return Presenter; }
}
}
需要访问 BaseView 的类现在可以使用该接口,而不是直接使用 BaseView。您也可以公开需要在其中使用的任何其他基本服务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)