【问题标题】:How to translate from C# to VB.net如何从 C# 转换为 VB.net
【发布时间】:2019-10-12 07:02:27
【问题描述】:

对于一个用 VB.net 编写的项目,我想使用来自 this articlePropertyChangeNotifier 类,至少我想试试它是否有帮助。

由于原始类是用 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

如果我删除编译器告诉我的RaiseEventValueChanged 是一个事件,不能直接调用,我应该使用RaiseEvent。但是当我使用RaiseEvent 时,编译器会告诉我

'notifier' 未声明。它可能无法访问,因为它 保护等级。

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

【问题讨论】:

  • 只需将RaiseEvent notifier.ValueChanged(notifier, EventArgs.Empty)更改为RaiseEvent ValueChanged(notifier, EventArgs.Empty)
  • 我在一个静态函数中,ValueChanged 事件是PropertyChangeNotifier 类的非静态事件。
  • 哦,错过了静电。
  • 有一个免费的 Visual Studio 插件可用,可以将 C# 转换为 VB.NET 并返回。
  • 这些自动翻译只能处理简单的代码部分,这里不行,我试了好几个。

标签: c# vb.net code-conversion


【解决方案1】:

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

我只是将它添加到类本身:

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

【讨论】:

  • 您没有在问题中发布此详细信息。
  • 与主要问题中未发布且未提及的来源相关的自我回答。
【解决方案2】:
  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

【讨论】:

  • notifier.ValueChanged 都告诉我这是一个事件,不能直接调用。
  • Public Event ValueChanged As EventHandler' 是一个事件,不能直接调用。使用“RaiseEvent”语句来引发事件。
  • if-statemant 中的notifier.ValueChanged 已经抛出该错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多