首页 > 解决方案 > 如何从 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' 未声明。由于其保护级别,它可能无法访问。

但正如 ylou 所见notifier,它声明了几行。

标签: c#vb.netcode-conversion

解决方案


我自己找到了解决方案。它没有解释错误消息,但至少它正在编译并希望之后可以工作。

我刚刚将它添加到类本身:

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

推荐阅读