La réflexion est une technologie .NET - elle n'est spécifique ni à VB.NET ni à C#.
Compte tenu d'un objet, o, utilisez
o.GetType().GetGenericArguments()(0)
Cependant, il est probablement une mauvaise idée de varier explicitement votre comportement en fonction du type. Si vous avez besoin de faire des choses différentes en fonction de la classe « A » par rapport à la classe « B », alors vous devez utiliser des méthodes virtuelles ou des propriétés, et les remplace dans les types dérivés:
Public MustInherit Class BaseClass
Public MustOverride Function OneMethodTwoWays() As Integer
Public MustOverride ReadOnly Property OnePropertyTwoWays() As Integer
End Class
Public Class DerivedClass1
Inherits BaseClass
Public Overrides Function OneMethodTwoWays() As Integer
Return 1 + 1
End Function
Public Overrides ReadOnly Property OnePropertyTwoWays() As Integer
Get
Return 1 + 1
End Get
End Property
End Class
Public Class DerivedClass2
Inherits BaseClass
Public Overrides Function OneMethodTwoWays() As Integer
Return 2 * 1
End Function
Public Overrides ReadOnly Property OnePropertyTwoWays() As Integer
Get
Return 2 * 1
End Get
End Property
End Class
Public Class MyGeneric(Of T As BaseClass)
Public Function DoTheyMatch(ByVal a As T, ByVal b As T) As Boolean
Return a.OneMethodTwoWays() = b.OnePropertyTwoWays
End Function
End Class
Merci, exactement ce dont j'avais besoin. – link664