FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Tipos Genericos
Hola a todos tengo en siguiente problema: Cree una clase que acepta un parámetro de tipo genérico <T>, la idea de este parámetro es que acepte clases que descienden de una clase en común, lo cual también podría definirse de este tipo <t:class>, para acotar su definición. El problema que tengo es como acceder a los campos que tiene el parámetro <T>, ya que este representa la clase que es pasada. Para que quede mas claro detallo el código:
Como ven la clase recibe un parámetro <T> que es asignado a FDomain. Esta asignación necesito hacerla campo a campo (clonar el objeto). Me imagino que el compilador al no saber que tipo de parámetro sera pasado no admite especificar sus campos en forma literal, pero debe existir alguna forma de invocarlos.... nota:Cambie <> por (), ya que las etiquetas de código Delphi no lo muestran. Saludos... |
#2
|
||||
|
||||
Sí, es un bug, pero puedes poner un espacio entre ellos y ya se verán bien.
|
#3
|
||||
|
||||
Una de las razones por las que no terminan de gustarme las generics (o templates, como las llaman en C++) es que confunde al programador. Como en este caso.
Si lo que quieres es que un procedimiento, función o variable admita o use objetos que deriven de cierta clase, entonces no debes usar generics, sino herencia. Basta con indicar la clase base y admitirá cualquier objeto cuya clase derive de dicha clase base. No sólo podrás discriminar qué clases usar, sino que además generará ejecutables más ligeros. |
#4
|
|||
|
|||
Cita:
Ya lo había pensado, pero (siempre hay un pero), cuando accedes al campo (FDomain) desde fuera de la clase, solo tendrás acceso a los integrantes de la clase base (TDomain) en forma directa. Si quieres tener acceso a los integrantes de la clase descendiente tendrás que especificarlo en forma explicita, por ejemplo: Suponiendo que TDomainString es descendiente de TDomain. La idea es que dicho acceso sea transparente: Saludos... |
#5
|
||||
|
||||
Accediendo una propiedad privada como si fuera una publica? Uno de los conceptos fundamentales de la OO es el *encapsulamiento*. Estas yendo contra el viento y por eso sufres.
Y la forma que pones de ver domain es absurda. Casi siempre un programador se pone a dar vueltas a una aparente restriccion tecnica es porque su diseño esta deficiente. Osea: Hacks son un code-smell (una indicacion poderosa, 90% de los casos, que estas contra el viento, en vez de solucionando un genuino problema)
__________________
El malabarista. |
#6
|
|||
|
|||
Cita:
Cita:
|
#7
|
||||
|
||||
Ok, podrias explicar que es lo que estas tratando de hacer? Cual es el objetivo de este codigo?
__________________
El malabarista. |
#8
|
|||
|
|||
Podrías explicar que quieres haer con el código que pones?
Saludos
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno |
#9
|
||||
|
||||
Cita:
Puedes crear una referencia de clase como campo en tu clase generica. Me explico. En lazarus cree una clase que representa una lista generica a objectos (TClientes, TArticulos, etc). Para eso defini un campo privado
Que esta definido asi:
En el codigo para crear los objectos de la lista hago asi
Claro que de todas formas es necesario hacer un cast para obtener la clase que deseo
Espero sea de utilidad Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar. Antonio Machado |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Class Helpers sobre Genericos.. | yapt | OOP | 1 | 24-04-2011 16:06:17 |
Procedures Genericos con Parametros de Controles.... | Kenobi | Varios | 23 | 21-11-2007 00:42:41 |
Listbox con items genericos | ANG4L | Varios | 2 | 11-05-2006 03:54:37 |
Parametros sql genericos | AbcXxx | Conexión con bases de datos | 2 | 10-11-2005 00:31:59 |
... 100 tipos... | Jure | Humor | 0 | 18-03-2004 14:24:30 |
|