Как перевести с C # на VB.net - PullRequest
       31

Как перевести с C # на VB.net

0 голосов
/ 12 октября 2019

Для проекта, написанного на VB.net, я хочу использовать класс PropertyChangeNotifier из этой статьи , по крайней мере, я хотел бы попробовать, если это поможет.

Так какисходный класс написан на C # Я пытался перевести этот класс на VB.net, но одну функцию я не могу скомпилировать, и я не знаю почему, может быть, вы можете помочь.

Оригинальная функцияв C #:

private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    PropertyChangeNotifier notifier = (PropertyChangeNotifier)d;
    if (notifier.ValueChanged != null)
        notifier.ValueChanged(notifier, EventArgs.Empty);
}

Мой (слегка измененный) перевод (и автоматический перевод нескольких веб-сайтов):

Private Shared Sub OnPropertyChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
    Dim notifier As PropertyChangeNotifier

    notifier = TryCast(d, PropertyChangeNotifier)
    If (notifier Is Nothing) Then
        Exit Sub
    End If

    RaiseEvent notifier.ValueChanged(notifier, EventArgs.Empty)
End Sub

Если я удаляю RaiseEvent, компилятор сообщаетмне, что ValueChanged является событием и не может быть вызван напрямую, я должен использовать RaiseEventНо когда я использую RaiseEvent, компилятор сообщает мне,

'notifier' не объявлен. Он может быть недоступен из-за уровня защиты.

Но, как вы видите, notifier объявлено на несколько строк вверх.

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Я нашел решение сам. Он не объясняет сообщения об ошибках, но, по крайней мере, он компилируется и, надеюсь, будет работать потом.

Я просто добавил это к самому классу:

Private Sub OnValueChanged(sender As Object, e As EventArgs)
    RaiseEvent ValueChanged(sender, e)
End Sub

И затем вместо того, чтобы самому вызывать событие вфункция OnPropertyChanged, я вызываю мою новую процедуру:

Private Shared Sub OnPropertyChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
    Dim notifier As PropertyChangeNotifier

    notifier = TryCast(d, PropertyChangeNotifier)
    If (notifier Is Nothing) Then
        Exit Sub
    End If

    notifier.OnValueChanged(notifier, EventArgs.Empty)
End Sub
0 голосов
/ 12 октября 2019
  Private Shared Sub OnPropertyChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
      Dim notifier As PropertyChangeNotifier = CType(d, PropertyChangeNotifier)
      If notifier.ValueChanged IsNot Nothing Then RaiseEvent notifier.ValueChanged(notifier, EventArgs.Empty)
  End Sub
...