2010-11-15 1 views
1

Considérez les objets suivants:de mise en œuvre des événements dans une classe de base

Public MustInherit Class FileRepository 

    Public MustOverride Sub SaveStringToFile(ByVal FileText As String, ByVal FilePath As String) 

    Public Event FileSaved(ByRef sender As Object, ByVal EventArgs As EventArgs) 

End Class 

Public Class XMLFileRepository 
    Inherits FileRepository 

    Public Overrides Sub SaveStringToFile(ByVal FileText As String, ByVal FilePath As String) 

    End Sub 

    Private Sub XMLFileRepository_FileSaved(ByRef sender As Object, ByVal EventArgs As System.EventArgs) Handles Me.FileSaved 

    End Sub 
End Class 

Je veux que ma classe de base pour déclencher l'événement FileSaved dans son implentation de SaveStringToFile une fois qu'il est enregistré le fichier. Cependant, dans VB.NET, une classe dérivée ne peut pas déclencher un événement de classes de base. Je suppose que je peux traiter XMLFileRepository_FileSaved comme un appel de fonction standard et que mon implémentation SaveStringToFile l'appelle directement, mais je pense que j'aborde le problème de la mauvaise façon. Toute aide est la bienvenue!

+0

Pouvez-vous utiliser à la place une interface? Une autre option pourrait être d'écrire une méthode wrapper 'RaiseFileSaved (Object, EventArgs)'. – Bobby

Répondre

3

Ajouter un sous dans votre classe de base Overridable qui augmente les classes de base FileSaved-événement:

Public MustInherit Class FileRepository 

    Public MustOverride Sub SaveStringToFile(ByVal FileText As String, ByVal FilePath As String) 

    Public Event FileSaved(ByVal FileText As String, ByVal FilePath As String) 

    Protected Overridable Sub OnFileSaved(ByVal FileText As String, ByVal FilePath As String) 
     RaiseEvent FileSaved(FileText, FilePath) 
    End Sub 

End Class 

Public Class XMLFileRepository 
    Inherits FileRepository 

    Public Overrides Sub SaveStringToFile(ByVal FileText As String, ByVal FilePath As String) 
     MyBase.OnFileSaved(FileText, FilePath) 
    End Sub 

    Private Sub XMLFileRepository_FileSaved(ByVal FileText As String, ByVal FilePath As String) Handles MyBase.FileSaved 

    End Sub 
End Class 
+0

Pour suivre les consignes .NET, nommez la méthode OnFileSaved. –

+0

Ok, l'a changé. –

Questions connexes