Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > .NET
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-06-2006
radaalvaro radaalvaro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Santa Cruz - Bolivia
Posts: 163
Poder: 19
radaalvaro Va por buen camino
Unhappy Crear Instancias a partir de un nombre

Saludos a todos los DelphiAdictos. jejeje.

Tengo un problema que me aflije, les describo en que consiste con un pequeño ejemplo.

Tengo las clases...

type
Papel = class
...
end;

Lapiz = class
...
end;

Tijera = class
...
end;

si tengo esas clases y en algun lugar de mi codigo tengo un string con el nombre de alguna de las clases

var s:string
Begin
s := 'Papel';
...

necesito poder crear una instancia de alguna de esas clases, el nombre de la clase que deseo instanciar estara en un string, especificamente en la variable S.

deseo ver la forma de crear una instancia de clase que especifica S, SIN USAR un IF s='Papel'... o alguna cosa asi, por que poseo muchas clases y deseo hacer algo genérico.

Si de algo sirve..., estoy usando Delphi 2006.NET, NO VCL.NET, sino solo DELPHI 2006.NET.

jejejeje, trate de ser lo mas explicito que el tiempo me lo permitio..

Sin mas que decirles, y esperando que puedan ayudarme con ese problema me despido de todos los DELPHIADICTOS.
Responder Con Cita
  #2  
Antiguo 01-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Aquí lo tienes

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 02-06-2006
radaalvaro radaalvaro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Santa Cruz - Bolivia
Posts: 163
Poder: 19
radaalvaro Va por buen camino
Wink Instancias

Muchas gracias LEPE, jejeje, pero creo que no leiste el ultimo comentario, no Delphi WIN32 ni VCL.net, si no DELPHI.NET, mas concretamente quiero saber como se podria hacer aquello que explique en c#.net o en VB.net, ya que si logro hacerlo alli tambien lo hare en Delphi.net, por usar el mismo FRAMEWORK.

Gracias de todos modos.
Responder Con Cita
  #4  
Antiguo 02-06-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Checa si te sirve este artículo


Saludos...
Responder Con Cita
  #5  
Antiguo 02-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Aunque es un tema que daría para mucho, aquí te pongo un sencillísimo ejemplo basado en los que aparecen en el libro Visual C# de Francisco Charte:

Código:
/*
 * Basado en ejemplos del libro Visual C# de Francisco,
 * Charte, concretamente, los del capítulo titulado
 * Recuperación de información de tipos en tiempo de
 * ejecución.
 * 
 */

using System;
using System.Reflection;

namespace Consola.Pruebas
{
  class Program
  {
    static void Main(string[] args)
    {
      /* Obtenemos una referencia a este ensamblado, pero, nótese
         que podríamos obtener la referencia de cualquier otro
      */
      Assembly ensamblado = Assembly.GetExecutingAssembly();

      /* Obtenemos el tipo de la clase "Prueba", a traves de su
         nombre completo, que, como puede verse, incluye el ensam-
         blado en donde se encuentra dicha clase Pruebas.
      */
      Type ClasePrueba = ensamblado.GetType("Consola.Pruebas.Prueba");

      // Si efectivamente tenemos el tipo de la clase...
      if (ClasePrueba != null)
      {
        /* Creamos una instancia de la clase, pero, nótese que lo
           obtendremos será la instancia de un "objeto", pero no po-
           dremos trabajar con él como si fuera directamente instan-
           ciado "como suele ser habitual".
        */  
        Object ObjetoPrueba = Activator.CreateInstance(ClasePrueba);

        // Esta sería una forma de invocar a un método del objeto
        (ObjetoPrueba as Prueba).Saludos();

        // Esta sería otra, nótese que aquí "no conocemos" la clase Prueba
        MethodInfo MetodoSaludos = ClasePrueba.GetMethod("Saludos");
        MetodoSaludos.Invoke(ObjetoPrueba, null);
      }

      Console.ReadLine();
    }
  }
  
  // Clase para las pruebas anteriores
  class Prueba
  {
    public Prueba()
    {
      Console.WriteLine("Constructor de la clase Prueba");
    }

    public void Saludos()
    {
      Console.WriteLine("Método Saludos de la clase Prueba");
    }
  }

} // class Program
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 02-06-2006 a las 18:49:36.
Responder Con Cita
  #6  
