Вибір між класом, компонентом і елементом управління

Важливою особливістю компонентів в .NET Framework є те, що вони підтримують проектування. Це означає, що клас-компонент може бути використаний в середовищі швидкої розробки додатків, наприклад в Visual Studio. Компонент можна додати на панель елементів Visual Studio або перетягнути на форму. З ним також можна працювати на поверхні розробки. Зверніть увагу, що базова підтримка типів IComponent під час розробки вбудована в середу .NET Framework; розробникам компонентів не потрібно докладати додаткові зусилля, щоб скористатися перевагами базових функцій, підтримуваних під час розробки.

Компонент може бути розташований (розміщений) в контейнері (поняття буде визначено пізніше в цьому розділі). Якщо компонент розміщений на підкладці, він взаємодіє з контейнером через цю підкладку (поняття буде визначено пізніше в цьому розділі), а також може запитувати і отримувати через неї служби свого контейнера. Щоб забезпечити звільнення ресурсів в разі знищення контейнера, контейнер повинен реалізовувати інтерфейс IDisposable. У своїй реалізації методу Dispose контейнер повинен звільняти всі використовувані їм ресурси, а також викликати метод Dispose для всіх розміщених в ньому компонентів.

Вкладеність забезпечується на логічному рівні і може не мати візуального представлення. Контейнер середнього рівня, що містить компоненти бази даних, - приклад вкладеності, що не має візуального представлення. Візуальна вкладеність спостерігається в конструкторі Windows Forms і конструкторі Web Forms середовища Visual Studio. Візуальна поверхню розробки - це контейнер, що містить компонент форми (в разі конструктора Web Forms - компонент сторінки).

Компоненти можуть підтримувати або не підтримувати віддалене взаємодія. Компоненти, які його підтримують, маршаліруются за посиланням або за значенням. Процес маршалинга включає в себе пересилання об'єктів за кордону таких сутностей, як Домени додатків (полегшені процеси), процеси і навіть машини. Якщо маршалинга виконується за посиланням, створюється проксі, який здійснює віддалені звернення до об'єкта. Якщо маршалинга виконується за значенням, серіалізовані копія об'єкта надсилається через відповідну кордон.

Маршалинга підтримують віддалене взаємодія компонентів, які інкапсулюють системні ресурси, мають великий розмір або існують як окремі екземпляри, повинен виконуватися за посиланням. Базовим класом компонентів, маршалинга яких виконується за посиланням, є Component. Цей базовий клас реалізує інтерфейс IComponent і успадковує від класу MarshalByRefObject. Багато компонентів бібліотеки класів .NET Framework походять від класу Component. включаючи Control (базовий клас для елементів управління Windows Forms), WebService (базовий клас для веб-служб XML, створених з використанням ASP.NET) і Timer (клас, який створює повторювані події).

Маршалинга підтримують віддалене взаємодія компонентів, які просто зберігають стан, повинен виконуватися за значенням. Базовим класом компонентів, маршалинга яких виконується за значенням, є MarshalByValueComponent. Цей базовий клас реалізує інтерфейс IComponent і успадковує від класу Object. Тільки деякі компоненти бібліотеки класів .NET Framework походять від класу MarshalByValueComponent. Всі такі компоненти належати простору імен System.Data (DataColumn. DataSet. DataTable. DataView і DataViewManager).

Базовими класами для об'єктів, маршаліруемихих за значенням і за посиланням, є Object і MarshalByRefObject відповідно, однак імена відповідних їм похідних класів - MarshalByValueComponent і Component. Логіка іменування полягає в тому, що частіше використовується тип має більш просте ім'я.

Якщо віддалене взаємодія компоненту не передбачається, не слід успадковувати його від базової реалізації класу Component; замість цього слід безпосередньо реалізувати інтерфейс IComponent.

Схожі статті