Имя Пароль
Зарегистрироваться


* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Свойства-наборы
8 февраля 2009

Если объект должен предоставлять доступ к набору однотипных элементов, число
которых заранее неизвестно, можно сделать этот набор доступным через свойство
объекта. Сделав набор объектов доступным через свойство класса, вы сможете упра-
влять доступом к этим объектам и проверять значения, которые записываются в
это свойство.
Реализуют свойство- набор по-разному. Выбор способа зависит от необходимой
функциональности. Простое свойство-набор возвращает набор объектов, при этом
клиент может добавлять и удалять элементы из набора, а также вызывать любые
методы набора. Чтобы запретить клиенту запись в свойство- набор новых экземп-
ляров этого класса набора, сделайте это свойство доступным только для чтения -
это не препятствует модификации объектов набора посредством его методов, Вот
пример простого свойства-набора:
Visual Basic .NET
Private Readonly mWidgets As New System. Collections. ArrayListO
Public Readonly Property WidgetsO As System. Collections. ArrayList
Get
Return mWidgets
End Get
End Property
Visual C#
private readonly System. Collections. ArrayList mWidgets = new
System. Col lections. ArrayListO;
public System. Collections. ArrayList Widgets
{
':''
{
return mWidgets;
}
!
Хотя этот способ прост и позволяет получать доступ к элементам набора, у него
есть один существенный недостаток. Большинство наборов, представленных клас-
сами из пространства имен System. Collections, прини мает и возвращает свои элемен-
ты в виде объектов типа Object. Это означает, что можно добавить в набор (или уда-
лить из него) объект любого типа. Иными словами, при добавлении к набору новых
элементов проверка типов не выполняется, а возвращаемые элементы набора необ-
ходимо явно приводить к нужному типу. Впрочем, если свойство должно работать с
разнородными объектами, этот подход приемлем.
Для создания простого свойства-набора достаточно реализовать доступное толь-
ко для чтения свойство, возвращающее нужный набор.
Чтобы получить свойство-набор, более устойчивое к ошибкам, следует сделать
набор доступным через свойство и написать код, выполняющий явное преобразо-
вание типов и проверку значений, присваиваемых свойству. Это позволит получать
из набора элементы с заданным индексом и проверять типы помещаемых в него
объектов. Такое свойство в Visual Basic .NET реализуют в виде параметризованного
свойства, например, так:
Visual Basic .NET
Private mWidgets as New System.Collections,ArrayListO
Public Property Widget(I As Integer) As Widget
Get
Return CType(mWidgets(I), Widget)
End Get
Set(ByVal Value As Widget)
mWidgets(I) = Value
End Set
End Property
Visual C# не поддерживает параметризованные свойства, поэтому при исполь-
зовании этого языка такие свойства реализуют как индексаторы либо в виде пары
специальных методов (см. пример кода далее).
Visual C#
private System.Collections,ArrayList mWidgets = new
System. Col lections. ArrayListO;
public Widget GetWidget{int I)
I
return (Widget)mWidgets[I];
)
public void SetWidget(int I, Widget Wid)
{
mWidgets[I] = Wid;
!
Аналогичным образом создают строго типизированные свойства, открывающие
доступ к набору однотипных элементов, однако этот способ не лишен недостатков.
Например, при его использовании нельзя применять оператор For Each...Next (foreach)
для перебора элементов набора в цикле, а для всех методов данного свойства,
которые должны быть доступными клиенту, потребуется написать оболочку. Нако-
нец, в этом случае невозможны некоторые отступления от правил синтаксиса, раз-
решенные в Visual C#.
>• Как создать свойство-набор с проверкой типов
• в Visual Basic .NET для этого следует создать параметризированное свойство, воз-
вращающее элемент закрытого (private) набора, заданный индексом, и написать
код, преобразующий возвращаемый объект в требуемый тип при помощи функ-
ции СТуре;
• в Visual C# для этого необходимо создать пару методов, получающих и устанав-
ливающих элемент закрытого набора, заданный индексом, причем метод ^дол-
жен явно приводить возвращаемый объект к требуемому типу.
Чтобы создать свойство с еще более строгой реализацией, можно объявить соб-
ственный класс строго типизированного набора на основе класса System. Collections.
Collection Base. Этот класс предоставляет основную функциональность, необхо-
димую для обслуживания наборов, позволяя создавать собственную реализацию для
свойства item. Созданный таким образом строго типизированный набор удается сде-
лать доступным непосредственно через свойство (этот прием проиллюстрирован в
приведенном выше примере); при этом вся функциональность наборов останется
доступной. Помимо приема только элементов заданного типа, такой набор поддер-
живает любую другую необходимую функциональность. Наследование рассматри-
вается в деталях в главе 4, там же вам предлагается упражнение с примером, иллю-
стрирующим создание строго типизированного набора.
Резюме
• Свойства открывают доступ к членам класса (переменным и объектам), позво-
ляют создавать код, проверяющий значение свойства при обращении к нему и
выполняющий ряд других действий. Свойства, доступные только для чтения или
только для записи, позволяют ограничить доступ клиента к свойствам чтением
или записью. Visual Basic .NET также позволяет создавать свойства, принимаю-
щие параметры и возвращающие диапазоны значений.
• К значению свойства по умолчанию разрешено обращаться, не указывая имя
этого свойства. Такие свойства должны быть параметризированными. В Visual
С# эквивалентом свойств по умолчанию являются индексаторы.
• Свойства-наборы открывают доступ к группам объектов, поддерживаемых клас-
сом. Предусмотрено несколько способов реализации подобных свойств, каждый
из них обладает своими достоинствами и недостатками:
• простейшее свойство-набор, возвращающее объект-набор из закрытой пере-
менной; этот способ наименее устойчив к ошибкам;
• свойство, возвращающее элемент закрытого набора с заданным индексом.
Этот вариант более устойчив к ошибкам, но менее гибок;
• класс строго типизированного набора. Применение этого способа требует от
разработчика наибольших усилий, обеспечивая взамен доступ к строго типи-
зированным наборам. Этот способ максимально устойчив к ошибкам.

Теги: .NET

Статьи по теме:

Установка точек прерывания
Создание обработчиков событий элементов управления
Редактор реестра
Генерация исключений
Применение объектов DataSet и обновление данных
Интерфейсы как средство достижения полиморфизма
Обзор .NET Framework
Применение переменных ссылочных типов
Рекурсия
Декларативная защита, основанная на ролях
.NET Framework и языки программирования
Запись трассировочных данных в журнал событий
Общие (статические) члены
Языки программирования .NET
Отображение сообщений об ошибках
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Свойства-наборы. Регион сайта: Москва и Санкт-Петербург