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

Для проекта, написанного на 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 объявлен несколькими строками вверх.


person Nostromo    schedule 12.10.2019    source источник
comment
Просто замените RaiseEvent notifier.ValueChanged(notifier, EventArgs.Empty) на RaiseEvent ValueChanged(notifier, EventArgs.Empty)   -  person Anu6is    schedule 12.10.2019
comment
Я нахожусь в статической функции, а событие ValueChanged является нестатическим событием класса PropertyChangeNotifier.   -  person Nostromo    schedule 12.10.2019
comment
Ой, пропустил статику.   -  person Anu6is    schedule 12.10.2019
comment
Доступен бесплатный плагин Visual Studio, который переводит C # на VB.NET и обратно.   -  person R.J. Dunnill    schedule 13.10.2019
comment
Эти автоматические переводы могут обрабатывать только простые части кода, здесь они не работали, я пробовал несколько.   -  person Nostromo    schedule 13.10.2019


Ответы (2)


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

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

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
person Nostromo    schedule 12.10.2019
comment
Вы не указали эту информацию в своем вопросе. - person Oleg; 12.10.2019
comment
самостоятельный ответ, связанный с источником, который не был опубликован и не упомянут в основном вопросе. - person Oleg; 12.10.2019

person    schedule
comment
Оба notifier.ValueChanged говорят мне, что это событие и не может быть вызвано напрямую. - person Nostromo; 12.10.2019
comment
Открытое событие ValueChanged As EventHandler 'является событием и не может быть вызвано напрямую. Используйте оператор RaiseEvent, чтобы инициировать событие. - person Nostromo; 12.10.2019
comment
notifier.ValueChanged в if-statemant уже вызовет эту ошибку - person Nostromo; 12.10.2019