Свойство ReadOnly или свойство с частным набором, которое я должен использовать в vb.net? - PullRequest
8 голосов
/ 26 января 2012

Мне нравятся автоматические свойства .NET, в C # так просто объявить свойство readonly, объявив его set раздел как private следующим образом:

public String Name{ get; private set; }

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

Private _Name as String
Public ReadOnly Property Name as String
   Get
      return _Name
   End Get
End Property

Или:

Private _Name as String
Public Property Name as String
   Get
      return _Name
   End Get
   Private Set(value as String)
      _Name = value
   End Set
End Property

Чторазница между этими объявлениями в VB.NET, какая из них предпочтительнее и почему?

Редактировать

Какая из них вообще повлияет на время компиляции, время выполнения или производительность?

Ответы [ 4 ]

6 голосов
/ 26 января 2012

В случае ReadOnly только те, кто имеет доступ к базовой переменной, могут изменять базовое значение (например, элементы в том же классе), непосредственно применяя такое изменение. В последнем случае Private Set - это во многом то же самое - элементы в области видимости класса могут изменить базовое значение, но могут сделать это с помощью свойства.

Какой из них предпочтителен, является косвенным: одним из преимуществ свойств является то, что вы, как и метод, можете задействовать дальнейшую реализацию при применении изменения (хотя следует избегать побочных эффектов, вы можете «проверить» и принять исключение, для пример). Если при установке значения есть всегда что-то еще, что тесно связано с установкой значения, вы можете сделать это в этом установщике свойств, в отличие от необходимости кодировать эту реализацию везде, где вы делаете set.

1 голос
/ 26 января 2012

первый блок только позволит вам получить значение имени.Вы не можете установить Имя.

второй блок позволяет вам установить значение имени из класса.пример:

Me.Name = "new value"

Я бы выбрал вариант 1, потому что второй вариант многословен без предоставления какого-либо реального значения.

0 голосов
/ 29 сентября 2018

Обратите внимание, что если вы используете компиляторы Roslyn (.NET 4.6 и выше, VS.NET 2015+), то даже если используется короткая форма VB.NET

Public ReadOnly Property Name as String

без закрытой переменнойконструкторам для класса все еще разрешено присваивать значения свойству readonly.Вы даже можете передать свойство другим функциям в качестве параметра ByRef.

Public Class SomeClass
    Public ReadOnly Property Name1 As String
    Public ReadOnly Property Name2 As String
    Public Sub New()
        PrivSub(Name1)
        Name2 = Name1 & " is now"
    End Sub
    Private Sub PrivSub(ByRef n As String)
        n = System.DateTime.UtcNow.ToLongDateString()
    End Sub
End Class

DotNetFiddle этого класса

0 голосов
/ 26 января 2012

Первое объявление свойства ReadOnly делает его таким, что свойство вообще не может быть изменено.Второй Private Set позволяет изменять свойство в классе, с которым вы работаете Me.Name = "str".

В обоих случаях базовое значение все еще можно изменить в классе с помощью _Name = "str".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...