gpt4 book ai didi

vb.net - VB中可以继承带参数的sub new(构造函数)吗?

转载 作者:行者123 更新时间:2023-12-03 07:10:31 25 4
gpt4 key购买 nike

在下面的代码中我收到编译错误

Error Too many arguments to 'Public Sub New()'

Dim TestChild As ChildClass = New ChildClass("c") 上。我没有在 TestChild.Method1() 上收到它,即使它们都在我继承的基类上。

Public Class BaseClass
Public ReadOnly Text As String
Public Sub New(ByVal SetText As String)
Text = SetText
End Sub
Public Sub New()
Text = ""
End Sub
End Class

Public Class ChildClass
Inherits BaseClass
End Class

Public Class TestClass
Sub Test()
Dim TestChild As ChildClass = New ChildClass("c")
TestChild.Method1()
End Sub
End Class

我可以将子类更改为:

Public Class ChildClass
Inherits BaseClass
Public Sub New (ByVal SetText As String)
MyBase.New(SetText)
End Class
End Class

如下所示,但我不必为方法 1 或其他继承的方法执行此操作,并且我正在寻找可能的最干净的代码。这可能是继承参数化 New 语句的系统的限制,但我在任何地方都找不到它的记录。如果需要的话我想查看文档。

最佳答案

您所看到的行为是“设计使然”。子类不会从其基类型继承构造函数。子类负责定义它自己的构造函数。此外,它必须确保它定义的每个构造函数隐式或显式调用基类构造函数或链接到同一类型的另一个构造函数。

您需要在所有子类上定义相同的构造函数,并通过 MyBase.New 显式链接回基本构造函数。示例

Class ChildClass
Inherits BaseClass
Public Sub New(text As String)
MyBase.New(text)
End Sub
End Class

您正在查找的文档是 VB 语言规范的第 9.3.1 节。

我认为最相关的部分如下(大致在第二页的开头)

If a type contains no instance constructor declarations, a default constructor is automatically provided. The default constructor simply invokes the parameterless constructor of the direct base type.

这并没有明确声明子类不会继承构造函数,但这是该声明的副作用。

关于vb.net - VB中可以继承带参数的sub new(构造函数)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/789814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com