Vb.net Public MustOverride sub new(参数作为类型)
我有一个名为ParentClass的MustInherit类。 我需要能够在不同的地方写下以下内容:Vb.net Public MustOverride sub new(参数作为类型),vb.net,overriding,Vb.net,Overriding,我有一个名为ParentClass的MustInherit类。 我需要能够在不同的地方写下以下内容: Function TheThing(Of T As ParentClass)(s As String) As ParentClass Return New T(s) End Function 因此,我要写信 MustInherit Class ParentClass MustOverride Sub New(s As String) End Class Class Class_
Function TheThing(Of T As ParentClass)(s As String) As ParentClass
Return New T(s)
End Function
因此,我要写信
MustInherit Class ParentClass
MustOverride Sub New(s As String)
End Class
Class Class_Daughter1
Inherits ParentClass
Overrides Sub New(s As String)
'do whatever
End Sub
End Class
事实上:
- 如果我没有声明MustOverride sub new(s为string),那么函数TheThing不知道从ParentClass派生的任何类都有sub new(s为string)
- 如果我添加了它,它会说新的不能被覆盖
Function TheThing(Of T As ParentClass)(s As String) As ParentClass
dim a as new T()
Return a
End Function
新的那条线也不行
PS2:这也是不允许的:
Function TheThing(Of T As {ParentClass, iCreatable})(s As String) As ParentClass
Return New T(s)
End Function
Interface iCreatable
Sub New() '===> not allowed in interface
End Interface
类的构造函数不能是MustInherit,但如果您想做一些基本相同的事情,可以这样做:
MustInherit Class ParentClass
Protected Sub New(s As String)
Initialize(s)
End Sub
Protected MustOverride Sub Initialize()
End Class
您的子类的构造函数必须调用MyBase.New
。通过这种方式,需要子类来实现初始化,并且由于需要子类来调用基类构造函数,因此可以保证将调用Initialize。我刚刚得到了答案(来自朋友):
唯一我无法解决的问题是:我无法编写以下内容(classier,但如果编译它,它将是等效的):
谢谢你的回答。事实上,这确保了新计划的实施。。。但编译器仍然认为类型T可能无法实现新的。是否有接口(如iComparable、iConvertible…)thant表示“可以创建”?通过使父类只有一个构造函数,并且该构造函数具有参数,任何继承类都必须有自己的构造函数,该构造函数调用提供参数的基类构造函数。您好,这是真的。。。但编译器并不理解它。检查我自己的答案,查看我找到的解决方法:)
Function TheThing(Of T As {New, ParentClass})(s As String) As ParentClass
Dim res As New T()
res.Init(s)
Return res
End Function
MustInherit Class ParentClass
MustOverride Sub Init(s As String)
End Class
Class Class_Daughter1
Inherits ParentClass
Overrides Sub Init(s As String)
'do whatever
End Sub
End Class
Function TheThing(Of T As {New(s as string), ParentClass})(s As String) As ParentClass
return New T(s)
End Function
MustInherit Class ParentClass
'nothing here
End Class
Class Class_Daughter1
Inherits ParentClass
public Sub New(s As String)
'do whatever
End Sub
End Class