Bagaimana menerjemahkan dari C# ke VB.net

Untuk proyek yang ditulis dalam VB.net saya ingin menggunakan kelas PropertyChangeNotifier dari artikel ini, setidaknya saya ingin mencobanya jika dapat membantu.

Karena kelas asli ditulis dalam C#, saya mencoba menerjemahkan kelas ini ke VB.net, tetapi ada satu fungsi yang tidak dapat saya kompilasi dan saya tidak tahu mengapa, mungkin Anda bisa membantu.

Fungsi asli di C# adalah:

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

Terjemahan saya (yang sedikit diubah) (dan terjemahan otomatis beberapa situs web) adalah:

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

Jika saya menghapus RaiseEvent, kompiler memberi tahu saya, bahwa ValueChanged adalah sebuah acara dan tidak dapat dipanggil secara langsung, saya harus menggunakan RaiseEvent. Tetapi ketika saya menggunakan RaiseEvent, kompiler memberi tahu saya

'pemberitahuan' tidak dideklarasikan. Ini mungkin tidak dapat diakses karena tingkat perlindungannya.

Tapi seperti yang Anda lihat, notifier dideklarasikan dalam beberapa baris.


person Nostromo    schedule 12.10.2019    source sumber
comment
Cukup ubah RaiseEvent notifier.ValueChanged(notifier, EventArgs.Empty) menjadi RaiseEvent ValueChanged(notifier, EventArgs.Empty)   -  person Anu6is    schedule 12.10.2019
comment
Saya menggunakan fungsi statis dan acara ValueChanged adalah acara non-statis dari kelas PropertyChangeNotifier.   -  person Nostromo    schedule 12.10.2019
comment
Oh, ketinggalan statisnya.   -  person Anu6is    schedule 12.10.2019
comment
Tersedia plugin Visual Studio gratis yang akan menerjemahkan C# ke VB.NET dan sebaliknya.   -  person R.J. Dunnill    schedule 13.10.2019
comment
Terjemahan otomatis ini hanya dapat menangani bagian kode sederhana, tidak berfungsi di sini, saya sudah mencoba beberapa.   -  person Nostromo    schedule 13.10.2019


Jawaban (2)


Saya sendiri menemukan solusinya. Itu tidak menjelaskan pesan kesalahannya, tapi setidaknya itu dikompilasi dan semoga berfungsi setelahnya.

Saya baru saja menambahkan ini ke kelas itu sendiri:

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

Dan alih-alih memunculkan acara itu sendiri di fungsi OnPropertyChanged, saya memanggil prosedur baru saya:

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
Anda tidak memposting detail ini dalam pertanyaan Anda. - person Oleg; 12.10.2019
comment
jawaban mandiri terkait sumber yang tidak diposting dan tidak disebutkan dalam pertanyaan utama. - person Oleg; 12.10.2019

person    schedule
comment
Keduanya notifier.ValueChanged memberi tahu saya bahwa ini adalah acara dan tidak dapat dipanggil secara langsung. - person Nostromo; 12.10.2019
comment
Public Event ValueChanged As EventHandler' adalah sebuah event, dan tidak dapat dipanggil secara langsung. Gunakan pernyataan 'RaiseEvent' untuk menaikkan acara. - person Nostromo; 12.10.2019
comment
notifier.ValueChanged dalam pernyataan if sudah akan memunculkan kesalahan itu - person Nostromo; 12.10.2019