考虑:
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
。有没有办法实现这个目标?
答案 0 :(得分: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
答案 1 :(得分: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
的问题更好。
答案 2 :(得分: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代码中混乱更简洁。我知道我会在这里成为少数,真正的程序员会尖叫。