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


Автоматически реализуемые свойства (Visual Basic)

Автоматически реализуемые свойства предоставляют возможность быстро задать свойство класса без необходимости написания кода для свойств Get и Set. При написании кода для автоматически реализуемого свойства компилятор Visual Basic, в дополнение к связанным процедурам Get и Set, автоматически создает закрытое поле для хранения переменной свойства.

Автоматически реализуемое свойство, включая заданное по умолчанию значение, может быть объявлено в одной строке. В следующем примере демонстрируются три объявления свойств.

Public Property Name As String
Public Property Owner As String = "DefaultName"
Public Property Items As New List(Of String) From {"M", "T", "W"}
Public Property ID As New Guid()

Автоматически реализуемое свойство эквивалентно свойству, значение которого хранится в закрытом поле. В следующем примере кода показано автоматически реализуемое свойство.

Property Prop2 As String = "Empty"

В следующем примере кода показан эквивалентный код для предыдущего примера автоматически реализуемого свойства.

Private _Prop2 As String = "Empty"
Property Prop2 As String
    Get
        Return _Prop2
    End Get
    Set(ByVal value As String)
        _Prop2 = value
    End Set
End Property

Резервное поле

При объявлении автоматически реализуемого свойства Visual Basic автоматически создает скрытое закрытое поле, именуемое резервным полем, которое используется для хранения значения свойства. Имя резервного поля представляет собой имя автоматически реализуемого свойства, которому предшествует знак подчеркивания (_). Например, если объявляется автоматически реализуемое свойство с именем ID, то резервное поле получит имя _ID. Добавление члена пользовательского класса, также имеющего имя _ID, приведет к конфликту имен, и Visual Basic выведет сообщение об ошибке компилятора.

Резервное поле имеет также следующие характеристики:

  • Модификатор доступа для резервного поля — всегда Private, даже когда для самого поля используется иной уровень доступа, например Public.

  • Если свойство помечено как Shared, то и резервное поле также является общим.

  • Указанные для свойства атрибуты не распространяются на резервное поле.

  • Доступ к резервному полю возможен из кода внутри класса или из средств отладки, например окна контрольных значений. Вместе с тем резервное поле не отображается в списке предположений IntelliSense.

Инициализация автоматически реализуемого свойства

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

Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)

Нельзя инициализировать автоматически реализуемое свойство, являющееся членом Interface или помеченное как MustOverride.

Когда автоматически реализуемое свойство объявляется как член Structure, то инициализировать его можно, если свойство помечено как Shared.

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

Property Grades As Integer() = {90, 73}
Property Temperatures As Integer() = New Integer() {68, 54, 71}

Определения свойств, для которых требуется стандартный синтаксис

Автоматически реализуемые свойства удобны и поддерживают множество сценариев программирования. Вместе с тем в некоторых случаях вместо автоматически реализуемого свойства необходимо использовать свойство со стандартным или развернутым синтаксисом.

Развернутый синтаксис определений свойств применяется для выполнения следующих действий:

  • Добавление кода к процедуре Get или Set свойства, например для проверки входящих значений в процедуре Set. Так, может быть полезно удостовериться, что строка, представляющая номер телефона, содержит необходимое количество цифр, прежде чем задать значение свойства.

  • Указание другого уровня доступа для процедуры Get или Set. Например, может потребоваться задать для процедуры Set уровень Private, а для процедуры Get — уровень Public.

  • Создание свойств, объявленных как WriteOnly или ReadOnly.

  • Использование параметризованных свойств (включая свойства Default). Чтобы задать параметр для свойства или указать дополнительные параметры для процедуры Set, необходимо объявить развернутое свойство.

  • Разместите атрибут в резервном поле или измените уровень доступа резервного поля.

  • Снабжение резервного поля XML-комментариями.

Развертывание автоматически реализуемого свойства

Если требуется преобразовать автоматически реализуемое свойство в развернутое свойство, содержащее процедуру Get или Set, редактор кода Visual Basic может автоматически создать для свойства процедуры Get и Set, а также оператор End Property. Для создания кода следует поместить курсор на пустую строку после оператора Property, ввести G (для Get) или S (для Set) и нажать клавишу ВВОД. Редактор кода Visual Basic автоматически создаст процедуру Get или Set для свойств, доступных только для чтения или только на запись, при нажатии клавиши ВВОД в конце оператора Property.

См. также

Задачи

Практическое руководство. Объявление и вызов свойства по умолчанию в Visual Basic

Практическое руководство. Объявление свойства со смешанным уровнем доступа (Visual Basic)

Ссылки

Оператор Property

ReadOnly (Visual Basic)

WriteOnly (Visual Basic)

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

Объекты и классы Visual Basic

Журнал изменений

Дата

Журнал

Причина

Май 2010

Добавление примечание об уровнях доступа резервного поля.

Обратная связь от клиента.