我试图找到一个类似的问题已经发布但只是与我发现的东西混淆了。
我的情况涉及以下目标: -
报告包含参数
文件包含参数
报告和文件参数类似
查询包含参数
报告,文档和查询都具有类似的参数
所以我创建了以下类结构: -
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覆盖ReadOnly属性参数因为clsReportParams'不能覆盖'Public MustOverride ReadOnly属性参数as clsRepDocParams(of clsRepDocParam,clsReportDocument)'因为它们的返回类型不同。
我不知道这是怎么回事,因为我相信我的分级水平正确!?
对缺少标签格式的道歉...我对堆栈溢出站点不熟悉并希望我会改进;)
干杯 杰夫
答案 0 :(得分:0)
MustOverride属性声明为
As clsRepDocParams(Of clsRepDocParam,clsReportDocument)
您的覆盖简单地声明为
As clsReportParams
它没有指定基本集合,因此它们不匹配。您应该将覆盖声明为
As clsRepDocParams(Of clsRepDocParam,clsReportDocument)
匹配基类。
值得注意的是,在您创建的每个附加级别的继承中,您需要更加小心,以确保您的设计非常谨慎!如果我正在审查该代码,我需要确信复杂性实际上会在项目的整个生命周期内得到回报。