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

Published 18/8/2006 16:15 | Eugenio Estrada

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 Big Smile, espero que os sea útil.
Archivado en: ,,
Comparte este post:

Comentarios

# Roberto Marcos said on August 1, 2007 12:29 PM:

Yo lo valido siempre asi, y funciona.

<TypeOf obj is IInterface>

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