如何从 C# 转换为 VB.net
How to translate from C# to VB.net
对于用VB.net编写的项目,我想使用this article中的PropertyChangeNotifier
class,至少我想尝试一下是否有帮助。
因为原来的 class 是用 C# 写的,我试着把这个 class 翻译成 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' is not declared. It may be inaccessible due to its
protection level.
但是正如你所见,notifier
声明在几行之前。
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
我自己找到了解决办法。它没有解释错误消息,但至少它正在编译并希望之后能正常工作。
我刚刚将此添加到 class 本身:
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
对于用VB.net编写的项目,我想使用this article中的PropertyChangeNotifier
class,至少我想尝试一下是否有帮助。
因为原来的 class 是用 C# 写的,我试着把这个 class 翻译成 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' is not declared. It may be inaccessible due to its protection level.
但是正如你所见,notifier
声明在几行之前。
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
我自己找到了解决办法。它没有解释错误消息,但至少它正在编译并希望之后能正常工作。
我刚刚将此添加到 class 本身:
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