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
#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 :-)


Mostrar la cita
lo que deberias
Mostrar la cita
luego implementarla en
Mostrar la cita
puedes asegurar que el
Mostrar la cita
Sino simplemente
Mostrar la cita
#3 Eduardo A. Morcillo [MS MVP VB]
10/09/2004 - 19:20 | Informe spam
Mostrar la cita
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

Mostrar la cita
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
Ads by Google
Search Busqueda sugerida