派生类的泛型版是否可以使用泛型类型覆盖基本方法?

Jos*_*ank 2 .net vb.net oop generics clr

考虑:

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
Run Code Online (Sandbox Code Playgroud)

但是这会产生以下错误:

Public Overrides函数ReturnSomethingUseful(sValue As String)As Boolean'无法覆盖'Public Overridable函数ReturnSomethingUseful(sValue As String)As Object'因为它们的返回类型不同.

我接受你不能这样做,但我希望能够保留我正在尝试做的语义,即有一个非类型化版本处理Object,但派生类中的类型化版本知道具体的类型T.有没有办法实现这个目标?

Dan*_*rth 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
Run Code Online (Sandbox Code Playgroud)

  • 阴影没有完全正确的行为:如果我有一个基类型的变量(Column)并调用ReturnSomethingUseful方法,那么它调用基类方法而不是派生类方法.我不确定这是你想要的,但在我的情况下,这是完全错误的. (2认同)