Поделиться через


Разработка индексированных свойств

Индексированные свойства позволяют осуществить доступ к группам элементов подобно доступу к массиву (например, к символам в строке или битам в BitArray). Индексированные свойства, называемые индексаторами или свойствами по умолчанию, отличаются от обычных свойств тем, что они принимают параметры, указывающие, к какому элементу в группе следует осуществить доступ. Реализация индексированного свойства должна быть как можно более простой, так как индексаторы часто используются в циклах. Следующие рекомендации помогут правильно разработать индексаторы, содержащиеся в типах.

Рекомендуется использовать индексаторы для предоставления доступа к данным, хранящимся во внутреннем массиве.

Рекомендуется обеспечить индексаторы для типов, представляющих коллекции элементов.

Избегайте использования индексированных свойств с более чем одним параметром.

Если индексатор требует нескольких параметров, проверьте, действительно ли свойство обеспечивает доступ к логической коллекции. В противном случае используйте методы; выберите имя метода, начинающееся с Get или Set.

Избегайте использования индексаторов с параметрами типов, отличных от System.Int32, System.Int64, System.String, System.Object, перечислений или параметров базового типа.

Если при проектировании требуются параметры других типов, проверьте, действительно ли член обеспечивает доступ к логической коллекции. В противном случае используйте методы; выберите имя метода, начинающееся с Get или Set.

Используйте имя Item для индексированных свойств, если только нет явно лучшего имени (например, см. свойство System.String.Chars(System.Int32)).

Атрибут IndexerNameAttribute можно использовать при создании имени индексатора.

Не следует одновременно предоставлять и индексатор, и семантически эквивалентный метод.

В следующем примере кода индексатор следует заменить на метод.

<System.Runtime.CompilerServices.IndexerNameAttribute("PositionsHeld")> _
    Public Property Item (skillId as Integer) as JobInfoCollection


...


Public Function GetPositions(skillId as Integer, _
    minJobLevel as Integer) _
   as JobInfoCollection
[System.Runtime.CompilerServices.IndexerNameAttribute("PositionsHeld")]
    public JobInfoCollection this [int skillId]


...


public JobInfoCollection GetPositions(int skillId, int minJobLevel)
[System::Runtime::CompilerServices::IndexerNameAttribute("PositionsHeld")]
property JobInfoCollection^ default [int]


...


JobInfoCollection^ GetPositions(int skillId, int minJobLevel)

Не предоставляйте более одного семейства перегруженных индексаторов в одном типе.

Для некоторых компиляторов, таких как C#, это правило обязательно.

Некоторые языки не поддерживают несколько наборов индексаторов для типа. Если Вы их используете, некоторые разработчики не смогут получить доступ к этим членам.

Не следует использовать нестандартные индексированные свойства.

Для некоторых компиляторов, таких как C#, это правило обязательно. Нестандартные индексированные свойства не поддерживаются ни одним языком программирования. Если Вы их используете, некоторые разработчики не смогут получить доступ к этим членам.

Охраняется авторским правом Copyright 2005 Microsoft Corporation. Все права защищены.

Фрагменты — © Addison-Wesley Corporation. Все права защищены.

Для дополнительной информации о разработке руководящих принципов, смотрите "руководства по разработке рамок: Конвенций, идиомы и шаблоны для повторного использования.NET библиотек"книга, Кшиштоф Cwalina и Брэд Абрамс, опубликованных Addison-Wesley, 2005 года.

См. также

Основные понятия

Разработка свойств

Другие ресурсы

Правила разработки членов

Руководство по разработке библиотек классов