代码之家  ›  专栏  ›  技术社区  ›  Achilles

在基类中实现事件

  •  1
  • Achilles  · 技术社区  · 14 年前

    考虑以下对象:

    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
    

    我想让我的基础班提高 FileSaved 事件的实施 SaveStringToFile 一旦它保存了文件。但是在vb.net中,不能让派生类引发基类事件。我想我可以治疗 XMLFileRepository_FileSaved 作为标准函数调用 将字符串保存到文件 实现直接调用它,但我认为我是以错误的方式处理问题。任何帮助都会很好!

    1 回复  |  直到 14 年前
        1
  •  3
  •   Tim Schmelter    14 年前

    在基类中添加引发基类filesaved事件的可重写子类:

    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