【问题标题】:Override Property with different DataType使用不同的 DataType 覆盖属性
【发布时间】:2016-05-13 04:53:46
【问题描述】:

如何覆盖继承类的属性但使用不同的返回类型?

我正在使用这样设置的课程:

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',因为它们的返回类型不同。”

我可以从基类中删除该属性并仅在子类中指定它,但我想知道是否有其他方法可以使其工作。

我正在学习类层次结构,但还没有掌握它,所以如果你认为我正在尝试做的事情没有意义或者我遗漏了一些明显的东西,我会接受。

【问题讨论】:

  • 具体取决于您想要什么,您可以通过将foo 设置为Generic Class 来实现它。

标签: vb.net class inheritance types overriding


【解决方案1】:

您可以这样做,但这可能不是一个好主意。

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

如果数据类型不同,它们可能需要不同的名称、不同的属性并在派生类上实现。 Text 是字符串版本的明显选择。这在某种程度上取决于实际的课程,但我倾向于避免这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-31
    • 2011-03-09
    • 2013-07-19
    • 2012-03-10
    • 2019-06-12
    • 2019-09-29
    • 1970-01-01
    相关资源
    最近更新 更多