In MustOverride-Sub zusätzlichen Code definieren

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    In MustOverride-Sub zusätzlichen Code definieren

    Hallo!

    Ich habe momentan ein kleines Problem.

    Ich habe eine Klasse RenderableLiving von der einige Spielklassen erben. Die Klasse sieht wie folgt aus:

    VB.NET-Quellcode

    1. Public MustInherit Class RenderableLiving
    2. Public Property LivingTicks As Long
    3. Public MustOverride Sub Render(ByVal renderEngine As RenderEngine)
    4. Public MustOverride Sub Update(ByVal gameEngine As GameEngine)
    5. End Class

    Wie man sieht habe ich die zwangsüberschreibbare Funktion "Update". Ich möchte nun in dieser Funktion noch beliebigen Code "hinzufügen", der, wenn ich Update() aufrufe, nach dem überschriebenem Code auch ausgeführt wird.
    Zum demonstrieren:

    VB.NET-Quellcode

    1. Public MustInherit Class RenderableLiving
    2. Public Property LivingTicks As Long
    3. Public MustOverride Sub Render(ByVal renderEngine As RenderEngine)
    4. Public MustOverride Sub Update(ByVal gameEngine As GameEngine)
    5. ' Überschriebenen Code ausführen (?)
    6. LivingTicks += 1
    7. End Sub
    8. End Class

    Dies klappt jedoch nicht, logischerweise. Wie kann ich so etwas bewerkstelligen, sprich nach dem überschriebenem Code noch etwas ausführen?

    Ich hoffe ihr versteht mein Problem, ansonsten könnt ihr gerne nachfragen.

    Danke für eure Hilfe.

    PS: Selbstverständlich kann ich eine zweite Funktion machen, die diesen Code LivingTicks += 1 beinhaltet, und die immer dort, wo Update() aufgerufen wird, ebenfalls aufrufen - dies ist aber nicht mein Ziel.
    Danke euch beiden. Ich habe mich für MustOverride -> Overridable entschieden.
    Kleine Zusatzfrage: ist es möglich, hier im Beispiel MyBase.Update(...) automatisch von VS2012 generieren zu lassen? Wenn ich bspw. bei einer WindowsForm eine Funktion überschreibe, wird MyBase.* automatisch erzeugt. Kann ich auf irgend eine Weise mithilfe des Quellcodes VS2012 dazu zwingen?
    ich seh kein Prob, die ursprungs-Anforderung zu erfüllen - mach ich öfter, sowas:

    VB.NET-Quellcode

    1. Public MustInherit Class RenderableLiving
    2. Public Property LivingTicks As Long
    3. Public MustOverride Sub Render(ByVal renderEngine As RenderEngine)
    4. Protected MustOverride Sub UpdateCore(ByVal gameEngine As GameEngine)
    5. Public Sub Update(ByVal gameEngine As GameEngine)
    6. UpdateCore(gameEngine)
    7. LivingTicks += 1
    8. End Sub
    9. End Class