Я хочу иметь абстрактный базовый класс для некоторых моих пользовательских 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, вместо абстрактных классов, но для меня нет подходящего решения.
?? На самом деле, я не хочу переопределять, я хочу иметь реализацию, которую я могу наследовать. Могу ли я иметь виртуальный метод в базовом классе, который имеет реализацию? – Marcel
В конце концов, я сделал, как предложил. – Marcel
@Moe Могу ли я иметь виртуальный метод в базовом классе, который имеет реализацию? Виртуальные методы могут иметь реализации, которые можно переопределить. Почему вы выбрали абстрактную базу, если не было абстрактных/виртуальных методов? В этом случае использование не абстрактной базы просто отлично. Единственное, что вы теряете, это то, что вы * можете * создать экземпляр базы в этом случае; используя ABC, вы не сможете. – MPavlak