vb.net 我可以让我的派生类自动使用基构造函数吗?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12934010/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Can I have my derived class automatically use the base constructor?
提问by oscilatingcretin
I have an abstract class that has two constructors. When another class inherits this class, it appears that I have to declare contructors with identical signatures as the ones in the base class. This seems a bit redundant to me. Is there a way to have Sub New(Parameter as MyClass)
in my base class and have this become the default constructor signature unless the derived class includes it in its definition?
我有一个抽象类,它有两个构造函数。当另一个类继承这个类时,似乎我必须声明具有与基类中相同签名的构造函数。这对我来说似乎有点多余。有没有办法Sub New(Parameter as MyClass)
在我的基类中拥有并使其成为默认构造函数签名,除非派生类将其包含在其定义中?
Edit for clarity: I was hoping it was implied that I do not want to have to create a constructor in the derived class that calls the base class. I would like to be able to do this:
为清楚起见进行编辑:我希望暗示我不想在调用基类的派生类中创建构造函数。我希望能够做到这一点:
Mustinherit Class MyBase
Sub New(MyParam As String)
End Sub
End Class
Class MyDerived
Inherits MyBase
End Class
Notice now the derived class doesn't call the base?
现在注意到派生类不调用基类了吗?
采纳答案by PhonicUK
In VB.Net you use:
在 VB.Net 中,您使用:
MyBase.New(args)
MyBase.New(args)
Inside your constructors method body, no extra verbiage is used on the constructors/method signature.
在你的构造函数方法体中,构造函数/方法签名没有使用额外的措辞。
回答by dario_ramos
Your assumption is wrong; your derived classes' constructors can have any signature, as long as they call one of their base class's constructor properly using MyBase.New. Here's a full example:
你的假设是错误的;您的派生类的构造函数可以具有任何签名,只要它们使用 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
EDIT: You are not forced to keep or extend the base class constructor's signature at all. This is valid, for example:
编辑:您根本不需要保留或扩展基类构造函数的签名。这是有效的,例如:
Public Class ListBox
Inherits Window
Public Sub New(ByVal theContents As String)
MyBase.New(20, 30) '
mListBoxContents = theContents
End Sub
'More code
End Class