jump to navigation

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