Совместное использование методов между базовыми классами для LinkButton, ImageButton и Button - PullRequest
1 голос
/ 30 ноября 2011

Итак, я хочу добавить JavaScript к событию onclick нескольких элементов управления на моем веб-сайте.Это все классы Button, LinkButton и ImageButton.

Я создал класс с именем CustomLinkButton, который наследуется от LinkButton и отлично работает.Он использует метод OnLoad и имеет некоторые свойства, которые используют ViewState.Отлично.Теперь я хотел бы использовать этот код для Button и ImageButton.

Проблема в том, что все эти три класса наследуются от System.Web.UI.WebControls.WebControl, в котором отсутствуют некоторые важные методы и свойства, общиевсе эти три элемента управления.

Так что же делать?Дублирование кода во всех классах означает плохую ремонтопригодность.Я попытался создать другой класс и написать там методы, но столкнулся с той же проблемой - у меня не может быть метода, который принимает все три типа, но я не могу написать универсальный метод с более чем одним ограничением.

Идеи?Или мне просто нужно написать три класса с дублированным кодом?Я сделал много поисков и не могу найти решение.Это может относиться ко многим ситуациям, поэтому я спрашиваю.Спасибо, ребята.

РЕДАКТИРОВАТЬ: Примеры соответствующих свойств, которыми они делятся, являются CausesValidation и ValidationGroup.

1 Ответ

1 голос
/ 30 ноября 2011

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

Можно подумать, LinkButton и ImageButton должны наследоваться от Button, но это всего лишь семантика. Вы должны думать о них с точки зрения того, что они отображают, то есть HTML:

  • asp: кнопка <input type="button">
  • asp: кнопка ссылки <a>
  • asp: кнопка изображения <input type="image">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...