GetType e Interfaces en Visual Basic.Net Marzo 9, 2007
Posted by eugenioserrano in General.1 comment so far
Debido a una pregunta que me hizo mi amigo Ezquiel Jadib, de como se traduciria una linea de C# a Visual Basic me he decidio a escribir esta entrada ya que casi no hay informacion al respecto.
La pregunta que me hizo mi amigo es muy simple:
¿ Cómo se traduce esta linea de codigo de C# a VB.Net, teniendo en cuenta que i1 e i2 son interfaces ?
bool result = (i1.GetType() == i2.GetType());
Yo le dije rapidamente, pues asi…
Dim result As Boolean = (i1.GetType() Is i2.GetType())
A lo que me respondio tambien muy rapidamente.. Jeje, ya lo probe, no compila…
Y efectivamente no compila debido a que el metodo GetType se hereda de System.Object, pero las interfaces no tienen dicho metodo, y las variables i1 e i2 estan declaradas como interfaces no como clases.
Recordemos que por otro lado se puede usar la Insturcción GetType ( type ) pero, es para obtener el tipo de un tipo y no de una variable.
La cuestión es que despues de probar un poco encontramos que haciendo un Cast la cosa funciona:
Aqui hay un ejemplo completo:
Public Interface IFoo1
Sub Foo1()
End Interface
Public Interface IFoo2
Sub Foo2()
End Interface
Public Class Foo1
Implements IFoo1
Public Sub Foo1() Implements IFoo1.Foo1
End Sub
End Class
Public Class Foo2
Implements IFoo2
Public Sub Foo2() Implements IFoo2.Foo2
End Sub
End Class
Y luego…
Dim a As IFoo1 = New Foo1
Dim b As IFoo1 = New Foo1
Dim c As IFoo2 = New Foo2
If DirectCast(a, Object).GetType Is DirectCast(b, Object).GetType Then
Debug.WriteLine(“A Implements the same interface that B”)
End If
If DirectCast(a, Object).GetType IsNot DirectCast(c, Object).GetType Then
Debug.WriteLine(“A Doesn’t implements the same interface that C”)
End If
