简体   繁体   中英

How to translate from C# to VB.net

For a project written in VB.net I want to use the PropertyChangeNotifier class from this article , at least I'd like to try if it can help.

Since the original class is written in C# I tried to translate this class to VB.net, but one function I can'T get to compile and I don't know why, maybe you can help.

The original function in C# is:

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

My (slightly altered) translation (and the automatic translation of several web sites) is:

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

If I remove the RaiseEvent the compiler tells me, that ValueChanged is an event and can't be called directly, I should use RaiseEvent . But when I use RaiseEvent the compiler tells me

'notifier' is not declared. It may be inaccessible due to its protection level.

But as ylou can see notifier is declared a few lines up.

I found a solution myself. It's not explaining the error messages, but at least it's compiling and hopefully working afterwards.

I just added this to the class itself:

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

And then instead of raising the event myself in the function OnPropertyChanged , I call my new procedure:

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
  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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM