GetType e Interfaces en Visual Basic.Net

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

Anuncios

2 Comentarios Agrega el tuyo

  1. Federico Marenzi dice:

    Estoy teniendo inconvenientes con la libreria Cooperator.Framework.Web.dll, el control TextBox.
    Funciona correctamente en mi ambiente de desarrollo, pero cuando lo paso a un Windows 2003, deja de funcionar la parte decimal, guarda todos los valores como enteros.
    No es un problema de configuracion Regional, ya que es lo primero que pense, ademas, lo verifique con otro equipo, de similares caracteristicas y los resultados fueron los mismos.

    Espero sepas encontrar alguna solucion, ya que estas librerias con fantasticas y quisiera seguir utilizandolas.

    Muchas gracias y espero tu respuesta.

  2. What’s up, I read your blog like every week. Your writing style is awesome, keep it up!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s