Autor Tema: Propiedad Generica de Lista  (Leído 4591 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Jonhyrey

  • Sv Full Member
  • *
  • Mensajes: 558
Propiedad Generica de Lista
« : junio 11, 2008, 05:30:15 pm »
Hola a Todos

Vengo a molestarlos de nuevo con una consulta acerca de los generics que vienen incluidos en el framework 2.0 y posteriores ....

El asunto es que por ahí tengo un control personalizado que agrega y ordena botones dentro de un panel. El control me da muchas facilidades, ya que basta con enviarle el Origen de datos como DataTable Y luego llamar un procedimiento para que agregue los elementos y ordene los botones en el contenedor.

En mis ultimos proyectos he empezado a utilizar los "generics" para aumentar el performance de mi aplicación, y deseo cambiar el origen de datos del control que les mencioné a una propiedad genérica, para aumentar la velocidad de Carga del control.

Me he quebrado la cabeza con esta propiedad... y es que ... no se como ponerla :

Public Class <NombreControl>
Private _ListSource as List(OF T)

Public Property ListSource as List(OF T)
Get
     Return Me._ListSource
End Get
Set(Byval value as List(Of T))
      Me._ListSource = value
End Set
End Property
End Class

Así debería de quedar... pero obviamente el objeto "T" no es reconocido... Si hago unos arreglos.... dejo las cosas así:

Public Class <NombreControl> (OF T)
Private _ListSource as List(OF T)

Public Property ListSource as List(OF T)
Get
     Return Me._ListSource
End Get
Set(Byval value as List(Of T))
      Me._ListSource = value
End Set
End Property
End Class

Y así, si puede reconocer que "T" representa una clase cualquiera..... PEEEROOOO ...... ........
Me salen ChorroMil Errores en todo el código porque cambie el tipo de la clase..... Talvez alguien que ya trabajó con esto y me heche una mano.

Saludos
« Última Modificación: junio 11, 2008, 05:31:56 pm por Jonhyrey »



Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: Propiedad Generica de Lista
« Respuesta #1 : junio 11, 2008, 10:28:47 pm »
hey compadre porque no comentas que es lo que queres hacer (una historia grandecita) tal vez con tiempecito podemos crear algun proyectillo o algo darte ideas para ver que es lo que necesitas, yo ocupo los genericos para crear colecciones type-safe de objetos en el c# pero la sintaxis de vb no le entiendo tanto que se diga.

Pero no es mas que crear la coleccion y pasarle el objeto del que queres que la cree luego agregar objetos a ella y se acaba :S

Comentame de que tipos de objetos la queres crear algo asi y tal vez sale algo :)

Desconectado mxgxw

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 5665
  • Starlet - 999cc
    • mxgxw
Re: Propiedad Generica de Lista
« Respuesta #2 : junio 11, 2008, 10:36:42 pm »
hey compadre porque no comentas que es lo que queres hacer (una historia grandecita) tal vez con tiempecito podemos crear algun proyectillo o algo darte ideas para ver que es lo que necesitas, yo ocupo los genericos para crear colecciones type-safe de objetos en el c# pero la sintaxis de vb no le entiendo tanto que se diga.

Pero no es mas que crear la coleccion y pasarle el objeto del que queres que la cree luego agregar objetos a ella y se acaba :S

Comentame de que tipos de objetos la queres crear algo asi y tal vez sale algo :)

Lo que no entiendo es en que momento el utilizar el tipo generico le va a aumentar el performance.

Tengo entendido que usas un tipo generico.. cuando por ejemplo tenes una lista, y todos tus objetos van a ser de un tipo X, y no queres estar chequeando si al ingresar un objeto es de cierto tipo o convertirlo de un tipo Object a un tipo en particular lo mismo para sacarlo, con genericos no tenes que hacer la conversion.

Ahora... si en tu aplicacion tenes varias clases que realizan las mismas operaciones sobre distintos objetos diferentes, entonces ese es un buen caso de uso para crear una sola clase con tipos genericos.


Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: Propiedad Generica de Lista
« Respuesta #3 : junio 11, 2008, 10:43:06 pm »
Si lo que me doy cuenta al leer por cuarta vez su post es que quiere cambiar a tipo generico el origen de los datos, y yo siempre me habia enfocado en usar los genericos para lo mismo que vos decis mxgxwabcd para evitar el bendito boxing y unboxing cuando queres hacer algo con los objetos, y para asegurarte que en la coleccion siempre vas a tener los objetos que esperas y que no le va a entrar nada raro.

