Hilfe bei Übersetzung von C# zu VB.NET Code

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Rootbob91.

    Hilfe bei Übersetzung von C# zu VB.NET Code

    Hallo zusammen,

    ich bräuchte Hilfe folgenden C#-Code nach VB.NET zu übersetzen:
    Spoiler anzeigen

    C#-Quellcode

    1. public abstract class ViewModelBase : INotifyPropertyChanged
    2. {
    3. public event PropertyChangedEventHandler PropertyChanged;
    4. protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    5. {
    6. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    7. }
    8. }


    Bisher habe ich folgenden Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class ViewModelBase
    2. Implements INotifyPropertyChanged
    3. Public Sub OnPropertyChanged(propertyName As String)
    4. RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
    5. End Sub
    6. Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
    7. End Class


    Allerdings weiß ich nicht, wie ich das CallerMemberName-Attribut in VB.NET verwenden kann.

    Wäre nett wenn jemand helfen könnte.

    PS: Quelle
    PPS: N Converter hatte ich bereits probiert. Da kam eine Fehlermeldung:

    CONVERSION ERROR: Code could not be converted. Details:

    -- line 7 col 25: invalid UnaryExpr

    Please check for any errors in the original code and try again.

    LG
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    @Rootbob91 Das ist ein Nullable(Of T), eine Variable, die, verglichen mit C++ sozusagen als Pointer übergeben wird.
    Da muss man zunächst testen, ob das Ding von null verschieden ist, und genau das macht das Fragezeichen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany: Danke für deinen Beitrag, mein Fokus lag allerdings auf dem Attribut CallerMemberName, wo ich noch nicht mal wusste, dass es existiert. Ist meiner Meinung nach ne richtig geniale Sache, weil mich das immer genervt hat, dass ich den Namen der Property dann mit überliefern muss. Hatte mir so gesehen schon immer gedacht "Das muss doch anders gehen, dass er von selber weiß, wer da 'callt'". Allerdings verwirrt mich das Fragezeichen trotzdem. Es prüft also, ob dieser "Pointer" null ist, wenn nicht, dann führt er die Invoke-Anweisung aus?

    @MrTrebron: Vielen Dank auch für deine Antwort. Ich konnte damit meine geplante Lösung ausmachen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Class MainWindow
    3. Public ViewModel As ViewModelBase
    4. Public Class ViewModelBase
    5. Implements INotifyPropertyChanged
    6. Public Sub OnPropertyChanged(<System.Runtime.CompilerServices.CallerMemberName> Optional propertyName As String = Nothing)
    7. Debug.WriteLine(propertyName)
    8. RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
    9. End Sub
    10. Private _FirstName As String
    11. Public Property FirstName As String
    12. Get
    13. Return _FirstName
    14. End Get
    15. Set(ByVal value As String)
    16. _FirstName = value
    17. OnPropertyChanged()
    18. End Set
    19. End Property
    20. Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
    21. End Class
    22. Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
    23. ViewModel = New ViewModelBase()
    24. Me.DataContext = ViewModel
    25. ViewModel.FirstName = "Max"
    26. End Sub
    27. End Class

    Falls jemandem Fehler auffallen bitte anmerken. Ich versuche aktuell verstärkt den Weg ins MVVM zu finden. Habe mittlerweile schon öfters mit AngularJS gearbeitet und möchte dieses Modell nun auch auf meine VB Programme mit Start zur WPF übertragen.

    Leider sind mehrere Anläufe zur WPF bisher gescheitert, wenn ich ehrlich bin. Ich finde es schwer dort einen Leitfaden zu finden, an den man sich Stück für Stück hält, um wirklich korrekt einzutauchen. Meistens habe ich mir doch dann gedacht "kommt bauste wieder normales WinForms-Gedöhns, da isses schneller, weil du weißt wie."

    Mich reizt das alles mit den Bindings vor allem aber ungemein und immer wieder.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..