VB中继承Common的类A实例化时如何跳过父类构造函数避免报错
解决方案
问题根因
- 你的类A中接收
C.CsvGenerator参数的构造函数存在两处问题:- 代码笔误:参数名为
objCsv,但赋值语句错误写为_objCsv = objCsvGenerator,引用了不存在的变量 - 未显式指定父类构造函数:VB.NET默认会为子类构造函数自动匹配父类构造,匹配到带参数的父类构造时就会出现你遇到的类型不匹配报错
- 代码笔误:参数名为
- .NET继承机制下无法完全跳过父类构造函数的调用,但可以选择调用父类的无参构造,避开带参数的构造逻辑,满足你的需求。
具体修改方法
- 修正类A的Friend构造函数,显式指定调用父类
Common的无参构造,同时修正笔误:
Friend Sub New(ByVal objCsv As C.CsvGenerator) ' 显式调用父类无参构造,不会触发带参数的父类构造,避免类型不匹配 MyBase.New() ' 修正变量名错误 _objCsv = objCsv End Sub
- 删掉类A中多余的语法错误
End Sub,修正后完整的类A代码如下:
Public Class A Inherits Common Public _objCsv As C.CsvGenerator Friend Sub New(ByVal objCsv As C.CsvGenerator) MyBase.New() _objCsv = objCsv End Sub Public Sub New() MyBase.New() End Sub Public Sub New(ByVal objRSReportObj As Object) MyBase.New(objRSReportObj) InitializeReport() End Sub End Class
修改后你在类C中执行Dim objFkkiNinteiJokyoRpt As New A(objCsv)就不会再出现类型不匹配的报错。
内容的提问来源于stack exchange,提问作者Suneo
相关产品推荐
相关产品推荐

