¿Como usar clase, que implementa una interfaz, como argumento en VB.NET?
-
- Junior Member
31/07/2012#1 ¿Como usar clase, que implementa una interfaz, como argumento en VB.NET?Que tal.
Tengo la siguiente situación. Estoy desarrollando un componente en VB.NET 2005, el cuál debe aceptar un "catalogo", para manejarlo. Este catalogo lo debe definir cualquier usuario, es decir yo solo entregaré el componente y los demás lo usaran a su antojo. Para ello requiero que el usuario asigne un catalogo que implemente una interfaz "ICatalogo" de tal suerte que pueda manejarlo en mi componente.
Ahora la situación. He definido en mi clase componente la propiedad "Catalogo" la cual es de tipo "ICatalogo", pero al manejarla por medio de otra clase que uso como prueba, noto que no hay diferencia si le asigno un objeto que implemente "ICatalogo" o si le asigno un objeto que no implemente nada. Entonces pues acudo a ustedes para pedir una asesoría de cómo realizar correctamente esto.
P.D. Disculpen si algo no es correcto en este hilo, es que es la primera vez que posteo algo aquí. Saludos y gracias de antemano -
-
-
Junior Member
01/08/2012#2 Re: ¿Como usar clase, que implementa una interfaz, como argumento en VB.NET?Bueno, al parecer ya resolví esa parte. Pero surgió otra duda. Si me pueden ayudar de favor.
Al pedir el catalogo, como argumento para mi objeto, lo solicito como un heredero de Form que contenga la interfaz ICatalogo implementada como en el código siguiente:Ahora bien, oCatalogo es para mi una variable global del tipo ICatalogo, pero debido a esto no puedo usar los métodos de un Form, ya que no lo defino como un Form. ¿Existe alguna forma de declarar que oCatalogo sea un form que implementa ICatalogo?, por ejemplo algo así:Código:Public Sub SetCatalogo(Of T As {Form, ICatalogo})(ByVal pCatalogo As T) oCatalogo = pCatalogo End Sub
private oCatalogo as new Form{ICatalogo}
¿O algo parecido?. Saludos y de verdad me gustaría si me pudieran ayudar ya que no he encontrado algo útil hasta ahora. -
-
¿Para qué querés usar los métodos del formulario?
Si en ICatalogo definis todos los métodos necesarios un objeto del tipo ICatalogo es lo único que deberías pasar como parámetro (x más q el mismo objeto sea un formulario y además un ICatalogo, si en ICatalogo está la interfaz necesaria para comunicarte entonces no habría problemas).
No tengo el VS en mi laburo, pero me parece que hay otra manera de expresar el paso del parámetro que no sea con genéricos (que es lo que hiciste en el ejemplo):Código:Public Sub SetCatalogo(ByVal pCatalogo As ICatalogo) oCatalogo = pCatalogo End Sub
