Автоматически реализованные свойства (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
. Например, вам может потребоваться сделать процедуруSet
Private
, а процедуруGet
—Public
.Создать свойства типа
WriteOnly
.Использовать параметризованные свойства (включая
Default
). Чтобы задать параметр для свойства или указать дополнительные параметры, требуется объявить развернутое свойство процедурыSet
.Добавить атрибут в резервное поле или изменить уровень доступа резервного поля.
Добавить XML-комментарии для резервного поля.
Расширение автоматически реализованного свойства
Если необходимо преобразовать автоматически реализованное свойство в развернутое свойство, содержащее или Get
Set
процедуру, редактор кода Visual Basic может автоматически создавать Get
процедуры и Set
End Property
инструкции для свойства. Код создается, если курсор помещается в пустую строку после Property
инструкции, введите G
(для Get
) или S
(для Set
) и нажмите клавишу ВВОД. Редактор кода Visual Basic автоматически создает процедуру Get
или Set
для свойств только для чтения и только для записи при нажатии клавиши ВВОД после оператора Property
.