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;}
}
}
Предположим, что мне нужно свойство IBasePresenter в BaseView. Теперь это свойство наследуется JobView и ActivityView, но если мне нужна ссылка на объект IJobViewPresenter в этих производных классах, тогда мне нужно ввести свойство cast IBasePresenter для IJobViewPresenter или IActivityPresenter (чего я хочу избежать) или создать JobViewPresenter и ActivityViewPresenter на производных классах (как показано выше).Дизайн, чтобы избежать литья типов в производных классах?
Я хочу избежать литья типов в производных классах и по-прежнему иметь ссылку на IJobViewPresenter или IActivityViewPresenter и все еще иметь IBasePresenter в BaseView.
Есть ли способ, которым я могу это достичь?
Вы можете, но нет необходимости, поскольку интерфейсы наследуются друг от друга. –
@Steven, Не могли бы вы пояснить, что вы подразумеваете под этим? Я считаю, что вопрос заключался в том, как разоблачить интерфейс в его производной форме, так что явно ясно, что Presenter для JobView всегда является IJobViewPresenter (и не просто литой в предположении, что правильное использование всегда будет поддерживать его в IJobViewPresenter.) –
Хорошее решение ... Мне это нравится .. Thanks – Deepak