Csharp/C#教程:设计以避免派生类中的类型转换?分享


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

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和ActivityViewinheritance的,但是如果我需要在这些派生类中引用IJobViewPresenter对象,那么我需要输入转换IBasePresenter属性到IJobViewPresenter或IActivityPresenter(我想避免)或者在派生类上创建JobViewPresenter和ActivityViewPresenter(如如上所示)。

我想避免派生类中的类型转换,仍然引用IJobViewPresenter或IActivityViewPresenter,并且在BaseView中仍然有IBasePresenter。

有没有办法实现它?

你可以这样做:

  public class BaseView where TPresenter: IBasePresenter { TPresenter Presenter { get; set; } } public class JobView: BaseView { } 

如果您有需要引用BaseView的代码,则可以创建一个接口并公开基本演示者,如下所示:

  public interface IBaseView { IBasePresenter BasePresenter { get; } } public class BaseView : IBaseView where TPresenter: IBasePresenter { TPresenter Presenter { get; set; } IBasePresenter IBaseView.BasePresenter { get { return Presenter; } } } 

需要访问BaseView的类现在可以直接使用接口而不是BaseView。 您也可以公开需要在其中使用的任何其他基本服务。

这是多态性的工作。

上述就是C#学习教程:设计以避免派生类中的类型转换?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 public interface IBasePresenter { } public interface IJobViewPresenter : IBasePresenter { } public interface IActivityViewPresenter : IBasePresenter { } public class BaseView : IBasePresenter { } public class JobView : BaseView, IJobViewPresenter { } public class ActivityView : BaseView, IActivityViewPresenter { } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/950182.html

(0)
上一篇 2021年11月18日
下一篇 2021年11月18日

精彩推荐