Главная » C#, Компоненты » Выбор базового класса

0

Для того чтобы более четко понимать, как правильно выбрать базовый класс для нового компонента, MSDN формулирует следующие правила, О Если класс использует некоторые внешние ресурсы (например, файлы, порты и т, п.), но не будет помещаться на форму во время разработки, достаточно реализовать интерфейс system. iDisposabie. Разумеется, такой класс не будет компонентом, но если вы не собираетесь помещать его на форму, то этого и не требуется.

?          Если класс будет помещаться на форму во время разработки, реализуйте интерфейс System. ComponentModel. IComponent ИЛИ наследуйте класс, его реализующий. Следует отметить, что интерфейс icompoent является расширением интерфейса IDisposable.

?          Если класс используется во время разработки формы и должен передаваться по ссылке (marshaled by rerefence), осуществляйте наследование от класса System. ComponentModel. Component.

?          Если класс используется во время разработки формы и должен передаваться по значению (marshaled by value), выполняйте наследование от класса System.ComponentModel .MarslialByVaiueComponent. Таких компонентов в .NET немного. Это, например, классы из пространства имен System. Data (DataSet, DataView).

?          Если класс используется во время разработки формы, но вы не хотите наследоваться НИ от класса System. ComponentModel .Component, НИ ОТ класса System. ComponentModel. Component, просто реализуйте интерфейс icomponent. Это не очень просто, но возможно.

?          Если ваш класс имеет пользовательский интерфейс (другими словами, является визуальным), то он должен быть наследован либо от класса System.Windows.Forms.Control (ИЛИ ОТ класса System.Web.UI.Control, если это Web-форма), либо от одного из наследников, наиболее подходящих по фу н кционал ьности.

?          Если класс не применяется во время разработки и не использует внешних ресурсов, то не требуется реализовывать ни интерфейс icompoent, пи интерфейс IDisposable.

Замечу, что если для невизуальных компонентов есть некое подобие свободы выбора базового компонента, то для визуальных компонентов практически наверняка придется явно или не явно организовывать наследование от класса Control. Реализовывать всю функциональность этого класса вручную не имеет смысла. Разумеется, при расширении функциональности некого элемента управления в качестве базового следует использовать именно его, как, па- пример, мы это делали с классом Label. На рис. 4.4 показаны некоторые классы, наследованные от класса control-.

?          КЛаСС System. Windows . Forms . But tonBase ЯВЛЯе’ГСЯ базовым КЛаССОМ ДЛЯ КНОПОК;

?          класс system.windows.Forms.DataGrld представляет собой класс для отображения данных в виде таблицы;

?          компонент System.windows.Forms.GroupBox позволяет объединять элементы в группу, имеющую имя и рамку;

?          компонент System.windows. Forms. Label отображает метку (этим компонентом я уже пользовался при построении примеров);

?          компонент System.windows. Forms.Listcontrol является базовым элементом для представления списков (например, элементов ListBox и сотпЬоВох);

?          компонент System.windows. Forms.Listview предназначен для отображения списков в различных режимах (как, например, список файлов в Проводнике Windows).

Разумеется, это не все компоненты и элементы управления. Их очень и очень много. Я не хочу подробно останавливаться на описании стандартных ком- понетов и элементов управления. Такое описание можно найти практически в любой книге, посвященной WinForms. Наша же цель— режим разработки, и мы пойдем дальше…

Рис. 4.4. Иерархия классов

Литература:

Агуров П. В. C#. Разработка компонентов в MS Visual Studio 2005/2008. – СПб.: БХВ-Петербург, 2008. — 480 е.: ил.

По теме:

  • Комментарии