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

しかし、これにより次のエラーが発生します。

パブリック オーバーライド関数 ReturnSomethingUseful(sValue As String) As Boolean' は、戻り値の型が異なるため、'パブリック オーバーライド可能な関数 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 に答える