Como validar si un objeto implementa una interfaz (sin usar Reflection)

Bruno nos contaba hoy como validar si un objeto implementa una intefaz.


De paso que pruebo el Plugin de WLW os doy otra opción sin usar Reflection.


Ya comenta Rodrígo de hacerlo de esta forma y yo os enseño el código. Parece que es mucho más código, pero en realidad la comprobación es la función Comprobar().

‘Esta es la intefaz que vamos a utilizar.
Public Interface IClase
Property name() As String
End Interface

‘Esta es la clase que la implmenta
Public Class Clase_1
Implements IClase

Private _name As String

Public Property name() As String Implements IClase.name
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
End Class

‘Esta es una clase que no la implementa
Public Class Clase_2
Private _name As String

Public Property name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
End Class

‘Y aquí tenemos el ejemplo
Public Class Form1

‘Esta es la función para comprobar
Public Function Comprobar(ByVal Obj As Object) As Boolean
Try
Dim NewObj As Object
NewObj = CType(Obj, IClase)
Catch ex As Exception
Return False
Exit Function
End Try
Return True
End Function

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim Clase1 As New Clase_1()
Dim Clase2 As New Clase_2()

Dim _msg As String

If Comprobar(Clase1) Then
_msg = «Clase1 SI implmenta la intefaz» & Chr(13)
Else
_msg = «Clase1 NO implmenta la intefaz» & Chr(13)
End If

If Comprobar(Clase2) Then
_msg += «Clase2 SI implmenta la intefaz»
Else
_msg += «Clase2 NO implmenta la intefaz»
End If

MsgBox(_msg)
End Sub
End Class

Eso es todo [:D], espero que os sea útil.

One thought on “Como validar si un objeto implementa una interfaz (sin usar Reflection)

  1. Yo lo valido siempre asi, y funciona.

    aqui dejo Un recorte de codigo Real
    If TypeOf obj Is IListaClasesRellenable And Not TypeOf obj Is IListaAbstracta Then ‘ Si es una lista de clases rellenable
    Dim dr As DataRow
    For Each dr In dt.Rows
    ‘ Añadimos el valor de la columna
    Call Filler(CType(obj, IListaClasesRellenable).AddNew(dr(0).ToString), dr, dtcb)
    Next

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *