Автоматически реализуемые свойства (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
.
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по