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


* При перепечатке материалов ссылка на 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

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

Наборы
Параметры компоновки установочной программы
Объект DataRelation
Структуры CTS
Распространение приложений через Интернет
Добавление элементов управления на панель Toolbox
Создание экземпляров элементов управления ActiveX
Члены типов CTS
Towards Cleaner Code II, a C# GUI Invoke/Async Helper
Автоматизация разработки
Установка порядка передачи фокуса при нажатии клавиши Tab
Назначение значка элементу управления
Установка сборок в GAC
Перегрузка операторов в Visual C#
Защита приложений
| .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


     



Rambler's Top100

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

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