Уродливое наследование в C # - PullRequest
       15

Уродливое наследование в C #

2 голосов
/ 25 октября 2011

у меня

public class ViewBaseBase : UserControl

Тогда у меня есть

public class ViewBase<TPresenter, TIView> : ViewBaseBase

Что приводит, конечно, к

public class AView : ViewBase<ConcretePresenter, IView>

Похоже на то, что я хотел бы получить не универсальный способ доступа к ViewBase полиморфно, не зная TPresenter, TIView.

Это кому-нибудь кажется "неправильным"? Я не знаю, это работает, это, кажется, не вызывает у меня проблем, но кажется "неправильным", как-то. Возможно, это имя ViewBaseBase, я мог бы вместо этого использовать интерфейс, но на самом деле мне очень нравится иметь наследование UserControl на этом уровне, поскольку все ViewBase должны быть UserControl ...

Ответы [ 2 ]

4 голосов
/ 25 октября 2011

Вы мало что можете сделать, если у вас нет неуниверсального абсолютного базового класса, если вы хотите получить полиморфный доступ к этому материалу. Вы также сказали, что каждый ViewBase должен быть UserControl, но это не значит, что вы не можете использовать интерфейсы. Учтите это:

public interface IViewBase
{
}


public abstract class ViewBase<IPresneter, TIView> : UserControl
                                                   , IViewBase
{
}


public class AView : ViewBase<ConcretePresenter, IView>
{
}

AView теперь является UserControl и IViewBase. Я лично думаю, что это чище.

2 голосов
/ 25 октября 2011
public class ViewBaseBase : UserControl

Если какой-либо ViewBaseBase должен быть UserControl, то это предпочтительнее, чем интерфейс, поскольку он обеспечивает это.Если ViewBaseBase предоставляет код, а не только сигнатуры (все является абстрактным), то это единственный возможный способ сделать что-то без каких-либо действительно сложных сверток, потому что C # не обеспечивает множественное наследование.Если ViewBaseBase предоставляет только сигнатуры (все абстрактно) и что-то может быть ViewBaseBase, не являясь UserControl (даже если не в вашем проекте), то я бы рассмотрел интерфейс.

Во многом та же логикапоследующие уровни иерархии.

На всей иерархии это мешает в любом случае?Если это так, то, возможно, стоит рефакторинг тем или иным образом, но если это не так, я бы даже не задумывался об этом.В конце концов, цель иерархии классов состоит в том, чтобы облегчить жизнь разработчикам, поэтому решающее значение имеет то, делает ли это это или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...