Pero lo de sustituir una propiedad por un generico cuando es una propiedad unica si es primera vez que lo veo, vamos a investigar  B-)

Desconectado Jonhyrey

  • Sv Full Member
  • *
  • Mensajes: 558
Re: Propiedad Generica de Lista
« Respuesta #4 : junio 12, 2008, 04:44:35 pm »
Bueno

Lo que quiero hacer, es establecer una propiedad que admita listas de cualquier clase como origen de datos para el control .... ¿Para que?

1.Las listas suelo llenarlas con DataReaders, lo que hace mi aplicación un poco más rápida que cuando la lleno con un DataTable. Ya probé y en realidad se ve que disminuye el tiempo en que se cargan los controles.

2.Estoy tratando de apegarme a la programación Orientada a Objetos y este tipo de Propiedad me va a ayudar en muchas partes de los proyectos que desarrolle.

Ahora la idea es que esta en crear una propiedad que represente listas genéricas...

Un par de ejemplos del uso de mi control:

(Es para una aplicación de facturación orientada a restaurantes para que funcione en un monitor TouchScreen). Quiero mostrarle el menú al usuario y para ello tengo que ponerle a mi "ButtonContainer" (Que es mi control personalizado) el DataSource así:

Dim OrigenMenu as New List(OF Productos)
OrigenMenu = <Metodop/Obtener Los productos>
Me.ButtonContainer.DataSource  = OrigenMenu
Me.ButtonContainer.Llenar()

Y muestra cada uno de los productos representados en un botón.

Otro ejemplo:

Quiero que el usuario pueda seleccionar las mesas en las que abre una orden y para ello hago lo mismo... asigno el datasource:

Dim OrigenMesas as New List(OF Mesa)
OrigenMesas = <Metodop/Obtener Las Mesas>
Me.ButtonContainer.DataSource  = OrigenMesas
Me.ButtonContainer.Llenar()

Se me ocurria ponerle la propiedad DataSource del Control como tipo Object... pero para sacarle el jugo a los Generics había pensado en la posibilidad de hacer que la propiedad admitiera cualquier tipo de listados.

No se si se puede.... pero de verdad me ayudaría muchísimo.

saludos y gracias por sus comentarios.



Desconectado Juancho

  • The Communiter-
  • *
  • Mensajes: 1311
Re: Propiedad Generica de Lista
« Respuesta #5 : junio 12, 2008, 10:08:19 pm »
Para sustituir una propiedad rdoggsv tiene palabras reservada el VB. Bueno la de la propiedad si no me acuerdo, no me acuerdo para propiedades sustituir el valor de una propiedad se pone Overloads o Overidable, no me acuerdo bn. Para los eventos si me acuerdo es SHADOWS, pero para propiedades creo que es OVERLOADS OVERRIDES PROPERTY creo pero no estoy seguro, en la ayuda de MSDN esta,ahorita porque no tengo el codigo fuente de un programa que hic!
<a href="http://www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/" target="_blank">
<img src="http://cache.www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/b_560x95.png" border="0" width="560" height="95" alt="" />
</a>

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: Propiedad Generica de Lista
« Respuesta #6 : junio 13, 2008, 10:47:45 am »
Para sustituir una propiedad rdoggsv tiene palabras reservada el VB. Bueno la de la propiedad si no me acuerdo, no me acuerdo para propiedades sustituir el valor de una propiedad se pone Overloads o Overidable, no me acuerdo bn. Para los eventos si me acuerdo es SHADOWS, pero para propiedades creo que es OVERLOADS OVERRIDES PROPERTY creo pero no estoy seguro, en la ayuda de MSDN esta,ahorita porque no tengo el codigo fuente de un programa que hic!

Esi si se que se puede hacer Juancho, redeclarar propiedades o metodos, pero a lo que me referia era que no encontraba el sentido de redeclarar la listsource por un generico pero ya definio bien el tema jonhyrey solo que no ha quedado chance de leerlo todo :S