Antiguo 13-06-2006
radaalvaro radaalvaro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Santa Cruz - Bolivia
Posts: 163
Poder: 19
radaalvaro Va por buen camino
Muchas gracias por la respuesta... me dio un rumbo en mi busqueda, pero ahora tengo otro problema... cuando en DELPHI, quiero hacer, lo que esta puesto a continuación...

Código:
 
      /* Obtenemos el tipo de la clase "Prueba", a traves de su
         nombre completo, que, como puede verse, incluye el ensam-
         blado en donde se encuentra dicha clase Pruebas.
      */
      Type ClasePrueba = ensamblado.GetType("Consola.Pruebas.Prueba");
Simplemente no me devuelve nada, ya que le pongo como nombre de clase por ejem. Project1.TDatos.
ó
Project.Unit1.TDatos
ó
Unit1.TDatos
ó
TDatos...
y de ninguna de las maneras me funciona, de tal modo que no puedo obtener lo que busco... alguien ya lo ha hecho en DELPHI.NET???
Responder Con Cita
  #7  
Antiguo 13-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Se me ocurre que te asegures de que el camino a la clase es el que tiene que ser. ¿Cómo? A bote pronto diría que utilizaras algo como esto:

Código:
Assembly ensamblado = Assembly.GetExecutingAssembly();
Creo que en "ensamblado" cuentas con propiedades como "FullName", "Name" o similares, que tal vez puedan orientarte. Desde luego el código que he puesto anteriormente está escrito en C#, pero, no se me ocurre ahora otro motivo por el que no funcionara también en Delphi .NET.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 13-06-2006
radaalvaro radaalvaro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Santa Cruz - Bolivia
Posts: 163
Poder: 19
radaalvaro Va por buen camino
Assembly

Hola Dec.

quiero darte muchas gracias por tu atención... ahora, avocandome al tema, intente lo que dices, es mas, me base en todo el bloque de codigo que me diste que estaba en c#, y es muy bueno, pero tengo la flla justamente a la hora de llamar a la clase, es decir a la hora de hacer el GETTYPE, desde el assembly, ya que el assembly, carga tranquilamente, y es el correcto.

jejejeje, mi problema parece de locos...

GRACIAS...
Responder Con Cita
  #9  
Antiguo 14-06-2006
radaalvaro radaalvaro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Santa Cruz - Bolivia
Posts: 163
Poder: 19
radaalvaro Va por buen camino
Thumbs up Solucion Dada

Hola a todos, les cuento que leyendo un poco y probando otro poco, pude encontrar las solución... el problema se suscitaba en el nombre de la clase a la que estaba buscaba, y como dice en el bloque de codigo sugerido por DEC, se debe de poner el nombre de la clase unido al nombre de su ensamblado.

Yo no podia hacerlo, ya que en teoria mi clases no estaban manejando ensamblado, pero todo se soluciono poniendole el nombre de la unidad + punto + el nombre de la clase... y con eso todo corre de maravilla.

Gracias...
Responder Con Cita
  #10  
Antiguo 04-04-2009
Avatar de ColdFusion
ColdFusion ColdFusion is offline
Miembro
 
Registrado: oct 2008
Ubicación: Honduras
Posts: 32
Poder: 0
ColdFusion Va por buen camino
Ya que hablamos de instancias, como puedo hacer para que mi aplicacion solo se pueda abrir una vez, es decir si ya se esta ejecutando que no se abra si no que muestre el que ya se esta ejecutando
__________________
Visita mi blog personal http://edwinmunguia.co.nr/ !
Responder Con Cita
  #11  
Antiguo 15-04-2009
radaalvaro radaalvaro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Santa Cruz - Bolivia
Posts: 163
Poder: 19
radaalvaro Va por buen camino
Instancias

Recuerdo que alguna vez, hice algo así, y creo que te dará el rumbo...

Para eso esta el patron de Diseño "Singleton", si bien, no es un bloque de codigo que hace la tarea que necesitas, es un esquema de como debe de funcionar.

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
crear un XML a partir de ClientDataSet jmlifi Internet 2 09-01-2006 00:18:28
Crear un fichero .tlb a partir de un .pas jfgazquez Varios 1 18-07-2005 17:44:50
Conocer PrinterIndex a partir del nombre Novás Varios 1 16-07-2004 19:26:14
Crear un pdf a partir de otros pdf barencibia Varios 0 13-06-2004 20:25:08
Crear un EXE a partir de un TXT o CPP aleidania Varios 1 25-10-2003 19:36:45


La franja horaria es GMT +2. Ahora son las 14:17:20.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi