9

私はvb.netのジェネリッククラスを扱っていました。
また、拡張メソッドは、型を指定しないとジェネリック クラスに適用できないようです。

私はこのジェネリッククラスを持っています

Public Class MyGeneric(Of T)
    'Methods and properties go here 
    '
    '
End Class  

これで結構です

<Extension()> _
Public Sub DoSomething(ByVal myGenericDoubleObj As MyGen(Of Double))

End Sub  

これは OK ではありません (IDE では定義されていないエラー T が表示されます)。

<Extension()> _
Public Sub DoSomethingGeneric(ByVal myGenericObj As MyGen(Of T))

End Sub

これは、.Net の静的チェックと関係がありますか。
「Type T でやってみても、互換性がないかもしれないので、やらせません」と。

PSジェネリッククラスとして私が取ったこのすべての痛みは、別のライブラリから来ており、さまざまな場所で使用されています。継承したジェネリック クラスにこのメソッドを継承して追加することには、あまり注意がありません。

4

1 に答える 1

15

拡張メソッドをジェネリック メソッドにすると、機能するはずです

つまり、DoSomething (Of​​ T) () は単に DoSomething() の代わりに

<Extension()> _
Public Sub DoSomething(Of T)(ByVal myGenericObj As MyGeneric(Of T))
End Sub

お役に立てれば

于 2008-12-08T10:27:23.853 に答える