Interfase a Objecto

10/09/2004 - 15:39 por Anonimo | Informe spam
Tengo un procedimiento MostrarMensaje y una interfase
saludo. Por otra parte una clase que implementa ISaludo


Public Interface ISaludo
End Interface

Public sub MostrarMensaje(obj as ISaludo)
messagebox.show(obj.Nombre) '?????????
end sub


public class Hola
implements ISaludo
public readonly property Nombre() as string
return "Hola"
end property
End class


lo que quiero saber es como transformar obj en Hola en
tiempo de diseño para poder usar obj.Nombre

gracias

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
10/09/2004 - 16:40 | Informe spam
Si piensas llamar a MostrarMensaje pasandole un ISaludo, lo que deberias
hacer es poner la propiedad Nombre en esa interface y luego implementarla en
la clase. Sino simplemente no tiene sentido ya que no puedes asegurar que el
objeto que se le pasa tenga una propiedad llamada Nombre. Sino simplemente
pasale el objeto como Hola a MostrarMensaje.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#2 Anonimo
10/09/2004 - 18:35 | Informe spam
lo que pasa es que saludo después puede tener otras
propiedade...

también la pregunta iba a apuntada a como transformar un
object en una clase en particular...

quizá quise hacer un ejemplo para abarcar dos preguntas,
no me salió bien :-)


Si piensas llamar a MostrarMensaje pasandole un ISaludo,


lo que deberias
hacer es poner la propiedad Nombre en esa interface y


luego implementarla en
la clase. Sino simplemente no tiene sentido ya que no


puedes asegurar que el
objeto que se le pasa tenga una propiedad llamada Nombre.


Sino simplemente
pasale el objeto como Hola a MostrarMensaje.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo


.

Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
10/09/2004 - 19:20 | Informe spam
lo que pasa es que saludo después puede tener otras
propiedade...



El asunto es que no tiene sentido el pasar la interfaz si no se va a usar la
interfaz. Por ejemplo si tienes estas dos clases:

Public Class Clase1
Implements ISaludo

Public Property Nombre() As String
'
End Property

End Class

Public Class Clase2
Implements ISaludo

End Class

Podria pasarle un objeto de la Clase2 a MostrarMensaje, cosa que seria
totalmente valida por implementar ISaludo, pero el codigo va a fallar porque
Clase2 no tiene una propiedad Nombre ni es de tipo Clase1 como para poder
hacer una conversion. Hacer eso seria simplemente un mal diseño. En cambio
si ISaludo contiene la propiedad Nombre, entonces en MostrarMensaje no
importaria que clase es la que la implementa ya que siempre seria accesible
a traves de la interface. Es decir:

Public Interface ISaludo
Property Nombre() As String
End Interface

Public Class Clase1
Implements ISaludo

Public Property Nombre() As String Implements ISaludo.Nombre
'
End Property

End Class

Public sub MostrarMensaje(obj as ISaludo)

' Puedo llamar a Nombre porque pertenece a la interfaz ISaludo.
' Y se que esto no va a fallar
MessageBox.Show(obj.Nombre)

End Sub

también la pregunta iba a apuntada a como transformar un
object en una clase en particular...



Para la conversion tienes dos formas, con CType y con DirectCast. La
diferencia entre CType y DirectCast es que CType intenta convertir el objeto
si los el objeto no es del tipo al que se quiere convertir mientras que
DirectCast solo puede convertir si el objeto es de la clase a la que se lo
quiere convertir.

Dim c1 As Clase1
c1 = DirectCast(obj, Class1)
c1 = CType(obj, Class1)

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida