2010-05-04 1 views
3

Я хочу иметь абстрактный базовый класс для некоторых моих пользовательских UserControl. Причина очевидна: у них есть общие свойства и методы (основная реализация некоторых элементов интерфейса на самом деле), и я хочу реализовать их только один раз.Visual Studio: создайте класс UserControl, который происходит из абстрактного базового класса

Я сделал это, определив свой абстрактный базовый класс:

public abstract class ViewBase : UserControl, ISomeInterface 

Тогда я пошел к реализации одного из моих взглядов, как обычно, с дизайнером:

public partial class SpecialView : UserControl //all OK 

До здесь все Это хорошо. Теперь я заменяю вывод моего SpecialView класса с абстрактным базовым классом:

public partial class SpecialView : ViewBase //disrupts the designer 

Теперь дизайнер в Visual Studio 2008 больше не будет работать, заявив: The designer must create an instance of type 'ViewBase' but it cannot because the type is declared as abstract.

Как можно обойти это? Я просто не хочу, чтобы один и тот же код был скопирован для всех этих представлений.

Info: есть вопрос question with virtual methods, вместо абстрактных классов, но для меня нет подходящего решения.

ответ

2

Вместо того, чтобы использовать абстрактный класс, можно отметить функции виртуальных и переопределить их в наследуемых классах

+0

?? На самом деле, я не хочу переопределять, я хочу иметь реализацию, которую я могу наследовать. Могу ли я иметь виртуальный метод в базовом классе, который имеет реализацию? – Marcel

+0

В конце концов, я сделал, как предложил. – Marcel

+0

@Moe Могу ли я иметь виртуальный метод в базовом классе, который имеет реализацию? Виртуальные методы могут иметь реализации, которые можно переопределить. Почему вы выбрали абстрактную базу, если не было абстрактных/виртуальных методов? В этом случае использование не абстрактной базы просто отлично. Единственное, что вы теряете, это то, что вы * можете * создать экземпляр базы в этом случае; используя ABC, вы не сможете. – MPavlak

0

Попробуйте это решение от Urban Potato, который работал для меня, с strange side effect, что я никогда не объяснял, и никогда не получалось хорошего обходного пути. Может быть, вам повезет и не будет иметь такой побочный эффект!

0

Можно утверждать, что не имеет смысла с точки зрения философии дизайна ожидать, что сможет работать с абстрактным контролем в Дизайнере. Абстрактный класс имеет тенденцию моделировать тип объекта, для которого просто зная, что это «X», не описывает его адекватно - нет такой вещи, как абстрактная птица или автомобиль, это всегда особый тип птицы или автомобиля. Если посмотреть на этот способ, если вы хотите просмотреть пользовательский элемент управления в дизайнере, то имеет, чтобы быть конкретным типом управления, а не абстрактным, в противном случае на что вы смотрите? Я понимаю, почему это раздражает, но я также могу понять, почему конструктор был закодирован таким образом.

 Смежные вопросы

  • Нет связанных вопросов^_^