Events und Vererbung

  • C#
  • .NET 5–6

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Events und Vererbung

    Hallo,

    ich habe eine Basisklasse

    C#-Quellcode

    1. public class ViewModelBase<T> : ReactiveObject where T : class
    2. {
    3. // ...
    4. protected event MainWindowViewModel.TabItemEventHandler TabItemEvent;
    5. // ..
    6. }


    wobei

    C#-Quellcode

    1. public class MainWindowViewModel : ViewModelBase<MainWindow>
    2. {
    3. // ...
    4. public delegate void TabItemEventHandler(object? sender, TabItemEventArgs e);
    5. // ...
    6. }



    und


    C#-Quellcode

    1. public class AnderesViewModel : ViewModelBase<AnderesView>
    2. {
    3. // ...
    4. private void Schließen()
    5. {
    6. View!.Cursor = new Cursor(StandardCursorType.Wait);
    7. Data.Clear();
    8. TabItemEvent?.Invoke(View.Parent as TabItem,
    9. new MainWindowViewModel.TabItemEventArgs { Action = MainWindowViewModel.TabItemEventActions.Remove });
    10. View.Cursor = Cursor.Default;
    11. }
    12. }
    13. // ...



    Bei TabEvent?.Invoke kommt nun folgende Meldung

    The event 'TabItemEvent' can only appear on the left hand side of += or -= (except when used from within the class 'ViewModels.ViewModelBase<T>')

    Ich muss also in jeder von ViewModelBase abgeleiteten Klasse den Eventhandler extra einbauen. Warum kann ich nicht den von der Basisklasse in den abgeleiteten Klassen verwenden?


    Gruß

    Joachim
    Das is numa so.
    Eine abgeleitete Klasse kann ein Event der BasisKlasse nicht auslösen.
    du kannst aber eine protected RaiseTheEvent-Methode in die BaseClass einbauen, die von allen Erben genutzt wern kann.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()