Автоматически реализуемые свойства (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

В следующем примере кода показана реализация свойств только для чтения:

Class Customer  
   Public ReadOnly Property Tags As New List(Of String)  
   Public ReadOnly Property Name As String = ""  
   Public ReadOnly Property File As String  
  
   Sub New(file As String)  
      Me.File = file  
   End Sub  
End Class  

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

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

При объявлении автоматического реализации свойства 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. Например, вам может потребоваться сделать процедуру SetPrivate, а процедуру GetPublic.

  • Создать свойства типа WriteOnly.

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

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

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

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

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

См. также