Vb.net 使用不同的数据类型重写属性
如何从继承的类重写属性,但使用不同的返回类型 我正在与这样一个班级合作:Vb.net 使用不同的数据类型重写属性,vb.net,class,inheritance,types,overriding,Vb.net,Class,Inheritance,Types,Overriding,如何从继承的类重写属性,但使用不同的返回类型 我正在与这样一个班级合作: Public MustInherit Class foo Public MustOverride Property Value As Object End Class 我想继承此类,但让Value属性返回不同的类型: Public Class foo_string Inherits foo Public Overrides Property Value As String End Class
Public MustInherit Class foo
Public MustOverride Property Value As Object
End Class
我想继承此类,但让Value属性返回不同的类型:
Public Class foo_string
Inherits foo
Public Overrides Property Value As String
End Class
Public Class foo_date
Inherits foo
Public Overrides Property Value As Date
End Class
这给了我一个错误:“'Public Overrides Property Value As String'无法重写'Public MustOverride Property Value As Object',因为它们的返回类型不同。”
我可以从基类中删除属性,只在子类中指定它,但是我想知道是否有其他方法可以使它工作
我正在学习类层次结构,但还没有掌握它,所以如果你认为我试图做的没有意义或者我遗漏了一些明显的东西,我会接受的。你可以这样做,但这可能不是一个好主意
Public MustInherit Class fooBase(Of T)
Public MustOverride Property Value As T
End Class
Public Class FooBaseA
Inherits fooBase(Of String)
Public Overrides Property Value As String
End Class
用法:
Dim foo As New FooBaseA
这是另一种选择:
Public Interface FooValue(Of T)
Property Value As T
End Interface
Public Class fooA
Implements FooValue(Of String)
Public Property Value As String Implements FooValue(Of String).Value
End Class
问题在于,您不希望必须使用代码来检查每个对象的类型,以便代码知道如何使用属性:
Dim fa As New FooA
Dim fb As New FooB
If TypeOf fb Is FooB Then
Console.WriteLine(fb.Value.DayOfWeek)
End If
' or:
If fb.Value.GetType Is GetType(DateTime) Then
Console.WriteLine(fb.Value.DayOfWeek)
End If
如果数据类型不同,则它们可能应具有不同的名称、单独的属性,并在派生类上实现<代码>文本显然是字符串版本的选择。这在某种程度上取决于实际的类,但我倾向于避免这种情况。根据您的具体需要,您可以通过将
foo
a设置为。