Применение метода Extension к универсальному классу с универсальным типом - PullRequest
10 голосов
/ 08 декабря 2008

Я работал с универсальным классом в 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  

Это НЕ нормально (IDE выдает ошибку T как не определенную).

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

End Sub

Это как-то связано со статической проверкой .Net.
Говоря мне: «Что-то, что вы можете попробовать сделать с Типом T, может быть несовместимо, и я не позволю вам это делать».

P.S. Вся эта боль, которую я испытал, будучи родовым классом, пришла из другой библиотеки, и использовалась во многих разных местах. Я немного опасаюсь наследовать и добавлять этот метод в мой унаследованный универсальный класс.

1 Ответ

16 голосов
/ 08 декабря 2008

Если вы сделаете ваш метод расширения универсальным, он должен работать

то есть DoSomething (Of T) () instread просто DoSomething ()

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

Надеюсь, это поможет

...