在VB.Net中使用多个泛型类时出错



我试图找到一个已经发布的类似问题,但只是对我的发现感到困惑。

我遇到的情况涉及以下对象:-
报表包含参数
文档包含参数
报表和文档参数相似
查询包含参数
报告、文档和查询都有类似的参数

所以我创建了以下类结构:-

Public MustInherit Class clsBaseCollection(Of TclsBaseChild As clsBase, TclsBaseParent As clsBase)
Public MustInherit Class clsParams(Of TclsParam As clsParam, TclsRootObject As clsRootObject)  
    Inherits clsBaseCollection(Of TclsParam, TclsRootObject)
Public MustInherit Class clsRepDocParams(Of TclsRepDocParam As clsRepDocParam, TclsReportDocument As clsReportDocument)  
    Inherits clsParams(Of TclsRepDocParam, TclsReportDocument)
Public Class clsReportParams  
    Inherits clsRepDocParams(Of clsReportParam, clsReport)

Public MustInherit Class clsReportDocument    
    MustOverride ReadOnly Property Parameters() As clsRepDocParams(Of clsRepDocParam,clsReportDocument)
Public Class clsReport  
    Inherits clsReportDocument  
    Private _Params As clsReportParams  
    Public Overrides ReadOnly Property Parameters() As clsReportParams  
        Get  
            If _Params Is Nothing Then  
                BeginUpdate()  
                _Params = New clsReportParams(Me)  
                EndUpdate()  
            End If  
            Return _Params  
        End Get  
    End Property  

最后一个属性产生以下错误:-

"Public Overrides ReadOnly Property Parameters As clsReportParams"无法重写"Public MustOverride ReadOnly Property Parameters As clsRepDocParams(Of clsRepDocParam,clsReportDocument)",因为它们的返回类型不同。

我不明白这是怎么回事,因为我相信我的课堂水平是正确的!?

很抱歉缺少选项卡格式。。。我是堆栈溢出站点的新手,希望我能有所改进;)

干杯Jeff

MustOverride属性声明为

As clsRepDocParams(Of clsRepDocParam,clsReportDocument)

您的Override被简单地声明为

As clsReportParams 

它没有指定基集合,因此它们不匹配。您可能应该将覆盖声明为

As clsRepDocParams(Of clsRepDocParam,clsReportDocument)

以匹配基类。

值得注意的是,对于您创建的每一个额外的继承级别,您都需要更加小心,以确保您的设计非常仔细!如果我在审查代码,我需要确信复杂性在项目的整个生命周期内都会得到回报。

最新更新