在下面的代码中我收到编译错误
Error Too many arguments to 'Public Sub New()'
对Dim TestChild作为ChildClass =新的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节。
> http://msdn.microsoft.com/en-us/library/aa711964(VS.71).aspx
我认为最相关的部分是以下(大致第二页的开头)
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.
这没有明确说明子类不会继承构造函数,但它是语句的副作用。