osc*_*tin 8 vb.net constructor abstract-class
我有一个抽象类,有两个构造函数.当另一个类继承这个类时,似乎我必须声明具有与基类中相同签名的构造函数.这对我来说似乎有点多余.有没有办法Sub New(Parameter as MyClass)
在我的基类中使用并使它成为默认的构造函数签名,除非派生类在其定义中包含它?
为清晰起见编辑:我希望暗示我不想在调用基类的派生类中创建构造函数.我希望能够做到这一点:
Mustinherit Class MyBase
Sub New(MyParam As String)
End Sub
End Class
Class MyDerived
Inherits MyBase
End Class
Run Code Online (Sandbox Code Playgroud)
请注意,派生类现在不调用基类?
dar*_*mos 32
你的假设是错的; 你的派生类的构造函数可以有任何签名,只要它们使用MyBase.New正确地调用它们的基类构造函数之一.这是一个完整的例子:
Imports System
Public Class MainClass
Shared Sub Main()
Dim w As New Window(5, 10)
w.DrawWindow( )
Dim lb As New ListBox(20, 30, "Hello world")
lb.DrawWindow( )
End Sub
End Class
Public Class Window
Public Sub New(ByVal top As Integer, ByVal left As Integer)
Me.top = top
Me.left = left
End Sub 'New
Public Sub DrawWindow( )
Console.WriteLine("Drawing Window at {0}, {1}", top, left)
End Sub
Private top As Integer
Private left As Integer
End Class
Public Class ListBox
Inherits Window
Public Sub New(ByVal top As Integer, ByVal left As Integer, ByVal theContents As String)
MyBase.New(top, left) '
mListBoxContents = theContents
End Sub
Public Shadows Sub DrawWindow( )
MyBase.DrawWindow( )
Console.WriteLine("Writing string to the listbox: {0}", mListBoxContents)
End Sub
Private mListBoxContents As String
End Class
Run Code Online (Sandbox Code Playgroud)
编辑:您根本不必强制保留或扩展基类构造函数的签名.这是有效的,例如:
Public Class ListBox
Inherits Window
Public Sub New(ByVal theContents As String)
MyBase.New(20, 30) '
mListBoxContents = theContents
End Sub
'More code
End Class
Run Code Online (Sandbox Code Playgroud)
Pho*_*cUK -5
在 VB.Net 中您使用:
MyBase.New(args)
在构造函数方法体内,构造函数/方法签名上没有使用额外的措辞。
归档时间: |
|
查看次数: |
29435 次 |
最近记录: |