2

考虑:

Public MustInherit Class Column
    Public ReadOnly Property ReturnSomethingUseful() As Object
        Get
             'return something useful
        End Get
    End Property
End Class

Public Class TypedColumn(Of T)
    Inherits Column

    Public Overrides ReadOnly Property ReturnSomethingUseful() As T
        Get
             'return the same something useful, but as type T
             Return MyBase.ReturnSomethingUseful()
        End Get
    End Property
End Class

但这会产生以下错误:

Public Overrides Function ReturnSomethingUseful(sValue As String) As Boolean' 不能覆盖'Public Overridable Function ReturnSomethingUseful(sValue As String) As Object',因为它们的返回类型不同。

我接受你不能这样做,但我希望能够保留我正在尝试做的事情的语义,即有一个处理 的无类型版本Object,但派生类中的类型版本知道具体的类型T。有没有办法做到这一点?

4

3 回答 3

5

是的,有:使用Shadows修饰符

Public Shadows ReadOnly Property ReturnSomethingUseful() As T
    Get
         'return the same something useful, but as type T
         Return MyBase.ReturnSomethingUseful()
    End Get
End Property
于 2012-04-13T13:31:03.760 回答
2

我不喜欢这个答案,但这是我正在做的事情,直到我找到一个真正优雅的解决这个问题的方法:

Public Class TypedColumn(Of T)
    Inherits Column

    Public ReadOnly Property ReturnSomethingUsefulTyped() As T
        Get
          'return the same something useful, but as type T
          Return MyBase.ReturnSomethingUseful()
        End Get
    End Property
End Class

因此,它没有覆盖基本方法,而是有一个不同的名称来指示它的作用。不是很好,但比处理类型Object好,也比处理问题好Shadows

于 2012-05-24T14:37:48.687 回答
0

我因愚蠢的 5 分钟限制而无法进行编辑...

无论如何,我想说,这有点像无法执行以下操作:

Private _myProperty As Integer = 0

ReadOnly Property MyProperty As String
    Get
        Return _myProperty.ToString("0,###")
    End Get
End Property

WriteOnly Property MyProperty As Integer
    Set(value As Integer)
        _myProperty = value
    End Set
End Property

我认为能够向属性写入与从中读取不同的类型是有效的。例如,在管理 UI 日期时间时。简单地将日期时间读取为格式化字符串比在 UI 代码中乱七八糟要干净得多。我知道我在这里会是少数,真正的编码员会尖叫。

于 2017-08-27T20:01:32.313 回答