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,你可以像这样创建一个接口(interface)并公开base presenter:
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 的类现在可以使用接口(interface)而不是直接使用 BaseView。您也可以公开需要在其中使用的任何其他基础服务。
关于c# - 设计以避免派生类中的类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2567957/