gpt4 book ai didi

c# - 设计以避免派生类中的类型转换?

转载 作者:太空狗 更新时间:2023-10-29 23:19:11 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com