Автоматически реализованное свойство в VB.NET с защищенным сеттером?

До сих пор у меня было свойство только для чтения в VB.NET, поскольку

Public ReadOnly Property Username() As String

Теперь мне нужно внести изменения в мой код, так как установщик этого свойства должен быть защищен. В С# я бы сделал:

public string Username {get; protected set;}

Но я не могу найти такого короткого и красивого решения в VB.NET. Предоставляет ли VB.NET это, а я об этом не знаю? Или мне нужно написать так много кода, чтобы он выглядел немного уродливее?

Public Property Username() As String
    Get
        Return m_Username
    End Get
    Protected Set
        m_Username = Value
    End Set
End Property
Private m_Username As String

Мой класс будет таким грязным, если у меня будет 20 свойств и я настрою их так.


person Imad    schedule 07.06.2017    source источник


Ответы (2)


К сожалению, такого сокращенного синтаксиса в VB нет. См. также: https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/procedures/auto-implemented-properties

person Craig    schedule 07.06.2017

Вы можете сделать свой код немного короче, сделав это следующим образом:

Protected _username As String

Public ReadOnly Property Username As String
    Get
        Return _username
    End Get
End Property

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

person Esko    schedule 07.06.2017
comment
К сожалению, это не позволит использовать дополнительную логику в установщике свойств, например, для вызова событий INotifyPropertyChanged. Можно реализовать отдельный метод, предназначенный для установки значения, который также обрабатывает эту логику, но тогда метод может быть объявлен как защищенный, а _username вместо этого может быть закрытым. - person Knowledge Cube; 07.06.2017
comment
Автор спрашивал, что такое короткая рука VB для тривиальной нотации свойств С#, в установщике или геттере нет логики, просто ограничения области. Этот ответ в настоящее время является самым близким, который вы можете получить. - person Darren Stults; 10.02.2021