Сокращение от Interlocked.Обмен в установщике свойств

#.net #vb.net #decompiling #decompiler #shorthand

#.net #vb.net #декомпиляция #декомпилятор #сокращение

Вопрос:

У меня есть следующий простой фрагмент объявления переменной класса с, сгенерированный декомпилятором

 Friend Class Project
    Private _Status As Integer
    Public Property Status As Integer
        Get
            Return Me._Status
        End Get
        Set(ByVal value As Integer)
            Interlocked.Exchange(Me._Status, value)
        End Set
    End Property
End Class
  

Существует ли какая-либо сокращенная форма для этого объявления.
На самом деле это используется внутренним backgroundworker внутри класса и доступно извне другим классам.

Чтобы было ясно, в чем смысл сокращения. Я приведу пример: следующий gode является сокращением

 SyncLock lock
    z = 1
End SyncLock
  

для следующего подробного кода

 Dim obj As Object = Me.lock
ObjectFlowControl.CheckForSyncLockOnValueType(obj)
Dim flag As Boolean = False
Try
    Monitor.Enter(obj, flag)
    Me.z = 1
Finally
    If (flag) Then
        Monitor.[Exit](obj)
    End If
End Try
  

Ответ №1:

Как упоминал Холтерман, единственное преимущество, которое Interlocked.Exchange предоставляет, — это барьер памяти. ( Int32 назначения в .NET всегда являются атомарными, и вы отбрасываете возвращаемое значение.)

Если исходный код был написан на C #, возможно, что он изначально содержал volatile ключевое слово, которое также создает барьеры памяти.

 private volatile int _Status;
public int Status
{
    get { return _Status; }
    set { _Status = value; }
}
  

Однако это должно было привести к тому, что в получателе также был сгенерирован барьер памяти.

Ответ №2:

Interlocked.Exchange(Me._Status, value)

  1. Это уже однострочник, как вы думаете, насколько короче он может стать?

  2. Единственным преимуществом использования Exchange (Int32) является возникающий при этом барьер памяти. Поэтому, когда вам это больше понравится, вы можете заменить его своим образцом SyncLock для того же эффекта.

Комментарии:

1. Но SyncLock декомпилируется на другой синтаксис, как указано в вопросе.

2. Итак, декомпиляторы делают выбор.